본문 바로가기

개념

[파이썬] 네임 맹글링 (name mangling)

네임 맹글링(name mangling)은 파이썬에서 클래스의 속성 이름을 바꾸는 기능입니다. 일반적으로 클래스 내에서 속성 이름을 _ 두 개로 시작하는 것으로 정의하면, 이 속성은 자동으로 네임 맹글링이 되어 _클래스명__속성이름 으로 변경됩니다.

 

1. 예제 코드

 

class MyClass:
    def __init__(self):
        self.__private_attr = 42

    def get_private_attr(self):
        return self.__private_attr


MyClass의 __private_attr 속성은 실제로 _MyClass__private_attr으로 맹글링됩니다. 이렇게 맹글링하는 이유는, 파이썬에서는 클래스의 속성이 기본적으로 public으로 취급됩니다. 하지만, 어떤 경우에는 클래스 외부에서 직접 접근하지 않는 것이 좋은 경우가 있습니다. 이때 네임 맹글링을 이용하여 속성 이름을 바꾸면, 클래스 외부에서 직접 접근하는 것이 더 어려워지기 때문에 보다 안전한 코딩이 가능합니다.

네임 맹글링은 클래스 외부에서 직접 접근하는 것을 막는 것은 아니므로, 필요에 따라 속성에 접근할 수 있습니다. 이때는 맹글링된 이름으로 접근해야 합니다. 예를 들어, 위의 MyClass에서 __private_attr 속성에 접근하려면 다음과 같이 합니다:

my_obj = MyClass()
print(my_obj._MyClass__private_attr)  # Output: 42

 

2. 정보 은닉

 

네임 맹글링은 클래스의 속성 이름을 바꾸어, 클래스 외부에서 속성에 직접 접근하는 것을 더 어렵게 만듭니다. 이를 통해, 속성이 클래스 외부에서 함부로 변경되거나 접근되는 것을 방지할 수 있습니다. 이는 객체지향 프로그래밍에서 중요한 개념 중 하나인 정보 은닉(encapsulation)과 관련이 있습니다.

정보 은닉은 객체 내부의 속성이나 구현 내용을 외부에 노출하지 않는 것을 의미합니다. 이는 객체의 일부를 숨기고, 객체 간 상호작용을 통제함으로써 객체의 안정성과 신뢰성을 높이는 데 도움이 됩니다. 속성 이름을 맹글링하여 외부에서 직접 접근하는 것을 어렵게 만들면, 속성을 정보 은닉하는 데 도움이 됩니다.

또한, 네임 맹글링은 클래스를 상속할 때 발생할 수 있는 이름 충돌을 방지하는 데도 유용합니다. 만약 두 개 이상의 클래스에서 같은 이름의 속성이 정의되어 있다면, 네임 맹글링을 사용하여 각 속성의 이름을 고유하게 만들 수 있습니다. 이는 클래스의 상속 구조에서 중요한 역할을 합니다.