시스템 개발 및 관리/프로젝트 구조 설정

파이썬에서 언더스코어 두 개(__)와 Name Mangling(맹글링)의 차이

Data Jun 2025. 4. 27. 20:45

파이썬 코드를 보다 보면
어떤 파일이나 변수 이름에 언더스코어(_)가 두 개 붙은 것을 볼 수 있습니다.

이 글에서는

  • 파일명/변수명에 언더스코어를 두 개 붙이는 이유
  • 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)" 이라고 합니다.

 

맹글링을 왜 써야 할까?

특히 상속을 사용할 때,
부모 클래스와 자식 클래스가 같은 변수 이름을 우연히 쓸 때 충돌을 피하는 데 유용합니다.

 

요약

 

 

한 줄 요약

✔️ 언더스코어 두 개는 "내부 전용" 표시지만,
맹글링은 실제로 이름을 바꿔서 "접근을 어렵게 만드는" 기술입니다.