Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 상속(Inheritance) 완벽 가이드: 단일 상속부터 계층 상속까지

이 글에서는 파이썬 3.x(및 그 이하 버전)에서 상속(inheritance)과 클래스 확장을 어떻게 구현하는지 알아봅니다.

상속은 현실 세계의 관계를 잘 표현할 수 있고, 코드 재사용성(reusability)을 높이며, 추이성(transitivity)을 지원합니다. 또한 개발 시간을 단축하고 유지보수를 쉽게 만들어 주며, 기능 확장도 간편하게 해 줍니다.

상속의 5가지 유형

상속은 크게 다음 5가지 유형으로 분류됩니다.

  • 단일 상속(Single)
  • 다중 상속(Multiple)
  • 계층 상속(Hierarchical)
  • 다단계 상속(Multi-level)
  • 혼합 상속(Hybrid)
파이썬 상속(Inheritance) 완벽 가이드: 단일 상속부터 계층 상속까지

위 그림에서 볼 수 있듯이, 상속이란 부모 클래스의 객체를 직접 생성하지 않고도 다른 클래스의 기능(속성과 메서드)에 접근할 수 있게 해주는 메커니즘입니다.

이번 글에서는 그중에서도 단일 상속과 계층 상속의 구현 방법을 예제와 함께 자세히 살펴보겠습니다.

1. 단일 상속(Single Inheritance)

단일 상속은 하나의 부모 클래스로부터 하나의 자식 클래스가 기능을 물려받는 가장 기본적인 형태입니다. 아래 예제에서는 Student 클래스를 상속하는 College 클래스를 구현합니다.

예제 코드

# 부모 클래스
class Student():
    # 부모 클래스의 생성자
    def __init__(self, name, enrollnumber):
        self.name = name
        self.enrollnumber = enrollnumber

    def display(self):
        print(self.name)
        print(self.enrollnumber)

# 자식 클래스
class College(Student):
    def __init__(self, name, enrollnumber, admnyear, branch):
        self.admnyear = admnyear
        self.branch = branch
        # 부모 클래스의 __init__ 호출
        Student.__init__(self, name, enrollnumber)

# 자식 클래스 객체 생성
obj = College('Rohit', 42414802718, 2018, "CSE")
obj.display()

실행 결과

Rohit
42414802718

College 클래스는 Student 클래스를 상속했기 때문에, 자식 클래스에 직접 정의하지 않은 display() 메서드도 그대로 사용할 수 있습니다. 자식 클래스의 생성자 안에서 Student.__init__()을 명시적으로 호출하여 부모 클래스의 초기화 로직까지 함께 실행했다는 점에 주목하세요.

2. 계층 상속(Hierarchical Inheritance)

계층 상속은 하나의 부모 클래스로부터 여러 개의 자식 클래스가 각각 기능을 물려받는 구조입니다. 아래 예제에서는 Student라는 하나의 부모 클래스를 CollegeUniversity 두 자식 클래스가 동시에 상속합니다.

예제 코드

# 부모 클래스
class Student():
    # 부모 클래스의 생성자
    def __init__(self, name, enrollnumber):
        self.name = name
        self.enrollnumber = enrollnumber

    def display(self):
        print(self.name)
        print(self.enrollnumber)

# 자식 클래스 1
class College(Student):
    def __init__(self, name, enrollnumber, admnyear, branch):
        self.admnyear = admnyear
        self.branch = branch
        # 부모 클래스의 __init__ 호출
        Student.__init__(self, name, enrollnumber)

# 자식 클래스 2
class University(Student):
    def __init__(self, name, enrollnumber, refno, branch):
        self.refno = refno
        self.branch = branch
        # 부모 클래스의 __init__ 호출
        Student.__init__(self, name, enrollnumber)

# 자식 클래스 객체 생성
obj_1 = College('Rohit', 42414802718, 2018, "CSE")
obj_1.display()

obj_2 = University('Rohit', 42414802718, "st2018", "CSE")
obj_2.display()

실행 결과

Rohit
42414802718
Rohit
42414802718

두 자식 클래스 모두 부모 클래스인 Studentname, enrollnumber 속성과 display() 메서드를 공유하면서, 각자에게 필요한 고유 속성(admnyear, refno 등)만 추가로 정의했습니다. 이처럼 공통 기능은 부모 클래스에 두고, 차별화된 기능만 자식 클래스에 구현하면 코드 중복을 크게 줄일 수 있습니다.

마무리

이번 글에서는 파이썬의 상속 개념을 살펴보고, 그중에서도 단일 상속과 계층 상속을 예제와 함께 구현해 보았습니다. 상속을 잘 활용하면 코드 재사용성이 높아지고 유지보수가 쉬워지며, 개발 생산성도 크게 향상됩니다. 다음에는 다중 상속, 다단계 상속, 혼합 상속 등 나머지 유형도 이어서 다뤄보겠습니다.