자바를 통해서 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 에 대한 내용이다.

공유하기

facebook twitter kakaoTalk kakaostory naver band