변수는 단 하나의 값을 저장할 수 있는 메모리 공간을 의미합니다. 변수가 저장하는 값은 고정되지 않으며, 새로운 값이 기록될 때 자동으로 덮어씌워질 수 있습니다.
변수를 선언하는 이유는 메모리에 값을 저장할 공간을 확보하기 위해서입니다.
변수타입 변수이름;
예제:
int age;
int num;
// 또는 여러 개의 변수를 동시에 선언
int age, num;
Java에서는 변수 타입에 따라 메모리 공간의 크기가 결정됩니다.
| 자료형 | 크기 | 값의 범위 |
|---|---|---|
boolean | 1 byte | true 또는 false |
char | 2 bytes | 0 ~ 65,535 (유니코드 문자 1개) |
byte | 1 byte | -128 ~ 127 |
short | 2 bytes | -32,768 ~ 32,767 |
int | 4 bytes | -2,147,483,648 ~ 2,147,483,647 |
long | 8 bytes | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
float | 4 bytes | 소수점 숫자 (정밀도 낮음) |
double | 8 bytes | 소수점 숫자 (정밀도 높음) |
참고로 int는 integer(정수)의 앞글자이다.
double은 float의 2배여서 그렇게 부릅니다.
예제 코드:
class Variable1_1 {
boolean flag;
char grade;
byte val;
short sval;
int num;
long price;
float tax;
double score;
}
true, int) 사용 불가int 1num; → 오류 발생)_와 $만 사용 가능| 표기법 | 예제 | 특징 |
|---|---|---|
| Camel case | varTest | 일반적인 변수 및 메서드 표기법 |
| Snake case | var_test | Java에서는 잘 사용되지 않음 |
| Pascal case | VarTest | Java에서는 클래스명에 주로 사용 |
| Kebab case | var-test | Java에서 - 사용 불가 |
변수를 사용하기 전에 값을 저장하는 것을 초기화라고 합니다.
변수타입 변수이름 = 값;
예제:
int age;
age = 23;
// 또는
int age = 23;
// 여러 개의 변수를 한 줄에 초기화
int age = 23, num = 32768;
class Variable1_2 {
public static void main(String[] args) {
boolean flag = false;
char grade = 'A';
byte val = 127;
short sval = 128;
int num = 32768;
long price = 2_147_483_648L;
float tax = 3.14f;
double score = 3.14159265358979;
System.out.println("boolean = " + flag);
System.out.println("char = " + grade);
System.out.println("byte = " + val);
System.out.println("short = " + sval);
System.out.println("int = " + num);
System.out.println("long = " + price);
System.out.println("float = " + tax);
System.out.println("double = " + score);
}
}
변수의 값을 읽어서 다른 변수에 할당하거나 출력할 수 있습니다.
class Variable1_3 {
public static void main(String[] args) {
int year, age = 23;
year = age + 2000;
System.out.println("year = " + year); // 2023
age = age + 1;
System.out.println("age = " + age); // 24
System.out.println("year = " + year); // 2023
}
}
Java에는 클래스 변수, 인스턴스 변수, 지역 변수가 있습니다.
| 변수 종류 | 선언 위치 | 특징 |
|---|---|---|
| 클래스 변수 | 클래스 내부, static 사용 | 모든 객체가 공유하는 변수 |
| 인스턴스 변수 | 클래스 내부, static 없음 | 객체가 생성될 때마다 따로 존재 |
| 지역 변수 | 메서드 내부 | 해당 메서드에서만 사용 가능 |
class Variable1_4 {
static int classVal = 100; // 클래스 변수
int instanceVal = 200; // 인스턴스 변수
public static void main(String[] args) {
int num; // 지역 변수
// System.out.println("int = " + num); // Error 발생
num = 300;
System.out.println("int = " + num); // 300
// 인스턴스 변수 사용을 위해 객체 생성
Variable1_4 instance = new Variable1_4();
System.out.println("instanceVal = " + instance.instanceVal); // 200
// 클래스 변수
System.out.println("classVal = " + classVal);
System.out.println("Main.classVal = " + Variable1_4.classVal);
}
}
Java에서 변수를 선언할 때 타입을 명확하게 지정해야 한다는 점이 중요합니다.

Java에서도 변수를 서랍(drawer) 같은 개념으로 비유할 수 있지만, Java는 JavaScript보다 정적 타입(static typing) 언어라서 개념이 좀 다르게 적용돼.
JavaScript는 동적 타입(dynamic typing) 언어라서, 변수(서랍)에 어떤 값이든 넣을 수 있어. 예를 들어,
let box = 10; // 숫자 10을 넣음
box = "hello"; // 문자열 "hello"를 넣어도 OK
이렇게 같은 변수에 다양한 타입의 데이터를 저장할 수 있어서 "서랍에 아무 물건이나 넣을 수 있다" 라고 비유하는 거야.
Java는 변수를 선언할 때 미리 타입을 정해야 해. 예를 들어,
int box = 10; // 정수 10을 넣음
box = "hello"; // ❌ 오류 발생! (문자열을 넣을 수 없음)
Java에서는 한 번 정해진 타입의 데이터만 저장할 수 있어서 "특정 물건만 넣을 수 있는 상자" 로 비유하는 게 더 적절해.
예를 들어, 정수형(int) 변수는 정수만 받을 수 있고, 문자열(String) 변수는 문자열만 받을 수 있어.
Java에는 변수에 대한 몇 가지 개념이 더 있어:
1. 기본형 변수(Primitive Type): int, double, char 등은 값 자체를 저장해.
→ 즉, int a = 10; 하면 a 라는 상자 안에 숫자 10이 들어감.
2. 참조형 변수(Reference Type): String, Array, Object 등은 실제 값이 아니라 주소(참조)를 저장해.
→ 즉, String s = "hello"; 하면 s 상자에는 "hello" 자체가 아니라 "hello"가 저장된 메모리 주소가 들어가 있어.
이런 이유로 Java에서는 단순한 서랍보다는 "라벨이 붙은 상자(특정 물건만 들어가는 상자)" 또는 "택배 상자(어디 있는지 주소만 갖고 있는 경우)" 같은 비유가 더 자주 사용돼.
💡 한 줄 요약:
완