C03.파이썬 상속

학습 목표

이번 강의에서는 파이썬에서 클래스 상속의 개념을 배우고, 기존 클래스를 확장하여 새로운 클래스를 만드는 방법을 익힙니다. 상속을 통해 코드의 재사용성을 높이고, 계층 구조를 만들 수 있는 방법을 이해할 것입니다.

개념 설명

상속(Inheritance)은 기존 클래스(부모 클래스 또는 슈퍼 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스 또는 서브 클래스)가 물려받는 기능입니다. 상속을 사용하면 코드 중복을 줄이고, 클래스 간의 관계를 명확히 할 수 있습니다. 자식 클래스는 부모 클래스의 모든 기능을 그대로 사용할 수 있으며, 추가적인 기능을 정의하거나 부모 클래스의 메서드를 오버라이드(재정의)할 수도 있습니다.

예제 코드

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

    def speak(self):
        """동물이 소리를 내는 메서드 (기본 구현)"""
        return f"{self.name}가 소리를 낸다."

# 자식 클래스 정의
class Dog(Animal):
    def speak(self):
        """개가 짖는 메서드 (오버라이드)"""
        return f"{self.name}가 짖습니다: 멍멍!"

class Cat(Animal):
    def speak(self):
        """고양이가 우는 메서드 (오버라이드)"""
        return f"{self.name}가 웁니다: 야옹!"

# 인스턴스 생성 및 메서드 호출
my_dog = Dog("Buddy")
my_cat = Cat("Kitty")

print(my_dog.speak())  # "Buddy가 짖습니다: 멍멜!"
print(my_cat.speak())  # "Kitty가 웁니다: 야옹!"

코드 설명

위 코드는 클래스 상속의 기본적인 사용 예제를 보여줍니다.

  • Animal 클래스는 동물의 기본적인 속성인 name을 가지며, 기본적인 speak 메서드를 정의합니다.
  • DogCat 클래스는 Animal 클래스를 상속받아 각 동물에 맞는 소리 메서드를 오버라이드합니다.
  • 각 인스턴스를 생성하고 speak 메서드를 호출하여 각 동물의 소리를 출력합니다.

연습 문제

1. Vehicle 부모 클래스를 정의하고, 자동차와 자전거 클래스를 자식 클래스로 만들어 각각의 특성을 정의해 보세요.

2. 부모 클래스의 메서드를 오버라이드하여 자식 클래스에서 고유한 행동을 정의하세요. 예를 들어, Car 클래스는 Vehicledrive 메서드를 오버라이드하여 자신의 방식으로 주행하는 메시지를 출력하도록 구현해 보세요.

연습 문제 해답

# 1번 문제: Vehicle 부모 클래스 정의
class Vehicle:
    def __init__(self, brand, model):
        self.brand = brand  # 브랜드
        self.model = model  # 모델

    def drive(self):
        """차량이 주행하는 메서드 (기본 구현)"""
        return f"{self.brand} {self.model}이(가) 주행 중입니다."

# 자식 클래스 정의
class Car(Vehicle):
    def drive(self):
        """자동차 주행 메서드 (오버라이드)"""
        return f"{self.brand} {self.model}이(가) 도로를 달립니다."

class Bicycle(Vehicle):
    def drive(self):
        """자전거 주행 메서드 (오버라이드)"""
        return f"{self.brand} {self.model}이(가) 자전거 도로를 달립니다."

# 인스턴스 생성 및 메서드 호출
my_car = Car("현대", "아반떼")
my_bicycle = Bicycle("삼천리", "MTB")

print(my_car.drive())  # "현대 아반떼이(가) 도로를 달립니다." 출력
print(my_bicycle.drive())  # "삼천리 MTB이(가) 자전거 도로를 달립니다." 출력
### 설명 - **상속**의 개념을 통해 클래스 간의 관계를 구축하고, 코드 재사용의 장점을 보여줍니다. - **부모 클래스**와 **자식 클래스**의 구조를 정의하여 각 객체의 특성을 명확히 하고, 메서드 오버라이드를 통한 기능 확장을 설명합니다. - 연습 문제를 통해 사용자가 직접 클래스를 정의하고 인스턴스를 생성하여 상속을 활용하는 경험을 쌓을 수 있도록 돕습니다. 이 과정은 객체지향 프로그래밍의 효과적인 설계 원리를 이해하는 데 중요한 기초가 됩니다.

댓글 쓰기

0 댓글