파이썬 접근 제어자

강준우·2023년 2월 4일
0

파이썬의 접근 제어자는 public, protected, private가 있다.

단, 파이썬에서는 다른 객체지향 언어와 달리 실제로 접근을 막지 않는다. 따라서 언더바('_')를 이용해 접근 제어자 기능을 수행한다.

prefixpostfix
publicvar__var__, _var__
private__var__var_
protected_var_var_

접미사(postfix)에 언더바가 2개 ('__') 이상인 경우에 public으로 간주한다.

private


  • private member는 외부에 공개되지도 않고 외부에서 접근도 할 수 없다.
  • public method를 이용해 private member에 접근할 수 있다.
  • 외부에 공개되지 않고 클래스 내부에서 동작을 구현할 때 사용된다.
  • python에서는 '_class__private'으로 접근이 가능하다.

protected


  • 상속의 개념이 사용되면 protected 제어자를 사용할 수 있다.
  • 자기 클래스 내부 혹은 상속받은 자식 클래스에서만 접근을 허용한다.
  • python에서는 실질적으로 접근을 제어하지는 않고 '_'을 붙여 protected임을 명시(경고)하는 정도로만 사용된다.

public


  • public member는 외부에 공개되며 같은 패키지, 다른 외부 패키지 어디서든 접근이 가능하다.
  • private member는 public method로 접근할 수 있다, 외부와의 인터페이스 역할을 한다.

실제 접근 제어 여부

class K():
    pub = 1
    pub__ = 2
    __prv = 3
    __prv_ = 4
    __prv__ = 5
    _prt = 6
    _prt_ = 7
    _prt__ = 8
>>> k = K()
>>> k.pub
1
>>> k.pub__
2
>>> k.__prv
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'K' object has no attribute '__prv'
>>> k.__prv_
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'K' object has no attribute '__prv_'
>>> k.__prv__
5
>>> k._prt
6
>>> k._prt_
7
>>> k._prt__
8

__prt_와 __prt__에는 접근할 수 없지만 _K__prv, _K___prv_에는 접근이 가능하다.

>>> k._K__prv
3
>>> k._K__prv_
4
class K():
    __prv = 1
    _K__my_prv = 2
    def show(self):
        print(self.__prv,self.__my_prv)
k = K()
k.show()
>>> 1, 2

따라서 역으로 클래스 이름을 접두사로 붙인다면 접근이 가능하다.

profile
강준우

0개의 댓글

관련 채용 정보