상속(Inheritance)은 객체 지향 프로그래밍(OOP)에서 중요한 개념 중 하나로 하나의 클래스가 다른 클래스의 속성과 메서드를 상속받은 것을 의미한다. 상속을 통해 코드 재사용성을 높이고 클래스 간의 계층 구조를 만들 수 있다. 이를 이해하기 위해 상속의 개념과 예시 코드를 자세히 살펴보자.
1. 상속의 개념
• 기본 클래스(부모 클래스 또는 슈퍼 클래스)
상속을 제공하는 클래스를 말한다. 이 클래스는 다른 클래스에게 속성과 메서드를 제공한다.
• 파생 클래스(자식 클래스 또는 서브 클래스)
상속을 받는 클래스를 말한다. 이 클래스는 기본 클래스의 속성과 메서드를 상속받아 사용하거나 확장할 수 있다.
2. 상속의 장점
• 코드 재사용성
기본 클래스에서 정의한 속성과 메서드를 파생 클래스에서 다시 정의하지 않고 사용할 수 있다.
• 계층 구조
클래스 간의 계층 구조를 구성하여 코드를 조직화하고 추상화할 수 있다.
• 확장성
파생 클래스에서 새로운 속성과 메서드를 추가하여 기능을 확장할 수 있다.
예제로 동물을 나타내는 Animal 클래스와 그를 상속받는 Dog 클래스를 만들어 보자.
예제 코드
class Animal:
def __init__(self, name, species):
self.name = name
self.species = species
def make_sound(self, sound):
print(f"{self.name} makes a {sound} sound")
class Dog(Animal):
def __init__(self, name, breed):
# 부모 클래스의 생성자 호출
super().__init__(name, species="Dog")
self.breed = breed
# 부모 클래스의 메서드 확장
def make_sound(self, sound="bark"):
print(f"{self.name} barks: {sound}")
def wag_tail(self):
print(f"{self.name} wags its tail")
# Dog 클래스의 인스턴스 생성
my_dog = Dog("Buddy", "Golden Retriever")
# 상속받은 속성 및 메서드 사용
print(f"{my_dog.name} is a {my_dog.species}")
my_dog.make_sound() # 출력: Buddy barks: bark
my_dog.wag_tail() # 출력: Buddy wags its tail
• Animal 클래스는 name과 species 속성을 가지며 make_sound 메서드를 정의한다.
• Dog 클래스는 Animal 클래스를 상속받아 breed 속성을 추가하고 make_sound 메서드를
확장하여 더 구체적인 동작을 정의한다. 이것이 바로 메서드 오버라이딩(Overriding)이다.
• super() 함수를 사용하여 부모 클래스의 생성자를 호출하고 부모 클래스의 속성을 초기화한다.
• my_dog 인스턴스는 Dog 클래스의 객체이므로 Animal 클래스의 속성과 메서드를 상속받고
Dog 클래스의 속성과 메서드를 사용할 수 있다.
이러한 상속을 통해 코드를 재사용하고 클래스 간의 계층 구조를 만들 수 있으며 필요한 경우
메서드를 확장하거나 오버라이딩하여 기능을 커스터마이즈 할 수 있다.
읽어주셔서 감사합니다.