Python 기초

상속의 개념

우리는 현실 세계에서의 상속에 대해서는 잘 알고 있습니다.

우리는 부모에게서 재산을 상속받을 수 있으며 상속된 재산에 우리가 벌어들인 새로운 재산을 추가할 수 있습니다.

상속을 이용하면 쉽게 재산을 모을 수 있는 것처럼 소프트웨어도 쉽게 개발할 수 있습니다.

 

객체 지향 프로그래밍에도 비슷한 개념이 존재합니다. 상속(inheritance)은 기존에 존재하는 클래스로부터 코드와 데이터를 이어받고 자신이 필요한 기능을 추가하는 기법입니다.

상속은 이미 작성된 검증된 소프트웨어를 재사용할 수 있어서 신뢰성 있는 소프트웨어를 손쉽게 개발, 유지 보수할 수 있게 해주는 중요한 기술입니다.

또한 상속을 이용하면 여러 클래스에 공통적인 코드들을 하나의 클래스로 모을 수 있어서 코드의 중복을 줄일 수 있습니다.

 

예를 들어서 여러 종류의 자동차를 취급하는 자동차 판매점을 위한 파이썬 프로그램을 작성한다고 생각합시다. 승용차, 트럭, 버스는 모두 차량의 일종입니다.

또 스포츠카는 승용차의 일종이라고 할 수 있습니다. 따라서 상속 계층도를 그리면 아래와 같습니다.

 

inheritance car truck bus에 대한 이미지 검색결과

부릉부릉

 

많이 등장하는 부모 클래스와 자식 클래스의 예를 표로 정리하여 보면 아래와 같습니다. 대개 부모 클래스는 추상적이고 자식 클래스는 구체적입니다.

부모 클래스 자식 클래스
Animal(동물) Lion(사자), Dog(개), Cat(고양이)
Bike(자전거) MountainBike(산악자전거), RoadBike, TandemBike
Vehicle(탈 것) Car(자동차), Bus(버스), Truck(트럭), Boat(보트), Motorcycle(오토바이), Bicycle(자전거)
Student(학생) GraduateStudent(대학원생), UnderGraduate(학부생)
Employee(직원) Manager(학생)
Shape(도형) Rectangle(사각형), Triangle(삼각형), Circle(원)

 

상속과 is-a 관계

하나의 객체가 다른 객체의 특수한 버전일 때, 그들 사이에는 "is-a" 관계가 있다고 합시다. 예를 들어, 강아지는 동물입니다. 다음은 몇 가지 "is-a" 관계의 예입니다.

  • 푸들은 강아지입니다.
  • 자동차는 차량입니다.
  • 슬기는 사랑입니다.
  • 봉민이는 알콜 중독자입니다.
  • 사각형은 모양입니다.
  • 꽃은 식물입니다.

 

"is-a" 관계가 객체 간에 존재할 때, 이것은 특수한 객체가 일반적인 객체에 추가적으로 특별한 특성을 가지고 있음을 의미합니다.

객체 지향 프로그래밍에서는 상속이 클래스 간의 "is-a" 관계를 생성하는데 사용됩니다. 이것은 보통 자식 클래스가 부모 클래스의 기능을 확장한다고 이야기합니다.

 

상속은 부모 클래스와 자식 클래스로 이루어집니다. 부모 클래스는 일반적인 클래스이고 자식 클래스는 특수한 클래스입니다.

자식 클래스를 부모 클래스의 확장 버전으로 생각할 수 있습니다. 자식 클래스는 코드의 재작성없이 부모 클래스의 속성과 메소드를 상속합니다.

또한 새로운 속성 및 메소드가 추가될 수 있습니다. 이 추가된 속성과 메소드가 자식 클래스를 부모 클래스의 특수한 버전으로 만듭니다.

 

NOTE

부모 클래스는 수퍼 클래스 또는 기저 클래스(base class)라고도 불립니다. 자식 클래스는 서브 클래스 또는 파생 클래스(derived class)라고도 합니다.