클래스에서 공개와 비공개

정은경·2021년 3월 17일
0

private과 public

파이썬 클래스에서 속성이나 메소드를 prviate하게 하고 싶을 때,
속성이름이나 메소드 이름 앞에 언더바 두개를 연달아 붙인다

1. private

1-1. 비공개 속성 (private attribute)

class Person:
    def __init__(self, name, age, address, wallet):
        self.name = name
        self.age = age
        self.address = address
        self.__wallet = wallet    # 변수 앞에 __를 붙여서 비공개 속성으로 만듦
 
    def pay(self, amount):
        self.__wallet -= amount   # 비공개 속성은 클래스 안의 메서드에서만 접근할 수 있음
        print('이제 {0}원 남았네요.'.format(self.__wallet))
  • 외부에서 돈을 마구 쓸 수 없도록 지갑(__wallet)을 비공개 속성으로 정의했다

1-2. 비공개 메소드 (priviate method)

class GameCharcter:
    def __init__(self, name, age):
        self.name = name
        self.age = age
        self.__power = 1000
 
    def __out_power(self, amount):
        self.__power -= amount
    
    def __in_power(self, amount):
        self.__power += amount
    
    def play_skill(self, amount):
        self.__out_power(amount)
  • 예를 들어 게임 캐릭터가 파워를 소비해서 스킬을 쓴다고 치면
  • 파워 소비량을 계산해서 차감하는 메서드는 비공개 메서드로 만들고,
  • 스킬을 쓰는 메서드는 공개 메서드로 만듭니다.
  • 만약 파워를 차감하는 메서드가 공개되어 있다면
  • 마음대로 마나를 차감시킬 수 있으므로 잘못된 클래스 설계가 됩니다.

비공개 속성/메소드에 대해서 드는 생각

  • 어떨때 비공개 속성/메소드를 써야하는 지 조금은 아리송송하다

Reference

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글