[파이썬] 다형성과 메서드 오버로딩

다형성(Polymorphism)은 객체 지향 프로그래밍에서 중요한 개념 중 하나입니다. 이 개념은 여러 다양한 형태를 가지는 객체가 동일한 메서드나 연산을 다양한 방식으로 사용할 수 있다는 것을 의미합니다.

Python은 동적 타이핑 언어이기 때문에 다형성을 적극적으로 지원합니다. 이러한 다형성을 구현하는 방법 중 하나는 메서드 오버로딩(Method Overloading)입니다. 메서드 오버로딩은 동일한 이름의 메서드를 여러 개 정의하되, 매개변수의 개수나 타입이 다른 경우를 다르게 처리하는 것을 의미합니다.

다형성 예제

아래는 Python에서 다형성을 구현한 예제입니다. 간단한 도형 클래스를 정의하고 이를 상속받는 다양한 도형 클래스를 생성합니다. 각 클래스는 calculate_area() 메서드를 다르게 정의하고 있습니다.

class Shape:
    def calculate_area(self):
        pass

class Rectangle(Shape):
    def calculate_area(self, width, height):
        return width * height

class Circle(Shape):
    def calculate_area(self, radius):
        return 3.14 * radius * radius

class Triangle(Shape):
    def calculate_area(self, base, height):
        return 0.5 * base * height

class Square(Shape):
    def calculate_area(self, side_length):
        return side_length * side_length

이제 우리는 각 도형의 넓이를 계산하는 calculate_area() 메서드를 호출할 수 있습니다. 예를 들어, Rectangle 객체의 calculate_area()를 호출하면 너비와 높이를 매개변수로 받아 사각형의 넓이를 계산해줍니다.

rectangle = Rectangle()
area = rectangle.calculate_area(4, 5)
print("넓이:", area)  # 출력: 넓이: 20

circle = Circle()
area = circle.calculate_area(3)
print("넓이:", area)  # 출력: 넓이: 28.26

triangle = Triangle()
area = triangle.calculate_area(4, 6)
print("넓이:", area)  # 출력: 넓이: 12.0

square = Square()
area = square.calculate_area(5)
print("넓이:", area)  # 출력: 넓이: 25

위의 예제에서 calculate_area() 메서드는 각 도형에 따라 다르게 정의되어 있으며, 다형성을 통해 간편하게 객체의 메서드를 호출할 수 있습니다. 이렇게 객체의 타입에 상관없이 같은 이름의 메서드를 호출하여 다양한 결과를 얻을 수 있다는 것이 다형성의 장점입니다.

결론

다형성과 메서드 오버로딩은 객체 지향 프로그래밍에서 중요한 개념이며, Python에서 다형성을 구현하려면 메서드 오버로딩을 활용할 수 있습니다. 다형성을 활용하면 코드의 재사용성과 유지 보수성을 향상시킬 수 있으며, 객체 간에 유연한 상호 작용을 가능하게 합니다. Python의 다형성 개념을 이해하고 활용하여 효율적이고 유연한 코드를 작성하는 것이 중요합니다.