이번 글에서는 파이썬의 "상속(Inheritance)"에 대해 입문자를 위한 가이드를 정리해 보도록 하겠습니다. 간단한 예시 코드를 통해 상속 개념을 쉽게 이해할 수 있도록 하겠습니다.
파이썬 상속 (Inheritance)
상속은 객체 지향 프로그래밍의 핵심 개념 중 하나입니다. 클래스 간의 계층 관계를 정의하여 상위 클래스(부모 클래스)의 속성과 메서드를 하위 클래스(자식 클래스)에서 물려받아 재사용할 수 있게 해 줍니다.
이를 통해 코드 재사용성과 가독성이 높아지며, 프로그램의 생산성과 유지보수성이 향상됩니다.
상속의 장점
- 코드 재사용성 향상: 부모 클래스의 속성과 메서드를 자식 클래스에서 그대로 사용할 수 있어 중복 코드를 줄일 수 있습니다
- 코드 가독성 향상: 클래스 계층 구조가 명확해져 코드를 이해하기 쉬워집니다
- 클래스 계층 구조 구축 가능: 코드를 체계적으로 구성할 수 있습니다
- 개방-폐쇄 원칙(Open-Closed Principle) 준수: 기존 코드를 변경하지 않고 새로운 기능을 추가할 수 있습니다
상속 구현 방법
파이썬에서 클래스 상속은 다음과 같이 구현합니다:
class 부모클래스:
# 부모 클래스 정의
class 자식클래스(부모클래스):
# 자식 클래스 정의
자식 클래스 정의 시 괄호 안에 부모 클래스 이름을 적어주면 부모 클래스로부터 속성과 메서드를 물려받습니다.
예시 1: 동물 계층 구조
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} 소리를 냅니다.")
class Dog(Animal):
def __init__(self, name):
super().__init__(name) # 부모 클래스 속성 상속
def speak(self):
print(f"{self.name} 멍멍!") # 부모 메서드 오버라이딩
class Cat(Animal):
def __init__(self, name):
super().__init__(name)
def speak(self):
print(f"{self.name} 야옹!")
dog = Dog("멍멍이")
cat = Cat("야옹이")
dog.speak() # 멍멍이 멍멍!
cat.speak() # 야옹이 야옹!
이 예시에서는 `Animal` 클래스를 부모 클래스로 하여 `Dog`과 `Cat` 클래스를 자식 클래스로 정의했습니다. `Dog`과 `Cat` 클래스는 `Animal` 클래스의 속성과 메서드를 상속받아 활용하며, `speak` 메서드는 오버라이딩되어 각 동물 소리를 출력합니다.
예시 2: 은행 계좌 시스템
class Account:
def __init__(self, owner, balance=0):
self.owner = owner
self.balance = balance
def deposit(self, amount):
self.balance += amount
print(f"{self.owner}님의 계좌에 {amount}원이 입금되었습니다. 잔액은 {self.balance}원입니다.")
def withdraw(self, amount):
if self.balance < amount:
print(f"{self.owner}님의 계좌 잔액이 부족합니다. 잔액은 {self.balance}원입니다.")
else:
self.balance -= amount
print(f"{self.owner}님의 계좌에서 {amount}원이 출금되었습니다. 잔액은 {self.balance}원입니다.")
class SavingsAccount(Account):
def __init__(self, owner, balance=0, interest_rate=0.03):
super().__init__(owner, balance)
self.interest_rate = interest_rate
def add_interest(self):
interest = self.balance * self.interest_rate
self.deposit(interest)
print(f"{self.owner}님의 계좌에 이자 {interest}원이 지급되었습니다.")
account1 = Account("Alice", 1000)
account2 = SavingsAccount("Bob", 2000, 0.05)
account1.deposit(500) # Alice님의 계좌에 500원이 입금되었습니다. 잔액은 1500원입니다.
account2.withdraw(1000) # Bob님의 계좌에서 1000원이 출금되었습니다. 잔액은 1000원입니다.
account2.add_interest() # Bob님의 계좌에 이자 50원이 지급되었습니다. Bob님의 계좌에 50원이 입금되었습니다. 잔액은 1050원입니다.
이 예시에서는 `Account` 클래스를 부모 클래스로 하여 `SavingsAccount` 클래스를 자식 클래스로 정의했습니다. `SavingsAccount` 클래스는 `Account` 클래스의 속성과 메서드를 상속받아 활용하며, 추가로 `interest_rate` 속성과 `add_interest` 메서드를 포함하여 적금 계좌의 특성을 구현했습니다.
이처럼 상속을 활용하면 기존 코드를 재사용하면서 새로운 기능을 쉽게 추가할 수 있습니다.
다중 상속
파이썬에서는 하나의 클래스가 여러 부모 클래스를 상속받을 수 있습니다. 이를 다중 상속(Multiple Inheritance)이라고 합니다.
class 자식클래스(부모클래스1, 부모클래스2, ...):
# 자식 클래스 정의
다중 상속 시 주의할 점은 부모 클래스들 간에 동일한 메서드가 있을 경우, 먼저 나오는 부모 클래스의 메서드가 우선 적용된다는 점입니다.
다음과 같은 예시 코드를 통해 설명드리겠습니다.
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print(f"{self.name} 소리를 냅니다.")
class Flyable:
def fly(self):
print(f"{self.name} 날개를 펴고 날아갑니다.")
class Bird(Animal, Flyable):
def __init__(self, name):
Animal.__init__(self, name)
Flyable.__init__(self)
bird = Bird("참새")
bird.speak() # 참새 소리를 냅니다.
bird.fly() # 참새 날개를 펴고 날아갑니다.
이 예시에서는 `Animal` 클래스와 `Flyable` 클래스를 부모 클래스로 하고, `Bird` 클래스가 이 두 클래스를 다중 상속받고 있습니다.
- `Animal` 클래스에는 `speak` 메서드가 정의되어 있어 동물이 소리를 낼 수 있습니다
- `Flyable` 클래스에는 `fly` 메서드가 정의되어 있어 날 수 있는 기능을 제공합니다
- `Bird` 클래스는 `Animal`과 `Flyable` 클래스의 속성과 메서드를 모두 상속받아, 소리를 내고 날 수 있는 특성을 가지게 됩니다
`Bird` 클래스의 인스턴스인 `bird`를 생성한 후, `speak`와 `fly` 메서드를 호출하면 각각 "참새 소리를 냅니다."와 "참새 날개를 펴고 날아갑니다."라는 메시지가 출력됩니다.
다중 상속을 통해 두 개 이상의 부모 클래스의 특성을 조합하여 새로운 클래스를 만들 수 있습니다. 이렇게 만들어진 클래스는 부모 클래스들의 속성과 메서드를 모두 상속받게 됩니다.
'프로그래밍 언어 > Python' 카테고리의 다른 글
파이썬 에러 및 예외 처리 완벽 가이드: 초보자를 위한 핵심 개념과 실전 예시 - Python 기초 #14 (0) | 2024.05.25 |
---|---|
파이썬 데코레이터 가이드: 함수 래핑, 로깅, 캐싱 및 타임아웃 활용법 - Python 기초 #13 (0) | 2024.05.24 |
객체 지향 프로그래밍의 핵심, 파이썬 메서드 이해하기 - Python 기초 #11 (0) | 2024.05.22 |
파이썬 매직 메서드 완벽 가이드, 클래스 기능 확장하기 - Python 기초 #10 (0) | 2024.05.21 |
파이썬 객체 지향 프로그래밍(Object-Oriented Programming, OOP) 클래스와 객체 이해 - Python 기초 #9 (0) | 2024.05.20 |