추상 클래스는 상속 관계를 통해 공통 기능을 제공하는데 사용되는 클래스입니다. 추상 클래스는 자체적으로 객체를 생성할 수 없으며, 이를 상속받은 서브 클래스에서 구체적인 구현을 제공해야 합니다. 추상 클래스를 정의하는 것은 해당 클래스에 @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
메소드를 추상 메소드로 선언했습니다. 이를 상속받은 SubClass1
과 SubClass2
에서는 추상 메소드를 구현하고, 다중 상속을 통해 이들을 결합한 FinalClass
를 정의했습니다. FinalClass
는 SubClass1
과 SubClass2
의 구현된 메소드를 모두 가지게 됩니다.
추상 클래스는 객체지향 프로그래밍에서 중요한 개념으로서, 공통된 기능을 제공하는 클래스를 효과적으로 작성하는데 활용됩니다. 추상 클래스를 사용하면 코드의 일관성과 재사용성을 높일 수 있으며, 코드의 유지보수성을 향상시킬 수 있습니다.