본문 바로가기
Programming/Python

[Python] 상속 (Inheritance)

by goatlab 2023. 6. 9.
728x90
반응형
SMALL

상속 (Inheritance)

 

 

기존 클래스 (old class)에서 새 클래스 (new class)를 파생하여 새 클래스가 기존 클래스의 모든 멤버 (변수와 메서드)를 상속하는 메커니즘을 상속 또는 유도라고 한다. 기존 클래스는 슈퍼 클래스 (Super Class)라고 하며, 새 클래스는 서브 클래스 (Sub Class)라고 한다.

 

부모 클래스 (Parent Class) 기본 클래스 (Base Class) 또는 슈퍼 클래스 (Super Class)
자식 클래스 (Child Class) 파생 클래스 (Derived Class) 또는 서브 클래스 (Sub Class)

 

파이썬의 모든 클래스는 ‘object’라는 단일 슈퍼 클래스로부터 빌드되므로, 파이썬에서 클래스를 생성하면 내부적으로 ‘object’가 슈퍼 클래스가 된다. 상속의 주요 장점은 코드의 재사용성이다.

 

상속의 종류 (Type of Inheritance)

 

  • 자식 클래스 선언 (Declaration of Child Class)
  • 단일 상속 (Single Inheritance)
  • 다중 레벨 상속 (Multi-level Inheritance)
  • 계층 상속 (Hierarchical Inheritance)
  • 다중 상속 (Multiple Inheritance)

 

자식 클래스 선언 (Declaration of Child Class)

 

자식 클래스가 부모 클래스를 상속 받아 부모의 기능을 활용할 수 있다. 자식 클래스를 선언할 때 소괄호로 부모 클래스를 포함시킨다. 받은 기능을 같은 메서드 명으로 재정의할 수 있다 (Override).

 

class ChildClassName(ParentClassName):
    members of Child class

 

단일 상속 (Single Inheritance)

 

클래스가 하나의 기본 클래스 (부모 클래스)에서 파생되면 단일 상속이라고 한다.

 

object
   |
Father           <---  Parent Class
   |
  Son            <---  Child Class

 

다중 레벨 상속 (Multi-level Inheritance)

 

클래스가 다른 파생 클래스 (자식 클래스)의 기능을 상속하는 경우 다중 레벨 상속이라고 한다.

 

object
   |
Father           <---  Parent Class
   |
  Son            <---  Child Class
   |
GrandSon         <---  GrandChild Class

 

계층 상속 (Hierarchical Inheritance)

 

계층 상속은 한 클래스의 속성을 다른 클래스에 상속시키는 것을 말한다. 계층 상속을 사용하면 코드의 재사용성과 유지보수성을 높일 수 있다.

 

                   object
                      |
                   Father                  <---  Parent Class
                      |
         --------------------------
         |            |           |
        Son        Daughter      Son       <---  Child Class

 

다중 상속 (Multiple Inheritance)

 

클래스가 둘 이상의 부모 클래스로부터 파생되면 다중 상속이라고 한다.

 

                               object
                                /   \
                               /     \
Parent Class              Parent 1   Parent 2         <---
                              \        /
                               \      /
Child Class                      Child                <---

 

메소드 결정 순서 (Method Resolution Order)

 

다중 상속 시나리오에서 클래스의 멤버는 현재 클래스에서 먼저 검색된다. 찾지 못한 경우, 같은 클래스를 두 번 검색하지 않고 깊이 우선, 왼쪽에서 오른쪽 순서로 부모 클래스로 검색이 계속된다. 자식 클래스를 검색하기 전에 부모 클래스를 검색한다. 클래스가 여러 클래스로부터 상속되면 왼쪽에서 오른쪽 순서로 부모 클래스를 검색한다. 상속 계층에서 클래스는 정확하게 한 번만 탐색된다.

 

                               object
                               /    \
                              /      \
Parent Class               Father   Mother
                              \      /
                               \    /
Child Class                      Son

 

Son 객체를 생성하면 (ex : s = Son()), Son의 생성자가 호출된다. Son의 생성자 내부에 super.__init__()이 있으므로 왼쪽의 부모 클래스인 Father 클래스의 생성자가 호출된다. Father 클래스의 생성자 내부에도 super.__init__()이 있으므로 해당 부모 클래스인 'object' 클래스의 생성자가 호출된다. object 클래스는 생성자가 없으므로 object 클래스의 오른쪽 하위 클래스인 Mother 클래스의 생성자를 호출한다. Mother 클래스의 생성자에도 super.__init__()이 있으므로 해당 부모 클래스인 object 클래스의 생성자를 호출하게 되지만, 이미 방문한 object 클래스이므로 검색이 중지된다.

728x90
반응형
LIST