[파이썬] 추상 클래스의 개념과 사용법

추상 클래스는 상속 관계를 통해 공통 기능을 제공하는데 사용되는 클래스입니다. 추상 클래스는 자체적으로 객체를 생성할 수 없으며, 이를 상속받은 서브 클래스에서 구체적인 구현을 제공해야 합니다. 추상 클래스를 정의하는 것은 해당 클래스에 @abstractmethod 데코레이터를 사용하여 메소드를 추상 메소드로 선언하는 것을 포함합니다.

추상 클래스의 생성

파이썬에서 추상 클래스를 생성하려면 abc 모듈을 import해야 합니다. abc 모듈은 추상 클래스를 정의하는데 필요한 클래스와 데코레이터를 제공합니다.

from abc import ABC, abstractmethod

class AbstractClass(ABC):
    @abstractmethod
    def abstract_method(self):
        pass

위 예제에서는 ABC 클래스를 상속받고, abstractmethod 데코레이터로 선언된 추상 메소드 abstract_method를 가지는 AbstractClass를 정의했습니다. 이 추상 메소드는 구현이 없이 단순히 pass로만 되어 있습니다.

추상 클래스의 상속 및 구현

추상 클래스를 상속받은 서브 클래스에서는 추상 메소드를 반드시 구현해야 합니다. 그렇지 않으면 서브 클래스 역시 추상 클래스가 되며, 객체를 생성할 수 없게 됩니다.

class ConcreteClass(AbstractClass):
    def abstract_method(self):
        print("ConcreteClass의 구현된 메소드")

concrete_instance = ConcreteClass()
concrete_instance.abstract_method()

위 예제에서는 ConcreteClass라는 추상 클래스를 상속받고, 추상 메소드 abstract_method를 구현했습니다. 이로써 ConcreteClass는 구체적인 구현을 가지게 되고, 객체를 생성하여 해당 메소드를 호출할 수 있습니다.

추상 클래스의 활용

추상 클래스는 공통 기능(메소드)을 추상화하여 일반화된 코드 구조를 제공하는데 활용됩니다. 이를 통해 코드의 재사용성과 유지 보수성을 향상시킬 수 있습니다. 추상 클래스는 다중 상속과 함께 사용하여 다양한 서브 클래스를 작성할 수도 있습니다.

class BaseClass(ABC):
    @abstractmethod
    def perform_action(self):
        pass

class SubClass1(BaseClass):
    def perform_action(self):
        print("SubClass1의 구현된 메소드")

class SubClass2(BaseClass):
    def perform_action(self):
        print("SubClass2의 구현된 메소드")

class FinalClass(SubClass1, SubClass2):
    pass

final_instance = FinalClass()
final_instance.perform_action()

위 예제에서는 BaseClass라는 추상 클래스를 정의하고, perform_action 메소드를 추상 메소드로 선언했습니다. 이를 상속받은 SubClass1SubClass2에서는 추상 메소드를 구현하고, 다중 상속을 통해 이들을 결합한 FinalClass를 정의했습니다. FinalClassSubClass1SubClass2의 구현된 메소드를 모두 가지게 됩니다.


추상 클래스는 객체지향 프로그래밍에서 중요한 개념으로서, 공통된 기능을 제공하는 클래스를 효과적으로 작성하는데 활용됩니다. 추상 클래스를 사용하면 코드의 일관성과 재사용성을 높일 수 있으며, 코드의 유지보수성을 향상시킬 수 있습니다.