SteadyDrills

[TIL] 인스턴스 메서드의 접근 지정자 (Access Modifiers) - Public Methods,Protected Methods,Private Methods 본문

PYTHON

[TIL] 인스턴스 메서드의 접근 지정자 (Access Modifiers) - Public Methods,Protected Methods,Private Methods

Drills 2024. 7. 23. 23:53

240723

 

파이썬에서는 클래스 내부에서 메서드를 정의할 때, 메서드의 접근 제한을 설정하는 기능이 다른 언어에 비해 덜 엄격하다.

하지만 관례적으로 메서드의 접근성을 표시하는 방법이 있으므로 유의해야 한다.

Public Methods

퍼블릭 메서드(Public Methods)는 외부에서 자유롭게 접근 가능한 메서드. 기본적으로 정의되는 메서드다.

class MyClass:
    def public_method(self):
        print("This is a public method")

pub = MyClass()
pub.public_method()  # This is a public method

 

*Protected Methods

프로텍티드 메서드(Protected Methods)는 하나의 밑줄(_)로 시작하는 메서드다. 이 메서드는 파이썬에서 정의되어 제 접근 제한이 아니라, 관례상 그렇게 사용되는 것이다.  그렇기 때문에 서브 클래스에서 실제로는 접근이 가능하다.(하지만... 관례를 지키지 않거나 모르는 개발자는 협업에 기피당한다고 한다...)

class MyClass:
    def _protected_method(self):
        print("This is a protected method")

class SubClass(MyClass):
    def access_protected_method(self):
        self._protected_method()

sub = SubClass()

sub.access_protected_method()  
# This is a protected method(실제로는 접근이 가능하나 암묵적인 관례상 접근을 할 수 없다.)

 

Private Methods

프라이빗 메서드(Private Methods)는 두 개의 밑줄(__)로 시작하는 메서드다. 클래스 내부에서만 접근할 수 있으며 직접 사용해서 클래스 외부에서는 접근할 수 없다.( Protected Methods 와는 달리 파이썬 자체에서 지원하므로 실제로 외부에서 접근할 수 없다. )

 

class MyClass:
    def __private_method(self):   # private method
        print("This is a private method")

    def call_private_method(self):  # private method를 호출하기 위한 메서드
        self.__private_method()

obj = MyClass()
obj.call_private_method()  # This is a private method
obj.__private_method()  # AttributeError: 'MyClass' object has no attribute '__private_method'