Python ABC
python ABC(Abstract Base Class) 추상화 클래스
python 의 ABC 클래스는 Base 클래스를 상속받는 파생 클래스가 반드시 Base 클래스의 메서드를 명시적으로 선언해서 구현하도록 강제하는 추상화 클래스 기능
이 기능의 필요성을 이해 하기위해 상속과 다형성에 대한 이해가 필요.
OOP 의 가장 강력한 기능 중 하나인 상속(Inheritance)은 클래스의 재사용성을 높임으로서,
코드의 반복에 따른 유지 보수 비용을 낮추는데 큰 역할을 하였다.
이러한 상속의 개념과 함께 OOP 의 가장 중요한 특징 중 하나가 바로 다형성(Polymorphism) 이다.
다형성(Polymorphism)
다형성이란, 하나의 인터페이스를 통해 서로 다른 여러 타입을 제공하는 것을 의미한다.
보통 OOP 에서 말하는 다형성은 클래스에 선언된 메서드가 상속 받은 클래스에서 같은 이름으로 오버라이딩 되어 여러 형태로 동작함을 의미한다.
이런 다형성을 이용한 추상화를 구현하는 경우 반드시 주의해야 할 부분이 있다.
바로 코드 유지보수에 대한 부분인데, 형태가 간단한 클래스는 문제가 되지 않지만, 클래스에 선언된 메서드가 많으면 이를 일일히 관리하기가 쉽지 않은게 현실이다
이러한 상황에서 ABC 클래스가 도움이된다.
ABC (Abstract Base Class)
메서드에 데코레이터로 @abstractmethod 를 선언해 주면 된다.
해당 데코레이터를 적용하게 되면, Class를 상속받는 모든 파생 클래스에서 해당 메서드를 선언해서 구현하지 않으면, 에러를 발생시키게 된다.
ABC를 사용하는 것과 NotImplementedError 를 메서드마다 선언해 놓는것과 차이
-
- abc 클래스를 이용하게 되면, 해당 BaseClass 는 인스턴스화 될 수 없다. 단지 파생 클래스 구현을 위한 추상화 기능 제공 역할을 하게 될 뿐
-
- abc 클래스를 이용하게 될 경우 에러 발생 시점이 다름
메서드에 raise를 이용해 NotImplementedError 를 선언해 놓은 경우에는 런타임 상황에서 해당 메서드가 실제로 호출이 되는 시점에 에러를 발생시키게 되지만,
abc 를 이용하는 경우에는 해당 모듈이 import 되는 순간부터 에러를 발생시키게 된다.
즉, abc 클래스를 이용하는 경우 조금 더 strict 한 모듈 관리가 가능해 진다는 점이다.
출처 : https://bluese05.tistory.com/61