파이썬에서는 클래스의 속성과 메소드에 대한 접근 제어를 다루는 방식이 C++, Java 등의 언어와는 다소 다릅니다. 파이썬은 완전한 은닉성(encapsulation)을 제공하는 접근 제어 지시자(public, protected, private)를 명시적으로 제공하지 않습니다. 대신, 네이밍 컨벤션(naming convention)을 통해 속성과 메소드의 접근 수준을 간접적으로 지시합니다.
파이썬의 접근 제어 지시자:
1 Public 멤버:
- 기본적으로, 파이썬의 모든 클래스 멤버(속성과 메소드)는 public입니다.
- 클래스 외부에서 자유롭게 접근하고 수정할 수 있습니다.
- 예:
self.name
,self.method()
2 Protected 멤버 (_):
- 속성이나 메소드 이름 앞에 단일 밑줄(_)을 붙여서 protected로 표시합니다.
- 이는 해당 멤버가 서브클래스에서만 사용되도록 의도되었음을 나타냅니다.
- 파이썬에서는 실제로 접근을 강제로 제한하지 않지만, 개발자 간의 약속으로 취급됩니다.
- 예:
self._name
,self._method()
3 Private 멤버 (__):
- 속성이나 메소드 이름 앞에 이중 밑줄(__)을 붙여서 private로 표시합니다.
- 이는 클래스 내부에서만 사용되도록 의도되었으며, 클래스 외부에서는 접근할 수 없습니다.
- 파이썬은 이름 변경(name mangling)을 통해 이러한 속성의 외부 접근을 어렵게 만듭니다. 클래스명과 함께 밑줄을 추가하여 속성명을 변경하기 때문입니다. (
_ClassName__attributeName
) - 예:
self.__name
,self.__method()
예시:
class MyClass:
def __init__(self):
self.public = "Public"
self._protected = "Protected"
self.__private = "Private"
def public_method(self):
return "Public Method"
def _protected_method(self):
return "Protected Method"
def __private_method(self):
return "Private Method"
obj = MyClass()
print(obj.public) # 가능
print(obj._protected) # 가능, 하지만 권장되지 않음
# print(obj.__private) # 오류! AttributeError
# print(obj.__private_method()) # 오류! AttributeError
요약:
파이썬에서 접근 제어는 네이밍 컨벤션을 통해 간접적으로 구현됩니다. 이는 언어 차원에서 강제되는 것이 아니라, 개발자 사이의 약속이나 가이드라인으로 작용합니다. Public 멤버는 어디서나 접근 가능, Protected 멤버는 서브클래스에서 주로 사용, Private 멤버는 해당 클래스 내부에서만 사용되도록 의도되어 있습니다.
'프로그래밍 언어 > 파이썬' 카테고리의 다른 글
Celery와 FastAPI - 1 (0) | 2024.03.22 |
---|---|
classmethod와 staticmethod의 차이 (0) | 2024.03.21 |
Call by Assignment란? (0) | 2024.03.20 |
r string, u string이란 (0) | 2024.03.20 |
__repr__, __str__의 차이점 (0) | 2024.03.20 |