Tech Study/Python2021. 5. 28. 16:37

 

결론을 먼저 이야기하자면

'지원하지 않는다.'

이다.

 

Python이 접근제한자를 어떤 식으로 제공하는지 아래 사이트를 참고하였다.

 

public, protected, private members in Python

Python - Public, Protected, Private Members Classical object-oriented languages, such as C++ and Java, control the access to class resources by public, private, and protected keywords. Private members of the class are denied access from the environment out

https://www.tutorialsteacher.com/python/public-private-protected-modifiers

 

위 사이트에 근거하여 Python에서는 번역기에 기반한 언어 자체의 규칙으로는 접근제한자를 둘 수 없다는 사실을 알았다. 그저 암묵적인 컨벤션만 존재할 뿐이었다. 이에 대해 간단히 표를 작성해 보았다.

구분 컨벤션 제한 파괴 방법
public 멤버가 영문자로 시작 mapCnt .mapCnt
private 멤버가  __  로 시작 __internalCnt ._{클래스명}__internalCnt
protected 멤버가  로 시작 _limitedCnt ._limitedCnt

 

나는 나름 15년 이상을 C/C++ 한우물만 팠다. 그러다보니, 어떤 언어를 사용할 일이 있다면 OOP 방식으로 디자인하고 구현하려는 경향이 있다. 특히, (개인적인 견해지만)OOP의 3요소 중 하나인 캡슐화(encapsulation)에서 파생된 정보은닉(data hiding) 특성은 산출물을 무척 엘레강스하게 만들어준다.

그래서, 이번에 파이썬을 이용하여 약간은 고도화된 서버를 만들 일이 생겼을 때도 클래스에 기반하여 설계/구현을 하고 있었다. 문득, C++처럼 접근제한자를 두어서 좀 더 solid한 객체지향 설계가 가능할지를 살펴 보았고, 방법이 없다는 사실을 깨달았다.

 

그렇다면!

모든 멤버를 공개(public)

해서 작업하면 되는 것이다. C++도 사실 accessor니 mutator니(getter/setter) 해서 과도한 점이 있기도 했는데, 잠시 동안만이라도 Pythoner가 되기로 한 이상, Pythonic하게 코딩할테다. 나도 아래와 같은 파이썬 철학을 사랑한다.

 

Q: 파이썬에서 상수(const)를 어떻게 지정하죠?
A: var = 9810 으로 선언하고, var를 절대 변경하지 마세요.

 

 

 

Posted by JMAN