python const

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 등을 활용한 **“상수 패턴 모음집”**

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다