ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [java] 디자인패턴 - Adapter
    JAVA 2021. 8. 11. 23:59

    Adapter 정의


    어댑터 패턴은 이름대로 어댑터처럼 사용되는 패턴이다. 220V 를 사용하는 한국에서 쓰던 기기들을, 어댑터를 사용하면 110V 를 쓰는곳에 가서도 그대로 쓸 수 있다. 이처럼, 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해주는 패턴이 어댑터 패턴이라고 할 수 있겠다. 

     

     

    Client
    써드파티 라이브러리나 외부시스템을 사용하려는 쪽이다.

     

    Adaptee
    써드파티 라이브러리나 외부시스템을 의미한다.

     

    Target Interface
    Adapter 가 구현(implements) 하는 인터페이스이다. 클라이언트는 Target Interface 를 통해 Adaptee 인 써드파티 라이브러리를 사용하게 된다.

     

    Adapter
    Client 와 Adaptee 중간에서 호환성이 없는 둘을 연결시켜주는 역할을 담당한다. Target Interface 를 구현하며, 클라이언트는 Target Interface 를 통해 어댑터에 요청을 보낸다. 어댑터는 클라이언트의 요청을 Adaptee 가 이해할 수 있는 방법으로 전달하고, 처리는 Adaptee 에서 이루어진다.

     

    클라이언트에서는 Target Interface 를 호출하는 것 처럼 보인다. 하지만 클라이언트의 요청을 전달받은 (Target Interface 를 구현한) Adapter 는 자신이 감싸고 있는 Adaptee 에게 실질적인 처리를 위임한다. Adapter 가 Adaptee 를 감싸고 있는 것 때문에 Wrapper 패턴이라고도 불린다.

     

     

     

     

    어댑터 패턴 사용예제


    역할 클래스or인터페이스
    Client AdapterDemo
    Target Interface WebRequester
    Adapter WebAdapter
    Adaptee FancyRequester

     

     

    Client

    public class AdapterDemo {
        public static void main(String[] args) {
            WebAdapter adapter = new WebAdapter(new FancyRequester());
            WebClient client = new WebClient(adapter);
            client.doWork();
        }
    }

    FancyRequester 가 동작하는 것을 확인할 수 있다.

     

     

    Target Interface

    public interface WebRequester { void requestHandler(); }

     

    구현체를 가지지 않고 requestHandler() 메소드에 대한 정의만 되어있다.

     

     

    Adapter

    public class WebAdapter implements WebRequester {
        private FancyRequester fancyRequester;
    
        public WebAdapter(FancyRequester fancyRequester) {
            this.fancyRequester = fancyRequester;
        }
    
        @Override
        public void requestHandler() {
            fancyRequester.fancyRequestHandler();
        }
    }

    Target Interface 인 WebRequester 인터페이스를 구현.

    인스턴스 생성시 adaptee 인 FancyRequester 클래스를 주입한다.

     

     

    Adaptee

    public class FancyRequester {
        public void fancyRequestHandler() {
            System.out.println("Yay! fancyRequestHandler is called!");
        }
    }

     

     

     

    출처: https://niceman.tistory.com/141

    ​출처2: https://yaboong.github.io/design-pattern/2018/10/15/adapter-pattern/

    'JAVA' 카테고리의 다른 글

    [mybatis] 스코프와 생명주기  (0) 2021.08.12
    [mybatis] Mapper xml의 쿼리문과 매핑 원리  (0) 2021.08.12
    [mybatis] Persistence Framework  (0) 2021.08.11
    jsp:액션태그,우편번호API  (0) 2021.08.10
    [spring] tiles: 동적배치  (0) 2021.08.10

    댓글

Designed by Tistory.