Java 변수와 데이터 타입 완벽 가이드: 예제로 이해하기
Java에서 변수란?
변수는 Java 프로그램 실행 중 데이터를 보관하는 명명된 메모리 위치입니다. 모든 변수는 저장할 값의 종류와 필요한 메모리 양을 지정하는 데이터 타입이 할당됩니다.
Java 변수는 세 가지 주요 범주로 나뉩니다:
- 지역 변수(Local variables) — 메서드나 블록 내부 선언.
- 인스턴스 변수(Instance variables) — 클래스 내 메서드 밖 선언, 개별 객체에 속함.
- 정적 변수(Static variables) —
static 키워드로 선언, 클래스 자체에 속하며 프로그램 시작 시 한 번 초기화.
변수 사용: 선언 & 초기화
변수 작업 위해 다음 두 단계 필요:
- 타입과 이름으로 선언.
- 값 할당으로 초기화.
변수 선언
변수 선언 시 타입과 고유 이름 제공.

유효한 선언 예:
int a, b, c; float pi; double d; char a;
변수 초기화
초기화는 변수에 초기 값 할당.

유효한 초기화 예:
pi = 3.14f; do = 20.22d; a = 'v';
선언과 초기화를 한 문장으로 결합 가능:

예제:
int a = 2, b = 4, c = 6; float pi = 3.14f; double do = 20.22d; char a = 'v';
변수 유형
Java는 세 종류의 변수를 구분합니다:
- 지역 변수 (Local Variables)
- 인스턴스 변수 (Instance Variables)
- 정적 변수 (Static Variables)
1) 지역 변수
메서드나 블록 내 선언, 해당 메서드 실행 동안만 존재.
2) 인스턴스 변수
static 키워드 없이 정의, 클래스의 개별 객체에 연결.
3) 정적 변수
프로그램 시작 시 인스턴스 변수 전에 한 번 초기화. 인스턴스가 아닌 클래스에 속함.
예제: Java 변수 유형
class Guru99 {
static int a = 1; // 정적 변수
int data = 99; // 인스턴스 변수
void method() {
int b = 90; // 지역 변수
}
}
Java 데이터 타입
Java 데이터 타입은 두 범주로 나뉩니다:
- 기본 타입(Primitive types) — int, char, boolean, float 같은 내장 타입.
- 참조 타입(Non-primitive types) — 클래스, 배열, 인터페이스, 기타 객체.

기본 데이터 타입
Java는 고정 크기와 기본값을 가진 8가지 기본 타입 제공:
- 정수 타입 —
byte (1바이트), short (2바이트), int (4바이트), long (8바이트)
- 부동소수점 타입 —
float (4바이트), double (8바이트)
- 문자 타입 —
char (2바이트, 유니코드)
- 논리 타입 —
boolean (1비트, true 또는 false)
Java 기본 타입
| 데이터 타입 | 기본값 | 크기 |
| byte | 0 | 1 바이트 |
| short | 0 | 2 바이트 |
| int | 0 | 4 바이트 |
| long | 0L | 8 바이트 |
| float | 0.0f | 4 바이트 |
| double | 0.0d | 8 바이트 |
| boolean | false | 1 비트 |
| char | '\u0000' | 2 바이트 |
핵심 포인트
- 모든 숫자 타입은 부호 있음 (양수/음수 표현 가능).
- 데이터 타입 크기는 Java 언어 명세로 플랫폼 간 일관성 보장.
- Java
char는 유니코드 문자 저장으로 완전한 국제화 지원 위해 2바이트 사용.
타입 변환과 캐스팅
Java는 두 메커니즘으로 한 타입 값을 다른 타입 변수에 할당 가능:
- 암시적 변환 (Widening) — 작은 타입을 큰 타입에 할당 (예:
int → long). 자동 발생.
- 명시적 캐스팅 (Narrowing) — 큰 타입을 작은 타입에 할당 (예:
double → int). 프로그래머가 명시적 캐스팅 필요, 아니면 컴파일러가 데이터 손실 방지 위해 에러 보고.
예제: 타입 캐스팅 시연
1단계: 다음 코드를 에디터에 복사.
class Demo {
public static void main(String[] args) {
byte x;
int a = 270;
double b = 128.128;
System.out.println("int를 byte로 변환");
x = (byte) a;
System.out.println("a와 x " + a + " " + x);
System.out.println("double을 int로 변환");
a = (int) b;
System.out.println("b와 a " + b + " " + a);
System.out.println("\ndouble을 byte로 변환");
x = (byte) b;
System.out.println("b와 x " + b + " " + x);
}
}
2단계: 저장, 컴파일, 실행.
출력:
int를 byte로 변환
a와 x 270 14
double을 int로 변환
b와 a 128.128 128
double을 byte로 변환
b와 x 128.128 -128