IT

파이썬에서 클래스 내부 멤버 변수를 숨기는 방법

carnival6103 2025. 2. 5. 22:19
반응형

1. 단일 밑줄 (_) 사용

단일 밑줄을 사용하면 변수나 메서드가 "protected"임을 나타냅니다. 이는 해당 클래스와 서브클래스에서만 접근할 수 있음을 의미합니다. 그러나 이는 강제적인 제한이 아니며, 여전히 외부에서 접근이 가능합니다. 이는 주로 개발자에게 해당 변수가 내부적으로 사용된다는 신호를 주기 위한 것입니다.

class MyClass:
    def __init__(self):
        self._protected_var = "This is a protected variable"

    def _protected_method(self):
        return "This is a protected method"

obj = MyClass()
print(obj._protected_var)  # 접근 가능
print(obj._protected_method())  # 접근 가능

2. 이중 밑줄 (__) 사용

이중 밑줄을 사용하면 변수나 메서드가 "private"임을 나타냅니다. 이는 이름 맹글링(name mangling)을 통해 클래스 외부에서 접근할 수 없도록 합니다. 변수 이름이 클래스 이름과 결합되어 내부적으로 변경되기 때문에 외부에서 직접 접근이 불가능합니다.

class MyClass:
    def __init__(self):
        self.__private_var = "This is a private variable"

    def __private_method(self):
        return "This is a private method"

    def get_private_var(self):
        return self.__private_var

obj = MyClass()
print(obj.get_private_var())  # 접근 가능
print(obj.__private_var)  # 접근 불가, AttributeError 발생
print(obj.__private_method())  # 접근 불가, AttributeError 발생

3. 이름 맹글링(Name Mangling)

이중 밑줄을 사용하면 파이썬은 변수 이름을 내부적으로 변경하여 접근을 제한합니다. 예를 들어, __private_var는 _MyClass__private_var로 변경됩니다. 이를 통해 외부에서 접근을 어렵게 만듭니다.

class MyClass:
    def __init__(self):
        self.__private_var = "This is a private variable"

obj = MyClass()
print(obj._MyClass__private_var)  # 접근 가능, 하지만 권장되지 않음

이렇게 하면 클래스 내부 멤버 변수를 숨길 수 있습니다. 추가로 궁금한 점이 있으면 언제든지 물어보세요! 😊

반응형