[python] 상속과 다형성이 없는 언어에서의 객체 지향 프로그래밍

객체 지향 프로그래밍은 코드를 모듈화하고 재사용성을 높이기 위한 방법으로, 상속다형성은 객체 지향 프로그래밍의 주요한 특징 중 하나입니다. 그러나, 상속과 다형성이 없는 언어에서도 객체 지향 프로그래밍을 구현하는 것이 가능합니다.

객체 지향 프로그래밍이란?

객체 지향 프로그래밍은 데이터와 해당 데이터를 처리하는 메서드를 하나의 논리적인 단위인 “객체”로 캡슐화합니다. 캡슐화된 객체는 서로 메시지를 주고받으며 상호작용하고, 이를 통해 프로그램이 동작합니다.

상속의 대안

상속을 대체할 방법으로는 컴포지션이나 델리게이션을 활용할 수 있습니다. 컴포지션이란, 다른 클래스의 인스턴스를 자신의 인스턴스 변수로 포함하여 재사용성을 높이는 방법입니다. 델리게이션은 객체 내부의 메서드 호출을 다른 객체로 위임하는 것을 의미합니다.

class Engine:
    def start(self):
        pass

    def stop(self):
        pass

class Car:
    def __init__(self):
        self.engine = Engine()

    def start(self):
        self.engine.start()

    def stop(self):
        self.engine.stop()

위 코드에서 Car 클래스는 상속 대신 Engine 클래스의 인스턴스를 포함하여 기능을 수행하고 있습니다.

다형성의 대안

다형성을 대체하는 방법으로는 인터페이스전략 패턴을 사용할 수 있습니다. 인터페이스를 활용하면 객체가 특정한 메서드를 구현하도록 보장할 수 있으며, 전략 패턴을 사용하면 객체가 실행 시에 특정한 알고리즘을 선택할 수 있습니다.

class Flyable:
    def fly(self):
        pass

class Bird(Flyable):
    def fly(self):
        print("Flying")

class Airplane(Flyable):
    def fly(self):
        print("Taking off")

위 코드에서, Flyable 인터페이스를 구현한 BirdAirplane 클래스는 각각 다른 방식으로 fly 메서드를 구현하고 있습니다.

결론

상속과 다형성은 객체 지향 프로그래밍의 강력한 기능이지만, 이러한 기능이 없는 언어에서도 객체 지향적인 설계와 프로그래밍이 가능합니다. 컴포지션, 델리게이션, 인터페이스, 전략 패턴과 같은 기법을 익히고 적절히 활용함으로써 객체 지향적인 코드를 작성할 수 있습니다.

참고 자료