결론을 먼저 이야기하자면
'지원하지 않는다.'
이다.
Python이 접근제한자를 어떤 식으로 제공하는지 아래 사이트를 참고하였다.
위 사이트에 근거하여 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를 절대 변경하지 마세요. |