Skip to content

Variable

변수는 프로그램 실행 중에 값을 저장하고 참조하기 위해 사용되는, 이름이 붙은 메모리 영역이다.

  1. 대소문자 구분
  2. 길이 제한 없음
  3. 예약어 사용 불가능
  4. 숫자로 시작 불가
  5. _ $를 제외한 특수문자 불가능
  • null 값을 가질 수 없음
  • 메소드 내에 선언된 기본형 변수는 JVM 스택(Stack) 영역에 실제 값이 직접 저장
타입설명크기예시
논리형boolean1 bytetrue, false
문자형char2 bytes’A’, ‘b’, ’$‘
정수형byte, short, int, long1, 2, 4, 8 bytes42, -1000, 987654321
실수형float, double4, 8 bytes3.14, -0.001

기본형 8종류를 제외한 모든 타입에 해당하며, 값이 저장된 메모리의 주소(reference)를 저장하는 타입이다.

  • 실제 객체 인스턴스는 JVM 힙(Heap) 영역에 생성
  • 변수는 힙 영역에 있는 객체의 주소값을 스택(Stack) 영역에 저장
  • null 값을 가질 수 있으며, 이는 변수가 어떠한 객체도 참조하고 있지 않음을 의미
  • Wrapper 클래스는 기본형 타입을 객체로 다루어야 할 때(예: 컬렉션) 사용하는 참조형 타입

변수와 상수는 값을 저장하는 점에서 동일하지만, 아래 차이점이 존재한다.

  • 변수(variable): 하나의 값을 저장하기 위한 공간
  • 상수(constant): 값을 한 번만 저장할 수 있는 공간(final 키워드 사용)
  • 리터럴(literal): 코드에 작성된 값 그 자체를 의미
class Example {
void example() {
int age = 14; // 변수
final int OGU_NUMBER = 59; // OGU_NUMBER: 상수, 59: 리터럴
}
}

변수와 마찬가지로 값 자체를 의미하는 리터럴에도 타입이 존재하며, 컴파일러는 리터럴을 보고 타입을 추론한다.

TypeExpression
binary0b{number}
octal0{number}
hexadecimal0x{number}
int{number}
long{number}L
TypeExpression
float{number}f(F)
double{number}d(D)
TypeExpression
char’{single character}‘
string”{string}“
TypeExpression
booleantrue/false
class Example {
void example() {
float pi = 3.14; // 변수와 리터럴 타입 불 일치 -> error
double rate = 59.59; // double 리터럴 타입 생략 가능 -> OK
int i = 'A'; // 문자 'A'의 아스키코드인 65가 할당 -> OK
long d = 59; // 저장 범위가 넓은 타입에 좁은 타입 저장 가능 -> OK
int ii = 0x123456789; // int 타입의 범위를 넘는 값 저장 -> error
String str = ""; // 빈 문자열 할당 -> OK
char ch = ''; // 빈 문자 할당, 하나의 문자 반드시 필요 -> error
char chch = ' '; // 공백 문자 할당 가능 -> OK
String num1 = 7 + 7 + ""; // 7 + 7 + "" -> 14 + "" -> "14"
String num2 = "" + 7 + 7; // "" + 7 + 7 -> "7" + 7 -> "77"
// `문자열 + any type -> 문자열 + 문자열 -> 문자열`
}
}

Last updated:

Java