👉 자세히 말해보자면,
자식 클래스에서 메서드 구현이 되어있지 않으면 오류를 발생시킨다. 이러한 특성 때문에 프로그램을 표준화하기 용이하고 유지보수도 쉽다.
코드를 통해 자세한 내용을 살펴보자.
지난 포스팅(클래스와 인스턴스의 차이)에서 사용했던 와플 예제를 재사용해보겠다.
from abc import * # 상속 클래스
# 부모클래스
class WaffleBase(metaclass=ABCMeta):
@abstractmethod
def 반죽하기(self):
pass
@abstractmethod
def 굽기(self):
pass
# 자식클래스
class Waffle(WaffleBase):
def 반죽하기(self):
print('밀가루로 반죽을 합니다.')
strawberry_waffle = Waffle()
strawberry_waffle.반죽하기()
이렇게 작성하면 에러가 발생한다.
왜냐하면 부모클래스에서 @abstractmethod
로 작성된 메서드가 반죽하기
, 굽기
총 2개인데
자식클래스에서 딱 하나만 만들어줬기 떄문에 에러가 발생한다.
즉, 데코레이터로 @abstractmethod
가 붙어있는 메서드들은 자식클래스에서 꼭 만들어줘야 한다.
(추가)
추상클래스는 객체를 만들 수 없다. 오로지 상속만을 위한 기능이기 때문에 호출을 받을 일이 없기 때문이다.
그래서 pass를 사용하여 보통 빈 메서드로 둔다.
원래는 super().메서드명()
을 이용해 오버라이딩(재정의) 할 수 있음