Python을 배워보자/6. 객체 지향 프로그래밍 (OOP)

파이썬 부모 클래스와 자식 클래스

_Blue_Sky_ 2024. 9. 25. 18:04
728x90

파이썬 부모 클래스와 자식 클래스: 상세 설명 및 예시

1. 클래스 상속의 개념

파이썬에서 클래스 상속은 기존 클래스의 속성과 메서드를 그대로 이어받아 새로운 클래스를 정의하는 것을 의미합니다. 이때 기존 클래스를 부모 클래스 또는 기반 클래스, 새롭게 정의된 클래스를 자식 클래스 또는 파생 클래스라고 합니다.

클래스 상속의 이점:

  • 코드 재사용: 공통적인 속성과 메서드를 부모 클래스에 정의하고, 자식 클래스에서 필요한 부분만 추가하거나 수정하여 코드 중복을 줄일 수 있습니다.
  • 코드 관리: 복잡한 프로그램을 계층적인 구조로 관리하여 코드 가독성을 높이고 유지보수를 용이하게 합니다.
  • 다형성: 서로 다른 클래스의 객체를 마치 같은 종류의 객체처럼 다룰 수 있도록 합니다.

2. 기본적인 클래스 상속 예시

class Animal:
    def __init__(self, name):
        self.name = name

    def sound(self):
        print("소리를 냅니다.")

class Dog(Animal):
    def sound(self):
        print("멍멍")

class Cat(Animal):
    def sound(self):
        print("야옹")

# 객체 생성
dog = Dog("멍멍이")
cat = Cat("냥냥이")

dog.sound()  # 멍멍
cat.sound()  # 야옹

위 예시에서 Animal 클래스는 부모 클래스이고, Dog 클래스와 Cat 클래스는 Animal 클래스를 상속받는 자식 클래스입니다. 자식 클래스는 부모 클래스의 __init__ 메서드와 sound 메서드를 상속받고, 필요에 따라 sound 메서드를 오버라이딩하여 각각 다른 소리를 내도록 구현했습니다.

3. 메서드 오버라이딩

자식 클래스에서 부모 클래스의 메서드를 재정의하는 것을 메서드 오버라이딩이라고 합니다. 메서드 오버라이딩을 통해 자식 클래스는 부모 클래스의 기능을 변경하거나 확장할 수 있습니다.

728x90


4. super() 함수

자식 클래스에서 부모 클래스의 메서드를 호출하려면 super() 함수를 사용합니다. super() 함수는 부모 클래스의 메서드를 호출하는 데 사용되는 특별한 함수입니다.

class Animal:
    def __init__(self, name):
        self.name = name

    def sound(self):
        print("소리를 냅니다.")

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed

    def sound(self):
        super().sound()
        print(f"{self.breed} 멍멍")
 

위 예시에서 Dog 클래스의 __init__ 메서드는 super().__init__(name)을 통해 부모 클래스의 __init__ 메서드를 호출하여 name 속성을 초기화하고, breed 속성을 추가로 초기화합니다. sound 메서드에서는 super().sound()를 통해 부모 클래스의 sound 메서드를 호출한 후에 추가적인 동작을 수행합니다.

5. 다중 상속

파이썬은 다중 상속을 지원합니다. 즉, 하나의 클래스가 여러 개의 부모 클래스를 가질 수 있습니다.

class Flyer:
    def fly(self):
        print("날아다닙니다.")

class Swimmer:
    def swim(self):
        print("헤엄칩니다.")

class FlyingFish(Flyer, Swimmer):
    pass

flying_fish = FlyingFish()
flying_fish.fly()
flying_fish.swim()
 

위 예시에서 FlyingFish 클래스는 Flyer 클래스와 Swimmer 클래스를 모두 상속받아 날기도 하고 헤엄치는 기능을 가집니다.

6. MRO (Method Resolution Order)

다중 상속의 경우, 메서드 호출 시 어떤 부모 클래스의 메서드가 호출될지 결정하는 순서가 중요합니다. 이를 **MRO (Method Resolution Order)**라고 합니다. 파이썬은 C3 알고리즘을 사용하여 MRO를 결정합니다.

7. 추상 클래스와 인터페이스

  • 추상 클래스: 추상 메서드를 포함하는 클래스로, 자체적으로 객체를 생성할 수 없습니다. 자식 클래스에서 추상 메서드를 모두 구현해야만 객체를 생성할 수 있습니다.
  • 인터페이스: 추상 메서드만으로 구성된 클래스로, 다른 클래스가 공통적으로 구현해야 할 메서드 집합을 정의합니다.

8. 클래스 상속의 활용

  • 객체 지향 프로그래밍의 기본: 클래스 상속은 객체 지향 프로그래밍에서 코드 재사용과 코드 관리를 위한 핵심적인 개념입니다.
  • GUI 프로그래밍: GUI 프로그래밍에서 다양한 위젯 클래스를 상속하여 새로운 위젯을 만들 수 있습니다.
  • 게임 개발: 게임 캐릭터나 아이템 등을 클래스로 정의하고 상속 관계를 통해 다양한 종류의 객체를 생성할 수 있습니다.

9. 주의 사항

  • 상속의 남용: 모든 클래스를 상속받아야 할 필요는 없습니다. 불필요한 상속은 코드를 복잡하게 만들 수 있습니다.
  • 다중 상속의 복잡성: 다중 상속은 MRO 문제 등으로 인해 코드를 복잡하게 만들 수 있습니다. 가능한 한 단일 상속을 사용하는 것이 좋습니다.

키워드: 파이썬, 클래스, 상속, 부모 클래스, 자식 클래스, 메서드 오버라이딩, super, 다중 상속, MRO, 추상 클래스, 인터페이스, 객체 지향 프로그래밍

728x90