리터럴 (Literal), 상수 (Constant)
들어가는 말
리터럴과 상수는 ’변하지 않는 값’이라는 속성을 공유하기 때문에 엄격하게 구분되지 않고 자주 혼용된다.
특히 수학에서 상수(常數)라는 용어에 익숙하다 보니, 리터럴을 상수라고 부르는 경우가 많다.
용어 자체에 지나치게 집착할 필요는 없으며, 상황과 맥락에 맞춰 이해하면 충분하다.
다만 두 개념이 정확히 무엇을 의미하는지는 알아둘 필요가 있으니, 각각의 개념을 살펴보자.
1. 리터럴(Literal)
소스 코드에 값을 나타내기 위해 직접 표기한 값이다.
변수 이름을 통해 값을 참조하거나 연산 결과로 값을 얻는 것과 달리, 코드에 표기된 값 그 자체이다.
int x = 10; // 정수 리터럴 10
float pi = 3.14f; // 부동 소수점 리터럴 3.14
char c = 'A'; // 문자 리터럴 A
char str[] = "hello"; // 문자열 리터럴 hello
2. 상수(Constant)
한 번 값을 대입하면 이후에 변경할 수 없는 변수다.
const int MAX_SIZE = 100;
// MAX_SIZE = 200; // 컴파일 에러
관례적으로 이름은 대문자로 작성하고, 단어 사이는 _로 구분한다.
2.1 상수의 장점
코드에서 의미를 파악하기 난해한 숫자 리터럴을 매직 넘버(Magic Number)라고 한다.
매직 넘버는 가독성을 해치고 유지보수를 어렵게 만든다.
상수를 사용하면 가독성과 유지보수성을 높이고, 의도치 않은 값의 변경을 막을 수 있다.
2.1.1 매직 넘버 사용 예
player_pos += 5.0 * 1.5;
이 코드를 보면 의문이 든다.
5.0은 무엇이고, 1.5는 왜 곱하는 걸까?
2.1.2 상수 사용 예
const float MOVE_SPEED = 5.0f; // 기본 이동 속도
const float DASH_BOOST = 1.5f; // 대시 시 속도 증가율
player_pos += MOVE_SPEED * DASH_BOOST;
이제 대시할 때 기본 이동 속도에 속도 증가율을 곱한다는 의미가 명확해진다.