C#에서는 다중상속을 직접적으로 지원하지 않지만 인터페이스를 통해 다중상속을 구현할 수는 있다.
파이썬에서는 다중상속을 지원하지만 추상클래스와 인터페이스를 기본적으로 지원하지는 않는다.
파이썬에서 추상클래스와 인터페이스을 사용하지 않는 이유는
파이썬이 천줄내외의 대규모 프로젝트에서 사용하는 경우가 거의 없기에
대부분의 사용자들이 구현강제성의 필요성을 못느껴서이다.
따라서 이 글은 파이썬에서의 추상,인터페이스 권장이 아닌 단순한 사용법만을 정리해놓은 것이다.
추상과 인터페이스를 파이썬에서 사용하기 위해선
먼저 abc 모듈에서 ABC,abstractmethod를 import 받아야한다.
ABC 키워드는 부모클래스가 될 클래스에서 상속받아서 추상클래스의역할을 수행하도록 하며
인스턴스화 시킬 수 없게 한다.
@abstractmethod 는 하위 클래스에게 해당클래스의 메서드를 구현을 강제한다.
파이썬에서는 추상클래스와 인터페이스 키워드를 따로 나누어 놓은것은 아니며
어떻게 ABC,abstractmethod를 활용하는가에 따라 달라지는 것이다.
#추상클래스 사용법
class GuardWeapon(MeleeWeapon,ABC):
@abstractmethod
def guard(self):
pass
class Rance(GuardWeapon):
def guard(self):
print("막기")
#인터페이스 구현
class Parring:
@abstractmethod
def parring(self):
pass
class RangedWeapon(Weapon,Parring):
def parring(self):
print("패링")
사실 차이점이 거의 없긴하지만
추상클래스로 사용한 경우는 이외에도
다른 기능들을 함포한채로 자식 클래스에 상속시킨다.
인터페이스로 사용한 경우는 해당 기능만을
상속시키는 역할이다.
C#에서의 키워드간 명확한 차이점이 나타나진 않기에 이런 방식으로 사용된다. 정도로만 알면될 것 같다.