파이썬 추상 클래스 , 추상화 정리 - Abstract class

반응형

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()

추상 클래스는 인스턴스로 만들 수가 없습니다.

추상 클래스는 인스턴스를 만들 수 없으니 추상 메서드도 호출할 일이 없기 때문이죠.

 

추상 클래스는 인스턴스로 만들 때는 사용하지 않으며 오로지 상속에만 사용합니다. 

그리고 파생 클래스에서 반드시 구현해야 할 메서드를 정해줄 때 사용합니다.

 

 

추상 클래스를 정의할 때 추상 클래스의 이름을 잘 짓는 것이 정말 중요한 부분같아요.

상위 카테고리의 이름을 정해준다는 느낌으로 지어야 나중에 헷갈리지 않습니다.

추상 클래스의 이름과 주석으로 설명을 달아주는 것도 잊지 말아야 할거 같습니다.

 

 

 

 

반응형