지난 시간에 클래스와 객체가 무엇인지 잠깐 살펴보았죠? 실제 세계에 존재하는 실체(instance)를 객체(object)라고 하고, 객체들의 공통점을 간추려서 개념적으로 나타낸 것이 클래스(class)라고 했습니다.
어떤 클래스를 만드려면 그 객체가 갖는 성질과 그 객체가 하는 행동을 정의해주면 된다고도 했구요. 요즘 많이 하시는 디아블로II 게임의 아마존이란 캐릭터를 클래스로 표현해 볼까요?
class Amazon: str = 20 # 힘 dex = 25 # 기술 vit = 20 # 체력 eng = 15 # 에너지 def attack(self): # 공격하다 return 'Jab!!!'
아마존 클래스가 갖고 있는 힘, 기술, 체력, 에너지라는 네 가지 성질은 변수로 나타내었구요, '공격'하는 행동은 메서드로 나타내었습니다. 전에 공부했던 모듈도 복습할 겸 메모장으로 작성하셔서 diablo.py라는 파일로 저장해주세요. 이제 아래와 같이 diablo 모듈을 불러들인 다음에,
>>> import sys >>> sys.path.append('c:/python21/exam') >>> import diablo
Amazon 클래스의 객체를 만들어 봅시다.
>>> jane = diablo.Amazon() >>> mary = diablo.Amazon()
두 명의 여전사가 탄생했습니다. 짜잔~
jane과 mary는 둘 다 Amazon으로서 필요한 자질을 모두 갖추고 있겠죠? 그렇다면 jane의 힘도, 공격하는 행동도 Amazon 클래스에서 정의한 그대로이겠구요.
>>> jane.str 20 >>> jane.attack() 'Jab!!!'
이렇게 객체는 클래스에서 정의해준 변수와 메서드를 그대로 갖게 됩니다. 별로 어렵지 않죠? 여기서 주의해서 보실 것은 메서드를 정의할 때와 사용할 때는 차이가 있다는 점입니다. Amazon 클래스에서 메서드를 정의할 때는 def attack(self):와 같이 self라는 인자를 받았는데, jane 객체의 메서드를 호출할 때는 그냥 attack()이라고 했지요?
self라는 것은 바로 그 클래스의 객체를 가리키는데, jane과 mary가 똑 같은 attack 메서드를 가지기 때문에 서로 구별하기 위해서 사용한 것입니다. 한 마디로 메서드를 정의할 때는 항상 self라는 인자를 써준다고 생각하시면 되겠네요. self를 어떻게 사용하는지 좀 더 살펴보기 위해 Amazon 클래스에 메서드를 추가해 봅시다.
def exercise(self): #훈련하다 self.str += 2 self.dex += 3 self.vit += 1
이 메서드는 훈련을 하면 힘, 기술, 체력이 올라가는 것을 표현했지요. 메모장에서 diablo.py 파일의 Amazon 클래스에 이 메서드를 추가하고 저장해주시기 바랍니다. 저장하셨으면 변경된 diablo 모듈을 재적재(reload)하고 새로운 객체를 만들어서 훈련을 시켜보세요.
>>> reload(diablo) <module 'diablo' from 'c:/python21/exam\diablo.py'> >>> eve = diablo.Amazon() >>> eve.exercise() >>> eve.str 22
힘(str)이 세졌네요. 훈련한 보람이 있지요?
출처 : wikidocs 왕초보를 위한 파이썬
'Python > 왕초보를 위한 파이썬' 카테고리의 다른 글
7.4. 개체 속의 개체 (0) | 2012.04.06 |
---|---|
7.3. 대물림 (0) | 2012.04.06 |
7.1. 클래스와 인스턴스 (0) | 2012.04.06 |
07. 객체지향 (0) | 2012.04.06 |
6.3. 파일을 입맛대로 (0) | 2012.04.04 |
댓글