변수는 단 하나의 값을 저장할 수 있는 메모리 공간을 의미합니다. 변수가 저장하는 값은 고정되지 않으며, 새로운 값이 기록될 때 자동으로 덮어씌워질 수 있습니다.
변수를 선언하는 이유는 메모리에 값을 저장할 공간을 확보하기 위해서입니다.
변수타입 변수이름;
예제:
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에서는 단순한 서랍보다는 "라벨이 붙은 상자(특정 물건만 들어가는 상자)" 또는 "택배 상자(어디 있는지 주소만 갖고 있는 경우)" 같은 비유가 더 자주 사용돼.
💡 한 줄 요약:
완