본문 바로가기
Python/왕초보를 위한 파이썬

7.3. 대물림

by 가므자 2012. 4. 6.

지난 두 강좌를 통해 객체 지향에 대해 소개해 드렸는데, 여러분은 어떻게 느끼셨는지요. 개념적으로는 이해가 될 듯도 한데, 실제로 프로그램을 작성할 때는 어떻게 적용해야할지 난감해 하시는 분이 많지 않을까 하는 생각도 드는군요.

사실 객체지향의 개념을 제대로 이해하고 활용하기까지는 시간이 좀 걸린답니다. 그러니까 너무 걱정하지 마시고 천천히, 여러 번 반복해서 공부하시기 바랍니다.

아무리 좋은 개념도 갑자기 많이 공부하면 오히려 헷갈리기 쉽지요. 그러니 제가 설명 드리는 것부터 프로그램에 적용시켜 보면서 차근차근 공부하셨으면 합니다.

오늘 알아볼 내용은 객체지향 프로그래밍의 핵심적인 개념 가운데 하나인 상속(inheritance)입니다. 상속이란 어떤 클래스가 다른 클래스의 성질을 물려받는 것을 말하지요.

어떤 클래스를 만들 때 처음부터 모든 것을 새로 만들 필요 없이, 핵심적인 성질을 갖고 있는 다른 클래스로부터 상속을 받아서 조금만 손을 보면 쓸만한 클래스를 만들 수 있답니다.

예제를 보실까요?

class Person:
    # 눈 두 개, 코 하나, 입 하나...
    eyes = 2
    nose = 1
    mouth = 1
    ears = 2
    arms = 2
    legs = 2

    # 먹고 자고 이야기하고...
    def eat(self):
        print '얌냠...'

    def sleep(self):
        print '쿨쿨...'

    def talk(self):
        print '주절주절...'

위의 Person이라는 클래스는 보통사람을 나타낸 클래스입니다. 눈, 코, 입, 팔다리가 다 있고, 먹고, 자고 이야기도 하지요.

이번에는 학생이라는 클래스를 만들어 봅시다. 학생도 사람이니까 사람이 갖는 여러 성질이나 행동은 모두 갖고 있을 것이고, 거기에 학생만의 특징을 좀 더 갖도록 하면 되겠지요? 하지만, 사람 클래스도 한참 걸려서 입력했는데, 또 다시 학생클래스의 눈, 코, 입부터 시작해서 모든 것을 새로 만들어주려면 너무 귀찮겠네요.

바로 이럴 때 다음과 같이 상속을 이용하면 손쉽게 학생 클래스를 만들 수 있답니다.

class Student(Person):     # Person 클래스를 상속받음
    def study(self):
        print '열공열공...'

위의 Student 클래스는 Person 클래스를 상속받았습니다. 우리가 Student 클래스를 눈, 코, 입부터 하나하나 다시 만들어 주지 않더라도 Person의 성질들을 모두 물려받아서 갖게 된 것이죠. 우리는 여기에 study라는 메쏘드만 하나 더 써주어서 우아하게 마무리를 했습니다.

굳이 상속을 받지말고 스크립트를 복사해서 붙이면 되지않느냐구요? 물론 그렇게 해도 가능합니다.

하지만 나중에 사람과 학생 클래스에 '옷 색깔'이라든지, '싸우다' 같은 것들을 추가하고 싶어진다면, 그 때마다 사람 클래스와 학생 클래스를 각각 수정해야 되겠지요.

사람과 학생의 관계를 위와 같이 그림으로 표현할 수도 있습니다. 사각형은 각각의 클래스를 나타내고, 그 안에 클래스의 이름과 변수, 메쏘드를 적어주었습니다. 화살표는 '상속 관계'를 나타내구요, 그 방향은 하위 클래스(상속받은 클래스)로부터 상위 클래스(상속해준 클래스)를 향하고 있습니다.

이 화살표를 따라가면서 'is a'라고 읽으면 두 클래스의 관계를 쉽게 파악할 수 있지요.

"A Student is a Person.(학생은 사람이다)"이 되는군요.

클래스들의 관계를 이렇게 그림으로 그리면 클래스를 설계하거나 분석할 때 이해하기 쉽답니다.

그럼, 과연 Student 클래스가 Person 클래스의 모든 성질을 똑같이 갖고 있는 것인지도 확인해 보도록 하죠. 먼저 위의 예제들을 파일로 저장해서 import하시거나, 그냥 인터프리터에서 입력하신 다음에 아래와 같이 테스트를 해보세요.

>>> lee = Person()
>>> lee.mouth
1
>>> lee.talk()
주절주절...
>>> kim = Student()
>>> kim.mouth
1
>>> kim.talk()
주절주절...

Person 클래스의 객체인 lee와 Student 클래스의 객체 kim이 하는 짓들이 똑같지요? Person 클래스로부터 상속받았기 때문에 그렇다는 것을 아실 수 있겠죠? 그러나, 상속 받은 것으로 끝이 아니지요… Student는 공부라는 비장의 카드도 갖고 있지 않았겠습니까?

>>> kim.study()
열공열공...

역시 kim은 학생답게 공부도 열심히 하는군요…

출처 : wikidocs 왕초보를 위한 파이썬

'Python > 왕초보를 위한 파이썬' 카테고리의 다른 글

Python 실습_Range Step  (0) 2012.04.10
7.4. 개체 속의 개체  (0) 2012.04.06
7.2. 변수와 메서드(Method)  (0) 2012.04.06
7.1. 클래스와 인스턴스  (0) 2012.04.06
07. 객체지향  (0) 2012.04.06

댓글