C급 개발자와 함께하는 파이썬
7.4 상속
상속이란 위키백과에서 사전적 의미를 보면 다음과 같습니다.
“상속(相續)이란 사람의 사망에 의한 재산 및 신분상의 지위의 포괄적인 승계를 말한다. ”
부가적인 내용도 있지만 상속의 사전적 의미만을 가져왔습니다. 여기에서 중요한것은 “재산 및 신분상의 지위의 포괄적인 승계”에 있습니다. 상속이란 부모클래스에서 가지는 함수나 특성을 자식에게 그대로 전달하는 것입니다.
위에있는 내용은 자동차 클래스과 벤츠자동차 클래스가 있습니다. 벤츠자동차 클래스는 자동차의 성질을 모두 가져와서 그대로 사용이 가능합니다.
자동차 클래스에서는 초기화, 전진, 후진, 좌회전, 우회전 함수를 가지고 있는데요. 벤츠 클래스는 자동차 클래스에서 상속받고 초기화, 전진 두개의 함수만을 가지고 있습니다.
코드를 살펴보면 다음과 같습니다.
car = Cars(“평범한 자동차”, 2000)
<= 자동차형 객체 car를 만들고 car에 초기화를 하고 있습니다.
car.about()
<= 자동차형 객체 car는 about함수를 호출하고 있습니다. 이 함수는 Cars클래스에서 정의한 about함수를 호출합니다. 결과는 아래와 같이 나타나고 있습니다.
car.run()
<= 자동차형 객체 car는 자동차 Cars클래스의 run함수를 호출합니다. 결과는 아래와 같이 나타나고 있습니다.
benz = Benz(“벤츠”, 2001, “E Class” )
벤츠 클랙스 Benz형 객체를 benz 라는 객체를 만들어 줍니다.
benz.about()
benz객체의 about은 자동차 클래스 Cars 클래스에도 정의되어있고 Benz 클래스에도 정의되어있습니다. 상속받은후에 함수를 재정의하는 경우 재정의된 함수를 호출하게 되어 있습니다.
benz.run()
<= 위코드는 다음과 같습니다. Cars에서 run() 함수를 정의 했습니다. 그래서 car에서는 run()을 실행하면 “전진 입니다.” 메시지를 출력합니다. 그런데 Benz 클래스에서는 이 run()함수를 재정의 하였습니다. 그래서 Benz의 객체 benz는 run()함수를 실행하면 Benz클래스에서 정의한 “벤츠 자동차는 좀더 안락하게 전진합니다.” 라는 메시지를 출력합니다. 클래스가 상위 클래스를 상속받으면 해당 함수 및 변수들은 상속받은 클래스에서 그대로 사용이 가능합니다. 그런데 상속받은 클래스에서 함수를 재정의 하는경우 재정의된 함수를 사용하고 있습니다.
benz.back()
<= Benz 클래스에서는 run() 함수는 재정의 하였지만 back() 함수는 재정의 하지 않았습니다. 따라서 Cars클래스에 있는 back() 함수를 호출하여 “후진 입니다.” 메시지를 출력하고 있습니다.
7.99 요약
여기까지 파이썬에서 클래스를 정의하고 초기화 하고 상속에 대해서 배워보았습니다. 클래스 객체 이러한 용어는 파이썬 뿐만 아니라 기타 다른 객체지향 프로그래밍을 하면 배워야하는 개념입니다.
자세히 살펴보고 다시한번 숙지하여 제대로 이해하기 바랍니다.