반응형
질문
파이썬에서 추상 클래스와 인터페이스의 차이점은 무엇인가요?
답변
가끔 다음과 같은 것을 볼 수 있습니다:
class Abstract1:
"""어떤 설명이 추상 클래스임을 알려주는 것,
종종 제공해야 할 메소드들을 나열합니다."""
def aMethod(self):
raise NotImplementedError("이것을 구현해야 합니다")
Python은 (그리고 필요하지도 않기 때문에) 형식적인 인터페이스 계약이 없기 때문에, 추상화와 인터페이스 사이의 Java 스타일의 구분은 존재하지 않습니다. 누군가 형식적인 인터페이스를 정의하는 노력을 거치면, 이것은 또한 추상 클래스가 될 것입니다. 유일한 차이점은 docstring에 명시된 의도일 것입니다.
또한, 덕 타이핑이 있는 경우 추상화와 인터페이스 간의 차이는 머리털을 가르는 것입니다.
Java는 다중 상속을 가지지 않기 때문에 인터페이스를 사용합니다.
Python은 다중 상속을 가지기 때문에 다음과 같은 것도 볼 수 있습니다.
class SomeAbstraction:
pass # 많은 내용 - 하지만 무언가 빠져 있음
class Mixin1:
def something(self):
pass # 한 가지 구현
class Mixin2:
def something(self):
pass # 다른 구현
class Concrete1(SomeAbstraction, Mixin1):
pass
class Concrete2(SomeAbstraction, Mixin2):
pass
이는 구체적인 하위 클래스를 생성하기 위해 믹스인과 함께 추상화된 슈퍼클래스의 종류를 사용합니다.
반응형
댓글