파이썬 코드를 보다 보면
어떤 파일이나 변수 이름에 언더스코어(_)가 두 개 붙은 것을 볼 수 있습니다.
이 글에서는
- 파일명/변수명에 언더스코어를 두 개 붙이는 이유
- Name Mangling(맹글링)이란 무엇인가
- 맹글링은 왜 필요한가
를 차근차근 정리해봅니다.
언더스코어 두 개(__) 사용 – 내부 전용 표시
파이썬에서는 파일이나 변수 이름 앞에 **언더스코어 두 개(__)**를 붙이면,
"이건 내부 전용이니까 외부에서 직접 쓰지 마세요" 라는 의미를 전달합니다.
❗ 하지만 주의할 점:
Python은 이걸 강제하지 않습니다.
단순히 **"개발자끼리의 약속(convention)"**일 뿐입니다.
예시:
project/
├── __internal_module.py
├── public_module.py
__internal_module.py는 외부에서 import할 수 있지만, "내부용이다"는 암시를 주기 위해 이름에 언더스코어를 붙였습니다.
Name Mangling(맹글링) – 클래스 내부 보호
반면, 클래스 안에서 변수 이름에 언더스코어 두 개(__)를 붙이면,
파이썬이 자동으로 변수 이름을 변경(name mangling) 해버립니다.
예시:
class MyClass:
def __init__(self):
self.__secret = 123
obj = MyClass()
print(obj.__secret) # ❌ 오류 발생
오류 메시지:
AttributeError: 'MyClass' object has no attribute '__secret'
→ 실제로는 Python이 변수 이름을 이렇게 바꿔버렸습니다:
print(obj._MyClass__secret) # ✅ 출력: 123
즉, __secret → _MyClass__secret로 바뀌는 거죠.
이것을 "네임 맹글링(Name Mangling)" 이라고 합니다.
맹글링을 왜 써야 할까?
특히 상속을 사용할 때,
부모 클래스와 자식 클래스가 같은 변수 이름을 우연히 쓸 때 충돌을 피하는 데 유용합니다.
요약
한 줄 요약
✔️ 언더스코어 두 개는 "내부 전용" 표시지만,
맹글링은 실제로 이름을 바꿔서 "접근을 어렵게 만드는" 기술입니다.
'시스템 개발 및 관리 > 프로젝트 구조 설정' 카테고리의 다른 글
Python enum – 상수를 깔끔하게 관리하는 방법 (0) | 2025.04.29 |
---|---|
Python namedtuple – 왜, 언제 사용하는 걸까? (0) | 2025.04.29 |
파이썬 pathlib에서 디렉토리 생성할 때 알아야 할 두 가지 옵션 (0) | 2025.04.27 |
파이썬에서 변수명을 대문자로 쓰는 이유는? (0) | 2025.04.27 |
os.path vs pathlib.Path – 파이썬 경로 처리 방식 차이 이해하기 (0) | 2025.04.27 |