✅ Python의 Final 키워드 완벽 정리
1. 🎯 Final이란?
- Final은 **"재할당 불가"**를 의도적으로 표시하는 타입 힌트입니다.
- from typing import Final을 통해 사용하며, **정적 분석 도구(mypy, pyright)**가 이를 체크합니다.
- 런타임에는 영향을 주지 않습니다. (실행 시 에러는 없음)
✅ "이 변수는 더 이상 다른 값으로 바뀌지 않아야 해요"라는 개발자 의도 표시
2. 📌 기본 사용법
from typing import Final
PI: Final = 3.14
PI = 3.14159 # ❌ mypy에서 에러 발생 (재할당 금지)
- Final로 지정된 변수는 재할당이 금지됩니다.
- 단, mutable 객체의 경우 내부 값은 여전히 변경 가능!
3. 🧪 mutable 객체와 Final
from typing import Final
my_list: Final = [1, 2, 3]
my_list.append(4) # ✅ 가능 (리스트 내용 변경)
my_list = [9, 8, 7] # ❌ 불가능 (재할당 시 경고 발생)
🔍 Final은 변수 자체의 "참조 변경"을 막을 뿐, mutable 내부 내용은 막지 않습니다.
4. ⚠️ Final과 Immutable은 다르다!
구분 의미 예시 결과
Final | 변수 재할당 금지 | Final = [1, 2, 3] | 내부 수정 가능 🔁 |
Immutable | 내부 값 변경 불가 | tuple, str, frozenset | 완전 불변 🔒 |
my_str: Final = "hello"
my_str = "world" # ❌ 불가능
my_tuple: Final = (1, 2, 3)
# 튜플 자체, 내부 값도 변경 불가
5. 🧠 요약 정리
항목 설명
목적 | 변수 재할당을 방지하려는 의도 표현 |
사용 위치 | 전역 상수, 설정 값 등 재할당되면 안 되는 곳 |
런타임 영향 | ❌ 없음 (정적 분석 도구만 검사함) |
내부 수정 | ✅ 가능 (mutable 객체일 경우) |
진짜 불변 필요 시 | tuple, frozen dataclass, frozenset 등 사용 |
🔚 마무리 팁
- Final은 협업 시 명확한 의사소통 도구로 유용합니다.
- mypy, pyright 등과 함께 사용하면 정적 안전성 확보에 도움이 됩니다.
- 특히 전역 상수, 설정 값, 고정된 환경 값 등에 자주 사용됩니다.
📌 진짜로 바뀌면 안 되는 "값 자체"가 있다면, immutable 자료형과 함께 사용하는 것이 베스트!
'기술블로그-Fastapi편' 카테고리의 다른 글
✅ Base62의 encode() 메서드 완전 정리 (0) | 2025.05.27 |
---|---|
✅ 클래스 변수 vs 인스턴스 변수 vs ClassVar 완벽 정리 (0) | 2025.05.27 |
✅ Python / FastAPI Annotated + Field 문법 정리: 실행에 영향이 있을까? (0) | 2025.05.27 |
✅ FastAPI 접속 주소 정리: 0.0.0.0 vs 127.0.0.1 (0) | 2025.05.27 |
✅ FastAPI 핵심 용어 정리: path operation function (0) | 2025.05.27 |