Programming Languages/Python
다형성 (Polymorphism)
newclass
2025. 3. 26. 04:07
다형성(Polymorphism)
1. 다형성이란?
다형성은 같은 이름의 메서드가 다른 클래스에서 다른 기능을 수행할 수 있게 하는 개념입니다. 이를 통해 여러 객체 타입에 대해 동일한 인터페이스를 사용할 수 있으며, 코드의 유연성과 확장성이 높아집니다.
2. 메서드 오버라이딩을 통한 다형성
앞서 상속에서 본 것처럼, 자식 클래스는 부모 클래스의 메서드를 오버라이딩(재정의)하여 자신만의 기능을 구현할 수 있습니다.
class Shape:
def area(self):
pass # 추상적인 개념이므로 구현하지 않음
def describe(self):
return f"이것은 도형입니다. 면적: {self.area()}"
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
import math
return math.pi * self.radius**2
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
# 다형성 활용
shapes = [Circle(5), Rectangle(4, 6)]
for shape in shapes:
print(shape.describe()) # 같은 메서드 호출이지만 각 객체 타입에 맞게 실행됨
3. 덕 타이핑(Duck Typing)
파이썬은 "덕 타이핑"이라는 개념을 따릅니다. "오리처럼 걷고, 오리처럼 꽥꽥거리면, 그것은 오리일 것이다"라는 말에서 유래했습니다. 즉, 객체의 타입보다는 객체가 어떤 메서드와 속성을 가지고 있는지가 중요합니다.
class Duck:
def sound(self):
return "꽥꽥"
def walk(self):
return "뒤뚱뒤뚱 걷기"
class Person:
def sound(self):
return "안녕하세요"
def walk(self):
return "두 발로 걷기"
class Dog:
def sound(self):
return "멍멍"
def walk(self):
return "네 발로 걷기"
# 덕 타이핑을 활용한 함수
def make_sound_and_walk(entity):
# 타입을 검사하지 않고, 필요한 메서드가 있는지만 확인
return f"소리: {entity.sound()}, 걸음걸이: {entity.walk()}"
# 서로 다른 클래스의 인스턴스를 동일한 방식으로 처리
duck = Duck()
person = Person()
dog = Dog()
print(make_sound_and_walk(duck))
print(make_sound_and_walk(person))
print(make_sound_and_walk(dog))