디자인패턴

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