[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
클래스를 생성하여 Rectangle
과 Circle
클래스가 모두 Shape
클래스를 상속받도록 하였습니다. 이제 draw_shapes
함수는 각 도형의 형태에 상관없이 동일한 방식으로 draw
메소드를 호출할 수 있게 되었습니다.
결론
다형성을 활용하면 객체의 동적인 특성을 잘 활용할 수 있고, 코드의 중복을 줄일 수 있습니다. 객체 지향 프로그래밍에서는 다형성을 적절히 활용하여 유연하고 효율적인 코드를 작성할 수 있도록 하는 것이 중요합니다.
참고 문헌: Real Python - Object-Oriented Programming (OOP) in Python 3