해결된 질문
작성
·
329
답변 1
1
안녕하세요 John Adams님
파이썬은 기본적으로 다른 몇몇 언어와는 다르게 접근 제어 지시자(Access Modifiers)인 private, protected, public을 명시적으로 지원하지 않습니다. 대신 파이썬은 명시적으로 접근 제어 지시자를 사용하는 것보다 이름 규칙과 관례를 따르는 방식을 제공하며, 이를 "명명 규칙" 또는 "이름 맹세(Naming Conventions)"라고 합니다.
Public 멤버 변수와 메서드:
Public 멤버 변수나 메서드는 어떤 제한도 받지 않습니다. 클래스 외부에서 직접 접근할 수 있습니다.
이름 규칙으로는 일반적으로 소문자로 시작하며, 필요한 경우 단어 사이에 언더스코어(_)를 사용합니다.
class MyClass:
def __init__(self):
self.public_variable = 10
def public_method(self):
return "This is a public method."
obj = MyClass()
print(obj.public_variable) # 10
print(obj.public_method()) # This is a public method.
Protected 멤버 변수와 메서드:
파이썬에서는 이름 앞에 언더스코어(_) 하나를 붙여서 "보호" 멤버로 표시합니다.
외부에서 직접 접근하는 것은 허용되지만, 관례적으로 접근을 제한하도록 권장됩니다.
class MyClass:
def __init__(self):
self._protected_variable = 20
def _protected_method(self):
return "This is a protected method."
obj = MyClass()
print(obj._protected_variable) # 20
print(obj._protected_method()) # This is a protected method.
Private 멤버 변수와 메서드:
이름 앞에 두 개의 언더스코어(__)를 붙여서 "비공개" 멤버로 표시합니다.
외부에서 직접 접근하는 것이 막힙니다. 이름 맹세를 통해 이름이 변형되어 직접 접근이 어려워집니다.
class MyClass:
def __init__(self):
self.__private_variable = 30
def __private_method(self):
return "This is a private method."
obj = MyClass()
# 접근하면 AttributeError 발생
# print(obj.__private_variable)
# print(obj.__private_method())
# 이름 맹세를 통해 접근 가능
print(obj._MyClass__private_variable) # 30
print(obj._MyClass__private_method()) # This is a private method.
안녕하세요 John Adams님
말씀하신 것과 같이 파이썬은 코드면에서는 Public과 Protected에 차이점은 없습니다. 그저 _
로 시작하는 멤버를 직접적으로 접근하지 않는 것이 개발자들간의 암묵적인 약속입니다.
답변 감사합니다.
파이썬에서 Public 변수는 외부로부터 모든 접근을 허용하고 Protected 변수는 자기 클래스 내부 혹은 상속받은 자식 클래스에서만 접근 허용한다고 하나, 실제 code 를 작성해서 실행하면 Public 이나 Protected 나 차이가 없습니다. Public 이 있는대도 Protected 를 만들어놓은 이유가 있는지요? 혹시 차이가 있다면 무슨 차이가 있는지요?