[python] 다형성을 활용한 유연한 코드 설계

다형성(polymorphism)은 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 다형성을 활용하면 코드를 더 유연하게 설계할 수 있고, 코드의 재사용성과 유지보수성을 증가시킬 수 있습니다. 이번 글에서는 다형성을 활용하여 유연한 코드를 설계하는 방법에 대해 알아보겠습니다.

다형성의 개념

다형성은 한 가지 동작이 서로 다른 객체에 따라 다르게 구현될 수 있는 개념을 말합니다. 즉, 같은 인터페이스를 통해 여러 가지 형태의 객체를 다룰 수 있는 능력을 의미합니다. 이를 통해 코드의 일반화와 모듈화를 도모할 수 있고, 유연한 설계가 가능해집니다.

다형성을 활용한 유연한 코드 설계

1. 추상 클래스와 인터페이스 활용

추상 클래스와 인터페이스는 다형성을 구현하는데 중요한 역할을 합니다. 추상 클래스와 인터페이스를 활용하여 객체들 간에 공통된 메서드를 정의하고 이를 상속받아 각각의 객체마다 다르게 구현할 수 있습니다.

# 추상 클래스 예시
from abc import ABC, abstractmethod

class Shape(ABC):
    @abstractmethod
    def area(self):
        pass

class Circle(Shape):
    def __init__(self, radius):
        self.radius = radius
    
    def area(self):
        return 3.14 * self.radius ** 2

class Square(Shape):
    def __init__(self, side):
        self.side = side
    
    def area(self):
        return self.side ** 2

2. 오버라이딩(overriding) 활용

오버라이딩은 부모 클래스의 메서드를 하위 클래스에서 재정의하여 사용하는 것을 말합니다. 다형성을 구현하는 핵심적인 방법 중 하나로, 하위 클래스에서 부모 클래스의 메서드를 오버라이딩하여 각각의 클래스에 맞는 기능을 구현할 수 있습니다.

# 오버라이딩 예시
class Animal:
    def sound(self):
        pass

class Dog(Animal):
    def sound(self):
        return "멍멍!"

class Cat(Animal):
    def sound(self):
        return "야옹!"

3. 다형적 매개변수 활용

다형적 매개변수를 이용하면 메서드의 매개변수로 여러 타입의 객체를 전달할 수 있습니다. 이를 통해 한 가지 메서드가 여러 가지 타입의 객체를 다룰 수 있어 유연성을 확보할 수 있습니다.

# 다형적 매개변수 예시
def get_sound(animal):
    return animal.sound()

dog = Dog()
cat = Cat()

print(get_sound(dog))  # 출력: 멍멍!
print(get_sound(cat))  # 출력: 야옹!

마무리

다형성을 활용하면 코드의 유연성과 재사용성을 높일 수 있습니다. 추상 클래스, 인터페이스, 오버라이딩, 다형적 매개변수 등의 다양한 다형성 개념을 활용하여 객체 지향 프로그램을 설계할 때, 이러한 유연성을 고려하는 것이 중요합니다.

정확한 상황에서 다형성을 적절히 활용함으로써 코드의 확장성을 높이고, 유지보수성을 향상시킬 수 있습니다.

참고 자료