본문으로 건너뛰기
실습하기

클래스의 기능을 확장하는 상속

상속(Inheritance)은 객체지향 프로그래밍에서 중요한 개념 중 하나로, 기존 클래스의 기능을 새로운 클래스에서 재사용 및 확장합니다.

상속을 잘 활용하면 코드의 재사용성이 높이고, 체계적으로 유지보수하기 쉬운 코드를 작성할 수 있습니다.


부모 클래스와 자식 클래스

상속에서는 기존 클래스를 부모 클래스(또는 슈퍼 클래스)라고 하고, 이 클래스를 상속받아 새로 만들어지는 클래스를 자식 클래스(또는 서브 클래스)라고 합니다.

자식 클래스는 부모 클래스의 속성과 메서드를 그대로 물려받을 수 있으며, 필요에 따라 새 속성이나 메서드를 추가하거나 기존 메서드를 변경할 수 있습니다.

상속 예시
class Vehicle:
def __init__(self, brand, model):
self.brand = brand
self.model = model

def start_engine(self):
print(f"{self.brand} {self.model}의 엔진 시동")

# Vehicle 클래스를 상속받아 Car 클래스를 만듦
class Car(Vehicle):
def __init__(self, brand, model, year):
super().__init__(brand, model) # 부모 클래스의 생성자 호출
self.year = year

def honk(self):
print(f"{self.brand} {self.model}가 경적을 울림")

# my_car 객체 생성
my_car = Car("브랜드A", "모델B", 2024)

# 출력: 브랜드A 모델B의 엔진 시동
my_car.start_engine()

# 출력: 브랜드A 모델B가 경적을 울림
my_car.honk()

여기서 Car 클래스는 Vehicle 클래스를 상속받아 생성됩니다.

Car 클래스는 Vehicle 클래스의 기능을 그대로 사용하면서, 추가로 honk 메서드를 정의합니다.


상속을 왜 사용할까요?

상속을 사용하면 중복된 코드를 줄이고, 공통된 기능을 부모 클래스에 작성한 후, 자식 클래스에서 이를 재사용할 수 있습니다.

예를 들어 다양한 종류의 차량을 나타내는 클래스를 작성할 때, 공통된 기능(예: 엔진 시동)을 부모 클래스에 정의하고 각 차량의 특성에 맞는 기능은 자식 클래스에서 따로 정의할 수 있습니다.


메서드 오버라이딩

자식 클래스에서 부모 클래스의 메서드를 새롭게 정의하는 것을 메서드 오버라이딩(Method Overriding)이라고 합니다.

메서드 오버라이딩을 수행할 경우에는 부모의 메서드와 동일한 이름을 사용하며, self를 포함해야 합니다.

이를 통해 자식 클래스는 부모 클래스의 기능을 자신에게 맞게 재정의할 수 있습니다.

메서드 오버라이딩 예시
class ElectricCar(Car):
def start_engine(self):
print(f"{self.brand} {self.model}의 전기 모터가 켜짐")

ElectricCar 클래스는 Car 클래스를 상속받았지만, start_engine 메서드를 오버라이딩하여 전기 자동차에 맞게 동작을 변경했습니다.

다음 내용이 궁금하다면?

코드프렌즈 PLUS 멤버십 가입 or 강의를 등록해 주세요!