십대를 위한 코딩/십대를 위한 파이썬

기반 클래스(Base Class)와 파생 클래스(Derived Class)

forSilver 2025. 2. 21. 03:00
반응형

📌 기반 클래스(Base Class)와 파생 클래스(Derived Class)

객체지향 프로그래밍(OOP)에서 기반 클래스(Base Class)파생 클래스(Derived Class)상속(Inheritance) 개념을 통해 서로 연결됩니다.

  • 기반 클래스(Base Class, 부모 클래스): 다른 클래스에 공통 기능을 제공하는 기본 클래스
  • 파생 클래스(Derived Class, 자식 클래스): 기반 클래스를 상속받아 확장하거나 새로운 기능을 추가하는 클래스

🚀 1. 기본 개념

기반 클래스(Base Class)

  • 상속을 통해 다른 클래스에서 공통으로 사용할 기능을 제공하는 클래스
  • 코드 재사용성을 높여 중복을 줄임
  • 직접 객체를 생성하기보다는, 파생 클래스에서 활용

파생 클래스(Derived Class)

  • 기반 클래스를 상속받아 기능을 확장하거나 수정 가능
  • 기존의 메서드를 **오버라이딩(Overriding)**하여 기능을 변경할 수 있음
  • super()를 사용하여 부모 클래스의 기능을 호출할 수도 있음

📌 2. Python에서 상속 구현

기본 상속 구조

# 기반 클래스 (부모 클래스)
class Animal:
    def __init__(self, name):
        self.name = name
    
    def speak(self):
        return "소리를 낼 수 있습니다."

# 파생 클래스 (자식 클래스)
class Dog(Animal):
    def speak(self):  # 부모 클래스의 메서드를 오버라이딩
        return "멍멍!"

# 객체 생성 및 테스트
dog = Dog("바둑이")
print(dog.name)   # 바둑이
print(dog.speak()) # 멍멍!

📌 출력 결과

바둑이
멍멍!

파생 클래스에서 super() 사용

super()를 사용하면 부모 클래스의 기능을 유지하면서 추가 기능을 구현할 수 있습니다.

class Cat(Animal):
    def __init__(self, name, color):
        super().__init__(name)  # 부모 클래스의 생성자 호출
        self.color = color

    def speak(self):
        return "야옹~"

cat = Cat("나비", "하얀색")
print(cat.name)   # 나비
print(cat.color)  # 하얀색
print(cat.speak()) # 야옹~

📌 출력 결과

나비
하얀색
야옹~

📌 3. 메서드 오버라이딩(Method Overriding)

  • 파생 클래스에서 부모 클래스의 메서드를 수정하여 새로운 기능을 추가하는 것
  • 같은 이름의 메서드를 다시 정의하면, 자식 클래스의 메서드가 우선 실행됨
class Animal:
    def speak(self):
        return "소리를 낼 수 있습니다."

class Dog(Animal):
    def speak(self):  # 부모 클래스의 메서드를 오버라이딩
        return "멍멍!"

dog = Dog()
print(dog.speak())  # 멍멍!

📌 출력 결과

멍멍!

🔥 부모 클래스의 speak()가 아니라, 자식 클래스의 speak()가 실행됨!


📌 4. 다중 상속(Multiple Inheritance)

Python에서는 여러 개의 기반 클래스를 상속받을 수도 있습니다.

class Animal:
    def move(self):
        return "이동할 수 있습니다."

class Flyable:
    def fly(self):
        return "날 수 있습니다."

# 다중 상속
class Bird(Animal, Flyable):
    pass  # 별도 메서드 정의 없이 부모 클래스 기능을 그대로 사용

bird = Bird()
print(bird.move()) # 이동할 수 있습니다.
print(bird.fly())  # 날 수 있습니다.

📌 출력 결과

이동할 수 있습니다.
날 수 있습니다.

🔹 Bird 클래스는 Animal과 Flyable의 기능을 모두 상속받음!


📌 5. 기반 클래스 vs 파생 클래스 비교

구분 기반 클래스(Base Class) 파생 클래스(Derived Class)

정의 공통 기능을 정의하는 클래스 기반 클래스를 상속받아 확장
역할 상속을 통해 코드 재사용성 증가 기능 추가 및 변경 (오버라이딩)
객체 생성 직접 생성하지 않는 경우 많음 주로 객체를 생성하여 사용
예제 class Animal: class Dog(Animal):

정리

기반 클래스(Base Class): 공통 기능을 정의하는 부모 클래스
파생 클래스(Derived Class): 부모 클래스를 상속받아 기능을 확장하는 자식 클래스
오버라이딩(Overriding): 부모 클래스의 메서드를 자식 클래스에서 재정의하여 기능을 변경
super() 사용: 부모 클래스의 기능을 그대로 유지하면서 확장 가능
다중 상속(Multiple Inheritance): 여러 부모 클래스를 상속받을 수도 있음

 

🚀 상속을 사용하면 코드 재사용성이 높아지고, 유지보수가 쉬워진다!