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

파이썬은 객체 지향 프로그래밍 언어로, 클래스를 사용하여 객체를 만들고 메서드를 정의할 수 있습니다. 메서드 오버라이딩과 다형성은 객체 지향 프로그래밍의 중요한 개념 중 하나입니다. 이들은 코드의 재사용성과 유연성을 높여주며, 객체 간의 관계를 구조화하는 데 도움을 줍니다.

메서드 오버라이딩

메서드 오버라이딩은 부모 클래스에서 정의된 메서드를 자식 클래스에서 다시 정의하여 자식 클래스에 맞게 동작하도록 하는 것입니다. 자식 클래스는 부모 클래스의 메서드를 상속받지만, 동일한 이름의 메서드를 정의함으로써 자신만의 동작을 구현할 수 있습니다. 이는 특정 상황에 맞게 메서드를 재정의하여 원하는 결과를 얻을 수 있도록 해줍니다.

예를 들어, 동물 클래스가 있다고 가정해봅시다. 이 클래스에는 소리_내기라는 메서드가 있습니다. 동물 클래스를 상속받는 개 클래스와 고양이 클래스를 만들었습니다. 개와 고양이는 각각 다른 소리를 내기 때문에, 소리_내기 메서드를 오버라이딩하여 각각의 동물이 소리를 내도록 할 수 있습니다.

class 동물:
    def 소리_내기(self):
        print("동물 소리")

class (동물):
    def 소리_내기(self):
        print("멍멍!")

class 고양이(동물):
    def 소리_내기(self):
        print("야옹!")

이제 고양이 객체를 생성하고 소리_내기 메서드를 호출해보면, 각각의 동물이 정확한 소리를 내는 것을 확인할 수 있습니다.

개객체 = ()
개객체.소리_내기()  # 출력: 멍멍!

고양이객체 = 고양이()
고양이객체.소리_내기()  # 출력: 야옹!

다형성

다형성은 동일한 이름의 메서드가 다양한 객체에 의해 서로 다른 방식으로 동작할 수 있는 능력을 의미합니다. 파이썬은 동적 타이핑 언어로, 변수의 타입이 실행 시간에 결정되기 때문에 다형성을 지원하기에 적합한 언어입니다. 이는 객체 지향 프로그래밍에서의 유연성과 재사용성을 높여줍니다.

다형성을 이용하면, 같은 메서드를 호출하지만 각각의 객체에 따라 다른 결과를 얻을 수 있습니다. 위의 예시에서 소리_내기 메서드를 호출할 때, 개 객체와 고양이 객체 모두 동일한 메서드를 호출하지만 각각 다른 결과를 출력합니다. 이는 다형성의 한 예입니다.

또한, 파이썬은 다중 상속을 지원하기 때문에 여러 개의 클래스에서 동시에 상속을 받을 수 있습니다. 이렇게 상속받은 클래스들은 각각의 메서드를 가지고 있을 수 있으며, 다중 상속을 통해 더욱 다양한 기능을 구현할 수 있습니다.

class (동물, 집에서_기르기):
    def 소리_내기(self):
        print("멍멍!")

class 고양이(동물, 집에서_기르기):
    def 소리_내기(self):
        print("야옹!")

위의 예시에서 고양이 클래스는 동물 클래스와 집에서_기르기 클래스를 동시에 상속받았습니다. 따라서 고양이 객체는 부모 클래스들의 속성과 메서드들을 모두 사용할 수 있으며, 필요에 따라 재정의할 수도 있습니다.

메서드 오버라이딩과 다형성은 파이썬에서 객체 지향 프로그래밍을 지원하는 강력한 기능입니다. 이를 적절히 활용하면 유연하고 재사용 가능한 코드를 작성할 수 있으며, 코드의 가독성과 유지보수성을 높일 수 있습니다.