[Python] private 네임 맹글링
Java의 Spring 프레임워크는 애노테이션(@)을 적극적으로 사용합니다. 어느게 먼저인지는 모르겠으나, 파이썬도 마찬가지로 애노테이션(@) 문법을 지원합니다. 파이썬에선 이를 '데코레이터'라고 부릅니다. 다음은 데코레이터를 사용하여 property를 등록하는 예제입니다.
class MyObject():
def __init__(self, name):
self.hidden_name = name
@property
def name(self):
print("Called getter")
return self.hidden_name
@name.setter
def name(self, name):
print("Called setter")
self.hidden_name = name
파이썬에선 private 접근지정자가 없기 때문에 위의 예제에서 초라하게 변수명에 hidden을 붙여줬습니다. 정말 이렇게 사용해야한다면 많이 난감할겁니다. 이에 파이썬은 클래스 정의 외부에서 멤버변수를 볼 수 없도록 하는 멤버변수(속성)에 대한 '네이밍 컨벤션(naming convention)' 이 있습니다. 멤버변수명 앞에 2개의 언더바(__)를 붙이면 됩니다. 위의 예제의 변수명을 수정해보겠습니다.
class MyObject():
def __init__(self, name):
self.__name = name
@property
def name(self):
print("Called getter")
return self.__name
@name.setter
def name(self, name):
print("Called setter")
self.__name = name
위와 같이 변수명을 설정함으로써 해당 멤버변수를 외부 코드에서 발견하고 직접적으로 접근할 수 없도록 이름을 맹글링(mangling) 하였습니다. 물론 이것이 멤버변수를 완벽하게 보호할 수 있는 것은 아닙니다만, 의도적인 직접 접근을 어렵게 만드는 아주 좋은 방법입니다.
'Programming > Python' 카테고리의 다른 글
[Python] 구조화된 텍스트 파일 다루기 - XML, JSON, YAML (0) | 2019.06.11 |
---|---|
[Python] 파일 입출력 (0) | 2019.06.11 |
[Python] 클래스(class) (0) | 2019.06.10 |
[Python] 클로저(Closure) (0) | 2019.06.07 |
[Python] 컴프리헨션(Comprehension) (0) | 2019.06.07 |
댓글
이 글 공유하기
다른 글
-
[Python] 구조화된 텍스트 파일 다루기 - XML, JSON, YAML
[Python] 구조화된 텍스트 파일 다루기 - XML, JSON, YAML
2019.06.11 -
[Python] 파일 입출력
[Python] 파일 입출력
2019.06.11 -
[Python] 클래스(class)
[Python] 클래스(class)
2019.06.10 -
[Python] 클로저(Closure)
[Python] 클로저(Closure)
2019.06.07