[python] 다형성이 없을 때의 코드 중복 문제

다형성(polymorphism)은 객체지향 프로그래밍에서 중요한 개념으로, 여러 클래스가 상속 관계에 있는 경우 같은 메서드를 호출할 때 다양한 방식으로 처리할 수 있게 해줍니다. 다형성이 없을 때는 같은 작업을 하는 코드가 중복되는 문제가 발생할 수 있습니다.

다형성의 부재로 인한 중복 코드 문제

가상의 예시로 사각형과 원을 그리는 코드를 생각해보겠습니다.

class Rectangle:
    def draw(self):
        print('Drawing a rectangle')

class Circle:
    def draw(self):
        print('Drawing a circle')

def draw_shapes(shapes):
    for shape in shapes:
        if isinstance(shape, Rectangle):
            shape.draw()
        elif isinstance(shape, Circle):
            shape.draw()

shapes = [Rectangle(), Circle()]
draw_shapes(shapes)

위 코드에서 draw_shapes 함수는 입력으로 넘겨받은 각 도형에 대해 draw 메소드를 호출하는데, 각 도형의 형태에 따라 if-else 문을 사용하여 처리하는 것을 볼 수 있습니다. 이러한 코드는 다형성을 활용하지 않고 중복된 코드를 포함하고 있는 예시입니다.

다형성을 활용한 중복 코드 해결

다형성을 적용하여 중복 코드를 해결해보겠습니다.

class Shape:
    def draw(self):
        pass

class Rectangle(Shape):
    def draw(self):
        print('Drawing a rectangle')

class Circle(Shape):
    def draw(self):
        print('Drawing a circle')

def draw_shapes(shapes):
    for shape in shapes:
        shape.draw()

shapes = [Rectangle(), Circle()]
draw_shapes(shapes)

위의 코드는 Shape 클래스를 생성하여 RectangleCircle 클래스가 모두 Shape 클래스를 상속받도록 하였습니다. 이제 draw_shapes 함수는 각 도형의 형태에 상관없이 동일한 방식으로 draw 메소드를 호출할 수 있게 되었습니다.

결론

다형성을 활용하면 객체의 동적인 특성을 잘 활용할 수 있고, 코드의 중복을 줄일 수 있습니다. 객체 지향 프로그래밍에서는 다형성을 적절히 활용하여 유연하고 효율적인 코드를 작성할 수 있도록 하는 것이 중요합니다.

참고 문헌: Real Python - Object-Oriented Programming (OOP) in Python 3