-
Adaptor 패턴이란?디자인패턴 2024. 3. 7. 00:01
Adaptor란 무엇인가?
일반적으로 어댑터는 다른 전기나 기계 장치를 서로 연결해서 작동할 수 있도록 만들어주는 결합 도구입니다.
일상생활에서는 110V를 220V로 변환해주는 어댑터를 활용하거나 휴대폰을 220V 콘센트에 바로 연결할 수 없기 때문에 충전기라는 어댑터를 활용합니다.
소프트웨어에서는 Port and Adaptor라는 개념으로도 자주 등장합니다.
공통점은 내가 바로 제어할 수 없는것을 한단계 Layer를 통해 제어할 수 있도록 만든다는 것입니다.
Adaptor 패턴 구조
코드를 통하여 바로 살펴보겠습니다.
class AdaptorPatternTest { /** * Adapter 가 구현하는 인터페이스 * Client Interface : 클라이언트가 접근해서 사용할 고수준의 어댑터 모듈 * */ interface Target{ fun operation() } /** * Adapter : Client 와 Adaptee(Service) 중간에서 호환성이 없는 둘을 연결시켜주는 역할을 담당. * */ class Adaptor( private val adaptee: `제어할 수 없는 외부 클래스`, ): Target{ override fun operation() { println(adaptee.specificOperation()) } } /** * Adaptee : 클라이언트에서 사용하고 싶은 기존의 서비스 (하지만 호환이 안되서 바로 사용 불가능) */ class `제어할 수 없는 외부 클래스`{ fun specificOperation() = "특정 함수 호출" } @Test fun `Adaptor 패턴 활용해보기`(){ val target: Target = Adaptor(`제어할 수 없는 외부 클래스`()) target.operation() // 특정 함수 호출 } }
기존의 클래스를 수정하지 않고 새로운 인터페이스에 맞게 호환작업을 중계해줄 수 있습니다.
Port & Adaptor
interface Port{ fun operation() }
Target을 Port개념으로 치환하면 헥사고날 아키텍처에서 말하는 Port & Adpator 패턴을 적용해볼 수도 있습니다.
참고자료
https://refactoring.guru/ko/design-patterns/adapter
https://medium.com/idealo-tech-blog/hexagonal-ports-adapters-architecture-e3617bcf00a0
'디자인패턴' 카테고리의 다른 글
Delegate Pattern이란 (0) 2024.03.03 컴포지트 패턴이란? (0) 2024.02.26 템플릿 메소드 패턴이란? (0) 2024.02.10