Python에서 객체 지향 프로그래밍의 두 핵심 개념인 상속과 다형성은 코드의 재사용성을 높이고, 유지 보수를 용이하게 하는 데 큰 도움이 됩니다. 이 글에서는 Python의 상속과 다형성에 대해 상세히 알아보고, 실제 예제를 통해 각 개념을 설명하겠습니다.
상속(Inheritance) 이해하기
상속은 한 클래스가 다른 클래스의 속성과 메서드를 물려받는 메커니즘입니다. 이를 통해 기존 코드를 재사용하면서 확장할 수 있으며, 기본 클래스(Base Class)와 파생 클래스(Derived Class) 사이에 관계를 설정할 수 있습니다.
기본 클래스 정의하기
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subclass must implement abstract method")
파생 클래스를 통한 상속
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
class Cat(Animal):
def speak(self):
return f"{self.name} says Meow!"
이 예에서 Dog와 Cat 클래스는 Animal 클래스로부터 상속받습니다. 각 클래스는 speak 메서드를 자신의 방식대로 구현하여, 같은 메서드가 다른 출력을 반환하게 합니다.
다형성(Polymorphism) 이해하기
다형성은 상속 관계에 있는 다른 클래스들이 같은 이름의 메서드를 다른 방식으로 실행할 수 있게 하는 특성입니다. 이는 동일한 인터페이스에 대해 다양한 동작을 구현할 수 있게 해주며, 코드의 유연성을 증가시킵니다.
다형성 예제
def animal_sound(animal):
print(animal.speak())
my_dog = Dog("Buddy")
my_cat = Cat("Whiskers")
animal_sound(my_dog) # 출력: Buddy says Woof!
animal_sound(my_cat) # 출력: Whiskers says Meow!
위 예제에서 animal_sound 함수는 어떤 종류의 동물이 넘겨지든 각각의 speak 메서드를 호출합니다. 이는 파이썬이 런타임에 메서드를 결정하는 늦은 바인딩(Late Binding) 덕분에 가능합니다.
상속과 다형성의 결합
상속과 다형성을 결합하면, 하나의 코드 라인이 다양한 타입의 객체에 대해 서로 다른 동작을 수행할 수 있습니다. 이는 코드의 재사용과 확장성을 획기적으로 향상시킬 수 있습니다.
animals = [Dog("Ginger"), Cat("Blue"), Dog("Fido")]
for animal in animals:
print(animal.speak())
이 코드는 다양한 타입의 동물 객체들을 포함한 리스트를 순회하면서, 각 동물의 speak 메서드를 호출합니다. 출력 결과는 각 동물의 특성에 따라 다르게 나타납니다.
상속과 다형성은 Python에서 객체 지향 프로그래밍을 효과적으로 구현하는 데 중심적인 역할을 합니다. 이 두 개념을 활용함으로써 더욱 강력하고 유연한 애플리케이션을 개발할 수 있습니다.
'Python' 카테고리의 다른 글
Python에서 데코레이터(Decorator) 이해하기: 기능 확장의 아름다움 (35) | 2024.05.12 |
---|---|
Python에서 제너레이터(Generator) 활용하기: 효율적인 데이터 처리 (30) | 2024.05.11 |
Python에서 클래스와 객체 지향 프로그래밍 이해하기 (33) | 2024.05.10 |
Python에서 예외 처리하기: try와 except의 사용법 (31) | 2024.05.10 |
Python 파일 입출력 기초: 파일 다루기의 기본 (30) | 2024.05.09 |