Python이 다른 언어처럼 const 키워드를 두지 않은 이유는 의도적인 디자인 철학 때문이에요. 단순히 구현이 복잡해서가 아니라, Python 언어 자체의 철학과 문화에 맞춰서 빠진 기능이에요.
📌 왜 Python에는 상수가 없을까?
1. “성인(grown-up) 개발자” 철학
- Python 창시자 Guido van Rossum의 철학: “Python은 강제보다 관례를 중시한다. 개발자를 아이처럼 제한하지 않고, 성인으로 존중한다.”
- 즉, 강제로 막지 않고 명명 규칙(UPPER_CASE) 으로 상수 취급을 권장.
- 실제로 PEP8(스타일 가이드)도 상수를 이렇게만 정의:
MAX_VALUE = 100 # 변경하지 않기로 약속
2. 언어의 단순성 유지
const,readonly같은 개념을 넣으면 언어 복잡도가 올라감.- Python은 동적 타이핑 + 간결한 문법을 지향하므로 일부러 뺐음.
- 상수를 강제하기보다는 테스트, 코드 리뷰, 린터(pylint, mypy) 로 관리하는 방식 선택.
3. 런타임 유연성 보장
- Python은 인터프리터 언어 → 런타임 중에 코드가 자주 바뀔 수 있음.
- 상수를 강제로 막으면, 동적 로딩·테스트·핫패치(hot patch) 같은 Python 특유의 활용에 제약이 생김.
- 예: Django, Flask 같은 프레임워크는 설정 상수를 종종 런타임에서 오버라이드함.
4. 대체 수단 존재
Python 생태계에서는 다음과 같은 방식으로 “상수”를 흉내낼 수 있음:
- 명명 규칙
PI = 3.14159 # 관례상 상수 - frozen dataclass / NamedTuple (불변 구조체로 관리)
from dataclasses import dataclass @dataclass(frozen=True) class Constants: PI: float = 3.14159 c = Constants() # c.PI = 3.14 # ❌ 오류 발생 (frozen=True) - typing.Final (Python 3.8+)
from typing import Final PI: Final = 3.14159 PI = 3.14 # ⚠️ 타입체커에서 경고 (런타임은 허용)
✅ 결론
- Python이
const를 안 넣은 건 “강제보다 자유”라는 언어 철학 때문. - 강제 불변은 필요하면
dataclass(frozen=True)나typing.Final같은 도구를 써서 달성. - 그래서 복잡해서 빠진 게 아니라, 철학적으로 뺀 것이라고 보는 게 맞아요.
👉 Python에서 Final, frozen dataclass, enum 등을 활용한 **“상수 패턴 모음집”**
답글 남기기