코디잉

리터럴(Literal)이란 무엇이고, 타입은 어떻게 결정될까? 본문

CS/Java

리터럴(Literal)이란 무엇이고, 타입은 어떻게 결정될까?

yong_ღ'ᴗ'ღ 2025. 12. 17. 12:09

자바 기본 문법을 공부하다 보면 ‘리터럴(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, falseboolean

  ◽   '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으로 바꾸는 과정은 없다. 

 

실행 시에는 along 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을 붙이는 것이 바람직하다.

 

💬 이 글은 인프런 김영한님의 자바 강의를 듣고,
리터럴과 타입 결정 방식을 이해하기 위해 정리한 내용입니다.
Comments