본문 바로가기

언어/Python

[ Python ] 클래스를 상속해서 나의 클래스 만들기 (다중 상속 포함)

반응형

파이썬에서 클래스 상속은 객체 지향 프로그래밍의 중요한 개념으로, 기존 클래스(부모 클래스 또는 슈퍼 클래스)의 속성과 메서드를 새 클래스(자식 클래스 또는 서브 클래스)에서 재사용하거나 확장할 수 있게 합니다. 상속을 통해 코드의 재사용성과 확장성을 높일 수 있습니다.

상속의 기본 개념

  • 부모 클래스 (Super Class / Base Class): 다른 클래스가 상속받을 수 있는 기존 클래스입니다.
  • 자식 클래스 (Sub Class / Derived Class): 부모 클래스를 상속받아 부모 클래스의 속성과 메서드를 물려받는 클래스입니다.

상속의 특징

  1. 속성과 메서드의 상속: 자식 클래스는 부모 클래스의 모든 속성과 메서드를 자동으로 상속받습니다.
  2. 메서드 오버라이딩 (Method Overriding): 자식 클래스에서 부모 클래스의 메서드를 재정의할 수 있습니다.
  3. super() 함수: 부모 클래스의 메서드나 속성에 접근하기 위해 사용됩니다.

예제 코드

다음은 상속의 기본 개념을 보여주는 예제 코드입니다.

# 부모 클래스 정의
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        return f"{self.name} makes a sound"

# 자식 클래스 정의
class Dog(Animal):
    def __init__(self, name, breed):
        # 부모 클래스의 생성자를 호출
        super().__init__(name)
        self.breed = breed

    # 부모 클래스의 메서드를 오버라이딩
    def speak(self):
        return f"{self.name} barks"

# 또 다른 자식 클래스 정의
class Cat(Animal):
    def speak(self):
        return f"{self.name} meows"

# 객체 생성 및 메서드 호출
dog = Dog("Buddy", "Golden Retriever")
cat = Cat("Whiskers")

print(dog.speak())  # 출력: Buddy barks
print(cat.speak())  # 출력: Whiskers meows

설명

  1. Animal 클래스 (부모 클래스):
    • Animal 클래스는 name이라는 속성을 초기화하고, speak라는 메서드를 가집니다.
    • 이 클래스는 다른 클래스들이 상속받을 수 있는 부모 클래스입니다.
  2. Dog 클래스 (자식 클래스):
    • Dog 클래스는 Animal 클래스를 상속받습니다.
    • __init__ 메서드에서 super().__init__(name)을 호출하여 부모 클래스의 생성자를 호출하고, 부모 클래스의 초기화 과정을 수행합니다.
    • speak 메서드를 오버라이딩하여 개가 짖는 소리를 표현합니다.
  3. Cat 클래스 (자식 클래스):
    • Cat 클래스도 Animal 클래스를 상속받습니다.
    • speak 메서드를 오버라이딩하여 고양이가 우는 소리를 표현합니다.
  4. 객체 생성 및 사용:
    • Dog 클래스와 Cat 클래스의 인스턴스를 생성하고, 각각의 speak 메서드를 호출합니다.
    • 오버라이딩된 speak 메서드가 호출되어 각기 다른 출력 결과를 보여줍니다.

추가 개념: 다중 상속 (Multiple Inheritance)

파이썬에서는 하나의 자식 클래스가 여러 부모 클래스를 상속받을 수도 있습니다. 이를 다중 상속이라고 합니다. 다중 상속 시에는 메서드 해석 순서(MRO: Method Resolution Order)가 중요합니다.

class Animal:
    def speak(self):
        return "Animal sound"

class Canine:
    def speak(self):
        return "Canine sound"

class Dog(Animal, Canine):
    pass

dog = Dog()
print(dog.speak())  # 출력: Animal sound (MRO에 의해 Animal의 speak가 호출됨)

여기서 Dog 클래스는 AnimalCanine을 모두 상속받았지만, Animal 클래스의 speak 메서드가 먼저 호출됩니다. 이는 MRO에 따라 결정됩니다.

요약

  • 클래스 상속은 코드 재사용과 확장을 가능하게 합니다.
  • 자식 클래스는 부모 클래스의 속성과 메서드를 상속받아 사용할 수 있으며, 필요에 따라 메서드를 오버라이딩할 수 있습니다.
  • super() 함수는 부모 클래스의 메서드나 속성에 접근할 때 사용됩니다.
  • 파이썬에서는 다중 상속도 가능하며, 이는 메서드 해석 순서에 의해 결정됩니다.
반응형