본문 바로가기

언어/Python

[ Python ] 클래스 내에서 멤버 변수 선언하기 (지역/전역)

반응형

파이썬 클래스에서 내부에서만 접근 가능한 변수(속성)와 외부에서 접근 가능한 변수를 선언하는 방법에 대해 설명하겠습니다.

외부에서 접근 가능한 변수

클래스 내에서 외부에서 접근 가능한 변수는 보통 인스턴스 변수로 정의되며, self를 사용하여 선언합니다. 이러한 변수는 클래스 인스턴스가 생성될 때 설정되며, 객체를 통해 외부에서도 접근할 수 있습니다.

class MyClass:
    def __init__(self, public_var):
        self.public_var = public_var  # 외부에서 접근 가능한 변수

obj = MyClass("Hello")
print(obj.public_var)  # 출력: Hello

내부에서만 접근 가능한 변수 (프라이빗 변수)

파이썬에서는 진정한 의미의 "프라이빗" 변수가 존재하지 않지만, 변수 이름 앞에 언더스코어(_ 또는 __)를 붙여 변수의 접근 권한을 암시적으로 표현할 수 있습니다.

  1. 단일 언더스코어 (_):
    • 변수 이름 앞에 단일 언더스코어를 붙이면, 해당 변수는 내부적으로만 사용하기를 권장한다는 의미를 가지지만, 외부에서 여전히 접근이 가능합니다.
    • 이는 프라이빗 변수에 대한 관례적 표현으로, "비공개"임을 암시합니다.
class MyClass:
    def __init__(self, private_var):
        self._private_var = private_var  # 내부에서만 접근 권장

obj = MyClass("Private")
print(obj._private_var)  # 출력: Private (하지만 접근이 가능)
  1. 더블 언더스코어 (__):
    • 변수 이름 앞에 더블 언더스코어를 붙이면 이름 맹글링(name mangling) 이라는 방식으로 변수의 이름이 변경되어 클래스 외부에서 접근하기 어려워집니다.
    • 이것은 파이썬에서의 비공개 속성으로, 외부에서 우연히 접근하는 것을 방지합니다.
class MyClass:
    def __init__(self, secret_var):
        self.__secret_var = secret_var  # 내부에서만 접근 가능

    def get_secret(self):
        return self.__secret_var

obj = MyClass("Secret")
# print(obj.__secret_var)  # AttributeError: 'MyClass' object has no attribute '__secret_var'
print(obj.get_secret())  # 출력: Secret
  • 위 코드에서 obj.__secret_var로 접근하려고 하면 AttributeError가 발생합니다. 그러나 내부적으로는 실제로 변수 이름이 _MyClass__secret_var로 변환되어 저장됩니다.
  • print(obj._MyClass__secret_var)로도 접근할 수 있지만, 이는 권장되지 않는 방법입니다.

요약

  • 외부에서 접근 가능한 변수: 일반적인 인스턴스 변수로 선언 (self.public_var).
  • 내부에서만 접근 권장하는 변수: 변수 앞에 단일 언더스코어(_)를 붙여 선언 (self._private_var).
  • 실제로 외부 접근이 어려운 변수: 변수 앞에 더블 언더스코어(__)를 붙여 선언 (self.__secret_var), 이름 맹글링을 통해 비공개를 구현.

이러한 접근 제어 방식은 클래스 설계 시 중요한 정보를 보호하거나 외부로 노출시키고 싶지 않은 속성을 관리하는 데 유용합니다.

반응형