코드 해석과 if self.isOpened: 이부분이 뭘 의미 하는지 궁금합니다.

조회수 1294회

class Fridge: isOpened = False foods = []

def open(self):
    self.isOpened = True
    print '냉장고 문을 열었어요...'

def put(self, thing):
    if self.isOpened:   
        self.foods.append(thing)
        print '냉장고 속에 음식이 들어갔네...'
    else:
        print '냉장고 문이 닫혀있어서 못넣겠어요...'

def close(self):
    self.isOpened = False
    print '냉장고 문을 닫았어요...'

class Food: pass

이 코드에서
def put(self, thing): if self.isOpened: ===> 이부분이 의미하는 건 뭔가요? False인지 True 인가요? 왜 저렇게 쓰였는지 궁금하네요..

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 간단 설명

    class Fridge:
        def put(self, thing):
            if self.isOpened:  # <== 이렇게 적으면
    
    class Fridge:
        isOpened = False # <== 이걸 찾습니다.
                         # 이건 각각의 Fridge마다 있습니다.
    

    자세히

    myFridge1 = Fridge()
    myFridge2 = Fridge()
    

    냉장고 두 대를 만들었습니다. 냉장고 1과 냉장고 2네요. 냉장고 1과 냉장고 2는 서로 다른 사물입니다. 냉장고 1과 냉장고 2를 스스로 지칭하는 self는 어떤 냉장고이냐에 따라 달라지겠죠.

    myFridge1.isOpened
    myFridge2.isOpened
    

    위의 isOpened는 냉장고 1이 열려있는지 여부이고, 아래의 isOpened는 냉장고 2가 열려있는지의 여부입니다. . 기호는 왼쪽 대상에서 오른쪽 대상(이름)을 찾아볼 때 씁니다.

    함수를 정의할 때 항상 첫번째 인자로 self를 썼습니다. 한 번 안 써보도록 합시다.

    class Fridge:
        isOpened = False
    
        def shake():
            if isOpened:
                print("효과는 상당했다!")
            else:
                print("잘 안 흔들린다...")
    
    

    그리고 흔들어 볼까요.

    myFridge1.shake()
    

    shake() 안에 있는 isOpened를 봅시다. 이렇게 흔들면 흔드는 당시에 당췌 isOpened가 냉장고 1 건지, 냉장고 2 거인지, 아니면 냉장고라는 개념(클래스) 자체에서 온 것인지 알 수 없게 됩니다.

    그래서 항상 파이썬에서는 함수를 호출할 때 첫 번째 인자로 누가 이 함수를 부르는지를 전달합니다. 그게 self입니다. (안 넣어줘도 자동으로 들어갑니다.)

    이제 어떤 냉장고를 흔들었는지 알 수 있게 함수에 첫 번째 인자로 self를 넣어보겠습니다.

    
    class Fridge:
        isOpened = False
    
        def shake(self):
            if self.isOpened:
    
    myFridge1.shake()
    

    이제 def shake() 함수 안에서 self.isOpened라고 썼으므로, myFridge1self라는 걸 알 수 있습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)