코디잉
리터럴(Literal)이란 무엇이고, 타입은 어떻게 결정될까? 본문
자바 기본 문법을 공부하다 보면 ‘리터럴(Literal)’이라는 용어를 접하게 된다.
이번 글에서는 리터럴의 개념과 자바에서 리터럴의 타입이 어떻게 결정되는지를 정리해본다.
🔤 리터럴(Literal)이란?
리터럴(Literal)은 코드에 개발자가 직접 작성한 고정된 값 을 의미한다.
int a = 100;
boolean b = true;
String c = "Hello";
위 코드에서
100, true, "Hello"와 같이
코드에 직접 작성된 값들이 모두 리터럴이다.
리터럴 자체는 변하지 않는다.
🤔 “값은 바뀔 수 있는 거 아닌가?”
여기서 이런 의문이 든다.
'리터럴 자체는 변하지 않는다고?
그런데 값은 바뀌잖아?"
int a = 100;
a = 200;
위 코드를 보면
a의 값이 바뀌었으니
리터럴도 바뀐 것처럼 느껴질 수 있다.
하지만 실제로는 그렇지 않다.
int a = 100;
// -- ----
// 변수 리터럴
이후
a = 200;
이 실행되면,
◽ 리터럴 100이 바뀌는 것이 아니라
◽ 새로운 리터럴 200이 변수 a에 할당되는 것이다.
변수의 값은 변할 수 있지만, 리터럴 자체는 변하지 않는다.
🔢 정수 / 실수 리터럴의 기본 타입
자바에서는 리터럴의 종류에 따라 기본으로 선택되는 타입이 정해져 있다.
✔ 정수 리터럴
◽ 기본 타입: int
◽ int 범위 내에서는 접미사 없이 사용 가능
int a = 100;
◽ int 범위를 초과하는 값은 l 또는 L을 붙여 long 리터럴로 명시해야 한다.
long b = 3000000000L;
✔ 실수 리터럴
◽ 기본 타입: double
◽ float 을 사용하려면 f 또는 F를 붙여야 한다.
double d = 3.14;
float f = 3.14f;
✔ 기타 리터럴
◽ true, false → boolean
◽ 'a' → char
◽ "Hello" → String
🤯 long a = 111; 과 long a = 111L 의 차이
아래 두 코드는 모두 정상적으로 컴파일된다.
long a = 111;
long b = 111L;
그렇다면 이 둘의 차이는 무엇일까?
🔍 long a = 111; 은 어떻게 처리될까?
long a = 111;
(1) 111은 정수 리터럴이므로 기본적으로 int 타입으로 해석된다.
(2) int → long 은 자동형변환이 가능하다.
(3) 따라서 컴파일러는 이를 문제없이 허용한다.
이 과정은 컴파일 타임에 타입을 해석하는 단계이며,
리터럴 111을 보고 int 메모리를 잡았다가
long type 변수인 a를 본 후, 다시 long으로 바꾸는 과정은 없다.
실행 시에는 a가 long type 메모리(8byte)를 사용한다.
🔍 long b = 111L; 은 무엇이 다를까?
long b = 111L;
◽ 111을 처음부터 long 리터럴로 명시
◽ 컴파일러가 int로 해석하지 않는다.
실행 결과나 성능 차이는 없지만, 타입 의도가 더 명확해진다.
⚠️ 큰 정수 리터럴과 L 접미사
아래 코드는 컴파일 에러가 발생한다.
long a = 3000000000; // (30억) 컴파일 에러
이유는 간단하다.
◽ 정수 리터럴은 기본적으로 int
◽ 3000000000(30억)은 int 범위를 초과
◽ 컴파일러는 자동으로 long으로 바꿔주지 않는다.
따라서 반드시 다음과 같이 명시해야 한다.
long a = 3000000000L;
✅ 그래서 어떤 방식이 더 나을까?
long a = 111;
long b = 111L;
두 코드는
◽ 실행결과 동일
◽ 성능 동일
◽ 메모리 사용 동일
👉 기술적으로는 동일한 코드이다.
다만 실무에서는
◽ 타입 의도가 명확하고
◽ 값 변경 시 실수를 방지할 수 있기 때문에
L 접미사를 붙이는 방식을 더 선호한다.
📌 정리
◽ 리터럴은 코드에 개발자가 직접 작성한 고정된 값이다.
◽ 변수의 값은 변할 수 있지만, 리터럴 자체는 변하지 않는다.
◽ 자바에서는 리터럴의 종류에 따라 기본 타입이 정해져 있다.
◽ long a = 111;과 long a = 111L;의 실행 결과는 동일하다.
◽ 의도를 명확히 하기 위해 접미사 L을 붙이는 것이 바람직하다.
💬 이 글은 인프런 김영한님의 자바 강의를 듣고,
리터럴과 타입 결정 방식을 이해하기 위해 정리한 내용입니다.
'CS > Java' 카테고리의 다른 글
| 초기화하지 않은 지역 변수를 사용할 수 없는 이유 (0) | 2025.12.16 |
|---|---|
| 자바 프로그램은 어떻게 컴파일되고 실행될까? (0) | 2025.12.15 |
