Django 를 사용해 개발을 하다보면 Abstract class , 추상화와 추상 클래스에 관련된 내용을 자주 볼 수 있다.
늘 애매하게 알고 넘어갔던 부분이라 이 부분에 대해서 확실히 정리를 하고 넘어가야겠다.
추상화
기본적으로 추상화라는 개념은 사용자로부터 프로세스 또는 메서드의 내부 구현을 숨기는 데 중점을 둡니다.
따라서 사용자는 자신이 무엇을 하고 있는지 알지만 , 어떤 방식으로 구현되는지 구체적으로 알 수 없습니다.
먼저 추상 클래스를 만들려면 import로 abc 모듈을 가져와야 합니다( abc는 abstract base class의 약자입니다).
그리고 클래스의 ( )(괄호) 안에 metaclass=ABCMeta를 지정하고, 메서드를 만들 때 위에 @abstractmethod를 붙여서 추상 메서드로 지정합니다.
from abc import *
class 추상클래스이름(metaclass=ABCMeta):
@abstractmethod
def 메서드이름(self):
코드
추상 클래스를 상속받았다면 @abstractmethod가 붙은 추상 메서드를 모두 구현해야 합니다.
다음과 같이 Student에서 go_to_school 메서드도 구현해줍니다.
from abc import *
class StudentBase(metaclass=ABCMeta):
@abstractmethod
def study(self):
pass
@abstractmethod
def go_to_school(self):
pass
class Student(StudentBase):
def study(self):
print('공부하기')
def go_to_school(self):
print('학교가기')
james = Student()
james.study()
추상 클래스는 인스턴스로 만들 수가 없습니다.
추상 클래스는 인스턴스를 만들 수 없으니 추상 메서드도 호출할 일이 없기 때문이죠.
추상 클래스는 인스턴스로 만들 때는 사용하지 않으며 오로지 상속에만 사용합니다.
그리고 파생 클래스에서 반드시 구현해야 할 메서드를 정해줄 때 사용합니다.
추상 클래스를 정의할 때 추상 클래스의 이름을 잘 짓는 것이 정말 중요한 부분같아요.
상위 카테고리의 이름을 정해준다는 느낌으로 지어야 나중에 헷갈리지 않습니다.
추상 클래스의 이름과 주석으로 설명을 달아주는 것도 잊지 말아야 할거 같습니다.