학습하며 정리하는 개발블로그
리터럴(literal)이란? 본문
개발을 하면서“리터럴(literal)”이란 말을 자주 듣게 되지만, 막상 개념을 정확히 설명해보려면 애매하여서 정리를 한번 해보았습니다.
1. 리터럴(literal)이란?
1.1. 일반적인 정의
- "값 그 자체를 표현하는 문법 요소" 라고 볼 수 있습니다.
- 예: 42, "Hello World", true, null, [1, 2, 3] 등
- 코드에서 직접 쓴 값이며, 변수가 아니고, 함수 호출이나 계산의 결과도 아닙니다.
1.2. 예시
// Java 예시
int age = 42; // 42 -> 정수 리터럴
String greeting = "Hi"; // "Hi" -> 문자열 리터럴
// JavaScript/TypeScript 예시
let isDone = true; // true -> 불리언 리터럴
let arr = [1, 2, 3]; // [1, 2, 3] -> 배열 리터럴
const obj = { foo: 123 }; // { foo: 123 } -> 객체 리터럴
- 위 예시에서 42, "Hi", true, [1, 2, 3], { foo: 123 } 같은 것들이 직접 코드에 써놓은 값(상수), 즉 리터럴입니다.
2. 리터럴을 왜 구분해서 부르는가?
- 값을 직접 표현
- 식(expression) 혹은 변수, 함수 호출을 통해 구해지는 ‘결과값’이 아니라, 코드에 있는 그대로의 상수라는 점을 강조하기 위함입니다.
- 언어 차원에서 미리 정의
- 프로그래밍 언어마다 정해진 문법을 통해 숫자/문자열/불리언/배열/객체 등을 직접 작성할 수 있습니다.
- 예를 들어, 자바스크립트에서 {}는 객체 리터럴, []는 배열 리터럴이란 식으로 부릅니다.
- 변경 불가능성(특히 문자열 리터럴, 불리언 리터럴 등)
- 예를 들어, 문자열 리터럴 "Hello" 자체를 수정해서 "Goodbye"로 만들 수는 없습니다. (새로운 리터럴을 만들어 대입할 뿐)
- Java에서는 문자열 리터럴이 상수 풀(constant pool) 에 저장되어 재사용된다는 점도 유명합니다.
3. 통상적인 사용 맥락
- "리터럴".equals(변수) (Java 예시)
- “문자열 리터럴” "리터럴" 이라는 말이 자주 등장.
- "Hello" 같은 문자열 상수를 코드에 바로 써넣을 때, 이걸 “문자열 리터럴”이라 부릅니다.
- 객체 리터럴(object literal) (JavaScript/TypeScript 예시)
- 예: const person = { name: "Alice", age: 30 };
- 이렇게 직접 { key: value } 형태로 작성하는 걸 “객체 리터럴”이라고 하며, 생성자 함수를 부르지 않고도 인라인으로 객체를 정의할 수 있습니다.
- 배열 리터럴(array literal)
- 예: [1, 2, 3]
- “배열 리터럴”을 통해 바로 배열을 만들 수 있는 문법을 말합니다.
- 템플릿 리터럴(template literal) (JavaScript/TypeScript)
- 예: `Hello, ${name}`
- 백틱(``` ` ``)을 사용해서 문자열 안에 변수를 쉽게 삽입하는 문법. 이 자체를 가리켜 “템플릿 리터럴”이라고 합니다.
4. 리터럴과 상수(const)의 차이
- “리터럴”: 소스 코드상에서 “값 그 자체”.
- “상수(const)”: 재할당할 수 없는 변수(혹은 최종(final) 필드).
- 예: const PI = 3.14; 에서 3.14는 “리터럴”, PI는 “상수 변수명”입니다.
- PI라는 상수 변수도 내부적으로 3.14라는 리터럴을 가리키게 됩니다.
5. 마무리
정리하자면,
- 리터럴(literal)은 소스 코드에 직접 적힌 값을 가리킵니다.
- 숫자, 문자열, 불리언, 배열, 객체 등, 언어 문법에 따라 “리터럴 표현”이 정해져 있습니다.
- Java에서 "foo".equals(bar) 같은 표현에서 "foo"가 바로 “문자열 리터럴”입니다.
- JavaScript/TypeScript 에서 { foo: 123 }를 가리켜 “객체 리터럴” 이라고 부르기도 합니다.
코드 리뷰나 문서에서 “리터럴을 어떻게 다룰지”, “객체 리터럴을 사용할지”, “리터럴 vs 변수” 등으로 이야기가 나올 때, 결국
“값을 코드에 직접 써넣은 형태(상수 표현)”라고 생각하시면 됩니다.