자바를 통해서 OOP를 다뤄봤다면 private과 public 의 의미를 알 것이다.
하나의 클래스가 있으면 외부에서 그 클래스에 접근이 불가능하게 막아 놓을 수가 있다.
정보의 은닉화에 해당하는 특징이다.
자바에서는
private 은 외부에서 접근 불가
public 은 외부에서 접근 가능이다. 이 키워드를 접근 제어라고 한다. (modifier)
파이썬에도 그런게 있다. 인스턴스 변수 앞에 __를 붙이면 된다.
예제> 인스턴스 변수에 접근 제어 표시를 해놓았다. 실행시 no attribute (속성이 없음) 이라고 나온다. 있는데도 없다고 하는 것은 변수의 존재여부를 숨기기 위해서이다.(은닉화)
class MyMachine:
def __init__(self,name):
self.__name = name
self.__position = (0,0)
self.__speed = 5
def showInfo(self):
print('-'*20)
print('1. Name :',self.__name)
print('2. POS :',self.__position)
print('3. Speed :',self.__speed)
robot = MyMachine('KIM')
print(robot.__name)
그렇다면 인스턴스 변수에는 어떻게 접근하느냐? 클래스 내부에서 접근해야 한다. 인스턴스 메소드를 사용한다.
class MyMachine:
def __init__(self,name):
self.__name = name
self.__position = (0,0)
self.__speed = 5
def showInfo(self):
print('-'*20)
print('1. Name :',self.__name)
print('2. POS :',self.__position)
print('3. Speed :',self.__speed)
robot = MyMachine('KIM')
robot.showInfo()
접근이 제한되는 인스턴스 변수의 값을 바꾸는 메소드를 보통 setter, 값을 가져오는 메소드를 getter 라고 한다.
메소드의 경우도 같은 방식이다. 메소드 앞에 __ 를 붙이고 같은 클래스의 메소드에서 호출할 수 있다. 이때 self. 를 붙여줌으로써 인스턴스 메소드라는 것을 알 수 있다.
class MyMachine:
def __init__(self,name):
self.__name = name
self.__position = (0,0)
self.__speed = 5
def showInfo(self):
print('-'*20)
print('1. Name :',self.__name)
print('2. POS :',self.__position)
print('3. Speed :',self.__speed)
print('-'*20)
self.__hello()
def __hello(self):
print('Welcome to my house!')
robot = MyMachine('KIM')
robot.showInfo()
다음 포스팅에서는 인스턴스 속성과 다른 클래스 속성과 static 에 대한 내용이다.