반응형
파이썬 클래스에서 내부에서만 접근 가능한 변수(속성)와 외부에서 접근 가능한 변수를 선언하는 방법에 대해 설명하겠습니다.
외부에서 접근 가능한 변수
클래스 내에서 외부에서 접근 가능한 변수는 보통 인스턴스 변수로 정의되며, self
를 사용하여 선언합니다. 이러한 변수는 클래스 인스턴스가 생성될 때 설정되며, 객체를 통해 외부에서도 접근할 수 있습니다.
class MyClass:
def __init__(self, public_var):
self.public_var = public_var # 외부에서 접근 가능한 변수
obj = MyClass("Hello")
print(obj.public_var) # 출력: Hello
내부에서만 접근 가능한 변수 (프라이빗 변수)
파이썬에서는 진정한 의미의 "프라이빗" 변수가 존재하지 않지만, 변수 이름 앞에 언더스코어(_
또는 __
)를 붙여 변수의 접근 권한을 암시적으로 표현할 수 있습니다.
- 단일 언더스코어 (
_
):- 변수 이름 앞에 단일 언더스코어를 붙이면, 해당 변수는 내부적으로만 사용하기를 권장한다는 의미를 가지지만, 외부에서 여전히 접근이 가능합니다.
- 이는 프라이빗 변수에 대한 관례적 표현으로, "비공개"임을 암시합니다.
class MyClass:
def __init__(self, private_var):
self._private_var = private_var # 내부에서만 접근 권장
obj = MyClass("Private")
print(obj._private_var) # 출력: Private (하지만 접근이 가능)
- 더블 언더스코어 (
__
):- 변수 이름 앞에 더블 언더스코어를 붙이면 이름 맹글링(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
), 이름 맹글링을 통해 비공개를 구현.
이러한 접근 제어 방식은 클래스 설계 시 중요한 정보를 보호하거나 외부로 노출시키고 싶지 않은 속성을 관리하는 데 유용합니다.
반응형
'언어 > Python' 카테고리의 다른 글
[ Python ] 정확하고 오차없는 10진수 연산 - Decimal 클래스 (0) | 2024.08.21 |
---|---|
[ Python ] 클래스를 상속해서 나의 클래스 만들기 (다중 상속 포함) (0) | 2024.08.13 |
[ Python ] Class 의 method ( 멤버 함수) 정의하기 (0) | 2024.08.13 |
[ Python ] 클래스의 선행 참조 문제 분서과 해결 방법 (0) | 2024.08.13 |
[ Python ] 클래스 변수와 인스턴스 변수에 대해서 알아보기 (0) | 2024.08.13 |