상수(Constant)
프로그래밍에서 상수는 단순히 “바뀌지 않는 값”이 아닙니다. 코드의 의도를 명확히 하고, 버그를 조기에 발견하며, 유지보수의 비용을 크게 줄이는 도구입니다. 하지만 언어마다 상수를 강제하는 방식이 다르기 때문에, 제대로 이해하고 사용해야 실수를 막을 수 있습니다.

상수가 필요한 이유
버그 방지와 의도 전달
프로그램 실행 중 절대 바뀌면 안 되는 값들이 있습니다. 이런 값을 상수로 선언하면, 개발자뿐만 아니라 컴퓨터도 “이 값은 변경될 수 없다”는 것을 알 수 있습니다.
예를 들어 JavaScript에서:
const MAX_USERS = 100;
MAX_USERS = 200; // TypeError: Assignment to constant variable
언어 차원에서 실수를 방지해줍니다.
유지보수와 가독성 향상
프로그램 전체에서 사용되는 중요한 값을 상수로 정의하면, 나중에 변경할 때 한 곳에서만 수정하면 됩니다. 또한 의미 있는 이름을 사용하면 코드를 읽는 사람이 그 값의 목적을 즉시 이해할 수 있습니다.
# 의미가 불명확함
if user_age >= 18:
can_vote = True
# 의도가 명확함
LEGAL_VOTING_AGE = 18
if user_age >= LEGAL_VOTING_AGE:
can_vote = True
18이라는 ’매직 넘버’를 이름 있는 상수로 바꾸는 것만으로도 코드의 명확성이 크게 개선됩니다.
언어별 상수 구현의 차이
강제 차원에서의 구분
모든 언어가 상수를 같은 방식으로 강제하지는 않습니다:
강력한 강제 (컴파일 타임) - JavaScript / TypeScript의 const: 재할당 불가능 - Java의 final: 재할당 불가능 - C++의 constexpr: 컴파일 타임에 값이 결정되며 변경 불가능
약한 강제 (관례) - Python: 대문자 관례(PI = 3.14159)는 “변경하지 마세요”라는 신호일 뿐, 언어가 강제하지 않습니다. python PI = 3.14159 PI = 5 # 문법적으로 정상, 하지만 관례 위반
주의: const와 객체/배열의 가변성
JavaScript를 비롯한 많은 언어에서 const는 재할당만 방지합니다. 객체나 배열의 내용은 변경 가능합니다:
const user = { name: "Alice" };
user.name = "Bob"; // 가능 - 객체 내용 변경
user = {}; // 불가능 - 재할당 시도
const colors = ["red", "blue"];
colors[0] = "green"; // 가능 - 배열 원소 변경
colors = []; // 불가능 - 재할당 시도
이는 초보자가 자주 오해하는 포인트입니다. 객체의 불변성이 필요하면 추가적인 방법(동결, 불변 라이브러리 등)을 써야 합니다.
상수를 효과적으로 사용하기
설정값 집중 관리
프로젝트의 설정값들을 한곳에 모으면 환경 변화에 빠르게 대응할 수 있습니다:
public class AppConfig {
public static final int TIMEOUT_SECONDS = 30;
public static final String API_BASE_URL = "https://api.example.com";
public static final int MAX_RETRY_ATTEMPTS = 3;
}
연관된 상수의 그룹화: Enum
연관된 상수들을 하나의 개념으로 표현해야 한다면 Enum(열거형)을 사용하는 것이 표준입니다:
enum UserRole {
ADMIN = "admin",
EDITOR = "editor",
VIEWER = "viewer"
}
if (user.role === UserRole.ADMIN) {
// 관리자 권한 처리
}
매직 넘버나 문자열 대신 Enum을 쓰면 타입 체크도 가능하고, IDE의 자동완성도 지원됩니다.
결론
상수는 단순한 코딩 스타일이 아니라, 코드의 안정성과 명확성을 동시에 높이는 전문적인 실천입니다. 다만 언어마다 상수 강제 수준이 다르다는 점을 반드시 이해하고, 객체/배열 가변성 같은 함정을 피해야 합니다. “이 값이 정말 변하면 안 되는가?”를 묻고 상수로 정의하는 습관이, 규모 있는 프로젝트에서 버그를 줄이고 협업을 수월하게 만듭니다.
'코딩을 위한 용어' 카테고리의 다른 글
| [Constants] Why Const Doesn't Mean What Most Developers Think It Does (0) | 2026.05.22 |
|---|---|
| [Variables] Master This Concept Before You Code (0) | 2026.05.21 |
| [변수] 냉장고처럼 이해하는 프로그래밍의 기초 (0) | 2026.05.21 |