디자인패턴
Adaptor 패턴이란?
Junuuu
2024. 3. 7. 00:01
728x90
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