• 정의

    • Python에서는 단순한 상속 만으로도 추상 클래스와 유사하게 구현을 할 수 있는데 말이다. 그 이유는 단순한 상속보다 좀 더 엄격(strict)하게 하기 위함이다. 위의 abstractmethod를 구현하지 않으면 에러를 터트리므로 어느정도의 강제성을 부과할 수 있다. 이로써 프로그램을 안정적으로 실행시킬 수 있는 것이다.

    • 다른 언어들은 다중 상속 지원X. Python은 다중 상속 지원.

      Interface를 사용할 필요가 없다. 추상 클래스를 여러개 만들어 사용하면 된다.

  • 예제

    1. abc 모듈에 있는 모든 요소를 import.
    from abc import *
    

    아래 코드를 보면 Flyable의 메타클래스로 ABCMeta를 장착

    fly라는 추상 메서드를 선언한 것을 볼 수 있다.

    그리고 Airplane클래스는 Flyable클래스를 상속받았고 fly함수를 호출했다. 에러가 발생했다. 왜일까? 그 이유는 부모의 추상 메서드인 fly함수를 구현하지 않았기 때문이다.

    class Flyable(metaclass=ABCMeta):
        @abstractmethod
        def fly(self): ...
    
    class Airplane(Flyable):
    		...
    
    airplane = Airplane()
    airplane.fly() # TypeError: Can't instantiate abstract class Airplane with abstract method fly
    

    아래 코드와 같이 fly함수를 구현해주면 정상적으로 코드가 동작하는 것을 알 수 있다.

    class Flyable(metaclass=ABCMeta):
        @abstractmethod
        def fly(self): ...
    
    class Airplane(Flyable):
        def fly(self):
            print('fly~~')
    
    airplane = Airplane()
    airplane.fly()  *# "fly~~"*