상속은 객체 지향 프로그래밍에서 중요한 개념 중 하나로, 기존 클래스(부모 클래스 또는 슈퍼 클래스)의 속성과 메서드를 새로운 클래스(자식 클래스 또는 서브 클래스)가 물려받아 사용하는 것을 말한다. 이를 통해 코드의 재사용성을 높이고, 유지보수를 용이하게 한다.
기본 개념
상속은 다음과 같은 기본 개념을 포함한다:
부모 클래스 (Parent Class): 다른 클래스에게 속성과 메서드를 물려주는 클래스.
자식 클래스 (Child Class): 부모 클래스로부터 속성과 메서드를 물려받는 클래스.
예제 코드
부모 클래스 정의
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name}가 소리를 낸다.")
자식 클래스 정의
부모 클래스 Animal
을 상속받는 자식 클래스 Dog
와 Cat
을 정의해보자.
class Dog(Animal):
def speak(self):
print(f"{self.name}가 멍멍 짖는다.")
class Cat(Animal):
def speak(self):
print(f"{self.name}가 야옹 야옹 운다.")
객체 생성 및 메서드 호출
dog = Dog("바둑이")
cat = Cat("나비")
dog.speak() # 출력: 바둑이가 멍멍 짖는다.
cat.speak() # 출력: 나비가 야옹 야옹 운다.
상속의 장점
코드 재사용: 부모 클래스에서 정의한 속성과 메서드를 자식 클래스에서 다시 정의할 필요 없이 사용할 수 있다.
유지보수 용이: 공통된 기능을 부모 클래스에 두고, 각 클래스는 고유한 기능만 추가로 구현하면 되므로 유지보수가 쉽다.
계층 구조 표현: 상속을 통해 클래스 간의 계층 구조를 명확히 표현할 수 있다.
상속의 종류
단일 상속 (Single Inheritance): 단일 상속은 하나의 부모 클래스만을 상속받는 방식이다. 위의 예제는 단일 상속의 예이다.
다중 상속 (Multiple Inheritance): 다중 상속은 두 개 이상의 부모 클래스를 상속받는 방식이다. 파이썬은 다중 상속을 지원한다.
class Animal:
def __init__(self, name):
self.name = name
def move(self):
print(f"{self.name}가 움직인다.")
class Pet:
def __init__(self, owner):
self.owner = owner
def show_owner(self):
print(f"주인은 {self.owner}이다.")
class Dog(Animal, Pet):
def __init__(self, name, owner):
Animal.__init__(self, name)
Pet.__init__(self, owner)
def speak(self):
print(f"{self.name}가 멍멍 짖는다.")
dog = Dog("바둑이", "철수")
dog.speak() # 출력: 바둑이가 멍멍 짖는다.
dog.move() # 출력: 바둑이가 움직인다.
dog.show_owner() # 출력: 주인은 철수이다.
메서드 오버라이딩 (Method Overriding)
자식 클래스에서 부모 클래스의 메서드를 재정의(오버라이딩)할 수 있다. 오버라이딩된 메서드는 부모 클래스의 메서드 대신 호출된다.
class Animal:
def speak(self):
print("동물이 소리를 낸다.")
class Dog(Animal):
def speak(self):
print("강아지가 멍멍 짖는다.")
dog = Dog()
dog.speak() # 출력: 강아지가 멍멍 짖는다.
super() 함수
super()
함수는 부모 클래스의 메서드를 호출할 때 사용된다. 이를 통해 자식 클래스에서 부모 클래스의 메서드를 확장할 수 있다.
class Animal:
def speak(self):
print("동물이 소리를 낸다.")
class Dog(Animal):
def speak(self):
super().speak() # 부모 클래스의 speak() 호출
print("강아지가 멍멍 짖는다.")
dog = Dog()
dog.speak()
# 출력:
# 동물이 소리를 낸다.
# 강아지가 멍멍 짖는다.