ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.