[python] 어댑터 디자인 패턴
어댑터 디자인 패턴은 상이한 인터페이스를 가진 클래스들을 함께 동작할 수 있도록 중간에서 변환해주는 패턴입니다. 이 패턴은 소프트웨어 개발에서 특히 다른 모듈이나 라이브러리와의 통합을 간단하게 만들어주는데 사용됩니다.
어댑터 디자인 패턴의 구조
어댑터 디자인 패턴은 다음과 같은 구조를 가집니다:
- Target: 목표로 하는 인터페이스를 정의하는 클래스입니다. 클라이언트는 이 인터페이스를 통해 Target 클래스와 통신합니다.
- Adapter: Target 인터페이스를 구현하면서 클라이언트가 사용하고자 하는 클래스를 감싸는 클래스입니다. 클라이언트는 Adapter 클래스를 통해 해당 클래스와 통신합니다.
- Adaptee: 어댑터가 변환해줘야 하는 인터페이스를 가진 클래스입니다.
어댑터 디자인 패턴의 예시
Python에서의 어댑터 디자인 패턴을 예시로 살펴보겠습니다. 가정해보자면, 현재 코드에서는 서드파티 라이브러리인 external_library
를 사용하고 있습니다. 하지만 내부적으로 우리의 코드는 internal_library
와의 인터페이스와 상호작용을 해야합니다.
class ExternalLibraryAdapter:
def __init__(self, external_library):
self.external_library = external_library
def do_something(self):
self.external_library.perform_action()
class InternalLibrary:
def perform_action(self):
print("Internal library action")
external_library = ExternalLibrary()
adapter = ExternalLibraryAdapter(external_library)
adapter.do_something()
위의 코드에서 ExternalLibrary
는 우리가 사용하고자 하는 인터페이스와 다른 인터페이스를 가지고 있습니다. 따라서 ExternalLibraryAdapter
를 사용하여 ExternalLibrary
와 InternalLibrary
를 연결시켜줍니다. 이렇게 함으로써 InternalLibrary
의 로직을 사용할 수 있습니다.
어댑터 디자인 패턴의 장점
어댑터 디자인 패턴은 다음과 같은 장점을 제공합니다:
- 코드 재사용: 다른 인터페이스를 가진 클래스들을 쉽게 통합할 수 있습니다.
- 유연성: 어댑터 클래스를 통해 여러 가지 다른 모듈이나 라이브러리를 쉽게 전환할 수 있습니다.
- 테스트 용이성: 어댑터 클래스는 테스트 가능한 코드를 작성할 수 있도록 해줍니다.
어댑터 디자인 패턴의 결론
어댑터 디자인 패턴은 다른 인터페이스를 가진 클래스들을 통합하는 데 유용한 패턴입니다. 상이한 인터페이스를 가진 모듈이나 라이브러리를 함께 동작시키기 위해 사용할 수 있으며, 코드의 재사용성과 유연성을 높일 수 있습니다.
더 자세한 내용은 다음을 참고하세요:
class ExternalLibrary:
def perform_action(self):
print("External library action")