-
[파이썬/Python] 파이썬의 접근 제어자 (private)Python 2021. 6. 3. 18:57
파이썬으로 자료구조를 구현하면서 궁금한 점이 생겼다.
파이썬에도 자바처럼 접근제어자가 있을까?
결론부터 말하자면 클래스를 선언할 때 변수 또는 함수명 앞에 '_' (언더스코어)를 두개 붙여서 네이밍을 해주기만 하면 된다.
예를 들어 이런 클래스가 있다고 해보자
class Person(): def __init__(self, name, age): self.name = name self.age = age def changeName(self, name): self.name = name def printInfo(self): print(self.name, self.age)
보면 바로 이해가 되겠지만 인스턴스를 생성할 때 이름과 나이를 입력받고 이름을 변경하고 싶으면
changeName 함수를 통해 변경하라고 의도가 된 듯한 클래스이다.
그러면 한 번 인스턴스를 생성해보자..
p = Person("hong", 100) p.printInfo() #hong 100
이런식으로 초기화 때 'hong'과 100을 인자로 넘겨주고 printInfo 함수를 실행해보면
결과로 hong 100을 얻을 것이다.
만약 이름을 변경하고 싶으면
p.changeName("kim") p.printInfo() #kim 100
이런식으로 changeName 함수를 통해 변경이 되고
결과로 kim 100을 얻는다.
여기까지는 아무 문제가 없다.
하지만 만약 설계자의 의도와 다르게 인스턴스의 변수를 직접 접근해서 변경한다면?
p.name = "wrongName" p.printInfo() #wrongName 100
당연히 변경이 된다..
하지만 클래스를 설계할 때 이런 결과를 원하지는 않았을 것이다.
그렇기 때문에 인스턴스의 변수에 직접 접근을 못하게 접근 제어자를 써야 된다
그 방법은 간단하다.
바로 '__' 언더스코어 두개..
외부에서 인스턴스의 변수에 직접 접근하지 못하게 기존 클래스를 살짝 변경해보자..
class Person(): def __init__(self, name, age): self.__name = name self.__age = age def changeName(self, name): self.__name = name def printInfo(self): print(self.__name, self.__age)
달라진 점은 변수명에 언더스코어 두개 '__'를 추가한 것이 전부다.
하지만 이것으로 외부의 접근을 아주 쉽게 막을 수 있다.
p = Person("hong", 100) p.__name = "wrongName" p.__age = 1 p.printInfo() #hong 100
딱히 이 코드를 실행한다고 오류가 나지는 않지만 위의 코드를 보다시피 인스턴스를 통한 변수의 할당을 시도 했지만
초가화 때 인자로 넘겨준 값인 hong 과 100이 그대로 출력된다.
함수도 마찬가지로 위와 같은 방법을 통해 private 효과를 구현할 수 있다.
'Python' 카테고리의 다른 글
[파이썬/Python] 파이썬 데크/덱 (deque) 자료구조 알아보기 (0) 2021.06.22 [파이썬/Python] 파이썬의 정렬 방법들 (python sort) (0) 2021.06.12 [파이썬/Python] 파이썬으로 크롤링하기 (0) 2021.06.11 [파이썬/Python] 파이썬 for문 index, value 동시에 접근 하기 (0) 2021.06.07