즐거운 휴일이에요~

오늘은 모처럼 학교에서 공부를 했답니다.

새로 산 노트북도 처음으로 갖고 나왔지요. 이럴 때 참 좋더군요. 흐흐흐…

 

요즘 게시판에 올려주시는 글들을 보고 제가 미처 몰랐던 부분을 많이 배우고 있답니다.

참 고맙기도 하고, 한편으로는 부족한 실력에 강좌를 쓴다는 것이 부끄럽기도 하네요.

앞으로도 많이 올려주세요. 아무리 쉬운 질문이나 간단한 예제라도 대환영입니다.

 

노트북을 쓰고 있으니 미션 임파서블의 주인공이 된 듯 하군요. 흠흠…

오늘은 객체 속에 객체를 집어넣는 임무를 수행하도록 하겠습니다.

 

코끼리를 냉장고에 넣는 방법을 아시나요?

아마 모르시는 분이 없겠죠? 제가 아는 유머는 온 국민이 다 알고 계시니까요.

 

1번, 냉장고 문을 연다.

2번, 코끼리를 넣는다.

3번, 냉장고 문을 닫는다. ^^;

 

이걸로 프로그램을 한번 짜볼까요?

 

# fridge.py

 

class Fridge:

    isOpened = 0

    foods = []

 

    def open(self):

        self.isOpened = 1

        print '냉장고 문을 열었어요...'

 

    def put(self, thing):

        if self.isOpened:

            self.foods.append(thing)

            print '냉장고 속에 음식이 들어갔네...'

        else:

            print '냉장고 문이 닫혀있어서 못넣겠어요...'

 

    def close(self):

        self.isOpened = 0

        print '냉장고 문을 닫았어요...'

 

class Food:

    pass

 

위와 같이 냉장고와 음식 클래스를 갖고 있는 fridge.py 모듈을 만들어보았습니다.

냉장고 클래스에는 문이 열려있는지를 나타내는 isOpened라는 변수와 냉장고 안에 들어있는 음식들의 리스트인 foods가 있습니다.

, 냉장고 문을 열고, 음식을 집어넣고, 문을 닫는 메쏘드도 각각 갖고 있지요.

 

음식에 대해서는 별로 쓸 말이 없더군요.

쓸 것이 없을 때는 pass라고만 써주면 된다고 해서 그렇게 했습니다.

속이 빈 음식 클래스를 만든 거지요.

 

이제 인터프리터를 띄워서 냉장고에다가 코끼리를 집어넣어 봅시다.

 

>>> import fridge

>>> f = fridge.Fridge()

>>> apple = fridge.Food()

>>> elephant = fridge.Food()

 

먼저 냉장고 클래스의 객체로 f라는 것을 만들고 음식 클래스의 객체는 apple과 elephant를 만들었습니다.

 

>>> f.open()

냉장고 문을 열었어요...

>>> f.put(apple)

냉장고 속에 음식이 들어갔네...

 

냉장고 문을 열고, 일단 준비운동으로 냉장고에 사과를 넣어봤는데 잘 들어갔지요?

그럼 코끼리도 넣어볼까요?

 

>>> f.put(elephant)

냉장고 속에 음식이 들어갔네...

 

코끼리도 쏙 들어갔습니다~

냉장고 속에 사과랑 코끼리가 잘 들어갔는지 확인해볼까요?

냉장고 f의 foods 리스트에 뭐가 들어있는지 봅시다.

 

>>> f.foods

[<fridge.Food instance at 007924AC>, <fridge.Food instance at 0079153C>]

 

Food 클래스의 인스턴스(instance, 실체) 두 개가 들어있다고 나오는군요.

실체나 객체나 비슷한 말이겠죠?

, 냉장고 객체는 foods라는 리스트를 갖고 있구요, foods 리스트는 음식 클래스의 사과와 코끼리 객체를 갖고 있습니다.

결국 냉장고 객체는 다른 객체들을 갖고 있다고도 할 수 있겠죠?

 

오늘 보신 것처럼 객체는 또 다른 객체를 포함할 수도 있답니다.

객체지향 프로그래밍에서는 이런 것을 composition(합성, 복합)이라고 하구요, “has-a” 관계라고도 합니다.

f는 elephant를 갖고 있다(f has an elephant).” 말 되죠?

별로 어렵지는 않지만 잘 써먹을 수 있는 개념이니까 익혀두세요.

이렇게해서 오늘의 임무인 객체 속에 객체 집어넣기는 훌륭하게 완수했군요.

 

참고로 “has-a”관계를 나타낸 그림을 보여드리면서 마치도록 하겠습니다.

Fridge 클래스의 객체는 Food 클래스의 객체(elephant 등…)를 여러 개(*) 가질 수 있다는 것을 연결선 위아래에 *와 elephant라고 써줘서 나타낸 것이지요.

 

 

 

 


다들 수고하셨습니다~

将把此主题..