본문 바로가기

WEB개발/Pattern

Adapter Pattern

 호환되지 않는 인터페이스를 사용하는 클라이언트를 그대로 활용할수 있다.

이렇게 함으로써 클라이언트와 구현된 인터페이스를 분리시킬수 있으며, 향후 인터페이스가 바뀌더라도 그 변경 내역

은 어댑터에 캡슐화 되기 때문에 클라이언트는 바뀔 필요가 없어진다.

 

 예를 들어보면 기존 시스템의 서버간 통신은 EJB, Socket(TCP/IP)를 사용중이 었으나 추가된 시스템은 Http통신이 필요하다.

 

 

 

 

public class HttpTransfer {
	public void doProcess() {
		System.out.println("doProcess call : " + this.getClass().getName());
	}
}



Transfer transfer = new HttpTransferAdapter(new HttpTransfer());
transfer.doProcess();
	
Transfer transfer1 = new EJBTransfer();
transfer1.doProcess();

>

doProcess call : adapter.HttpTransfer
doProcess call : adapter.EJBTransfer

 

 

HandlerAdapter (스프링 MVC)

 

HandlerAdapter는 스프링 MVC에서 컨트롤러를 처리하기 위해 사용됩니다. 스프링 MVC는 다양한 형태의 컨트롤러(예: Controller, HttpRequestHandler, Annotated Controller)를 지원하기 위해 어댑터 패턴을 사용합니다.

구조

  • 클라이언트: DispatcherServlet
  • 어댑터: HandlerAdapter 구현체
  • 구체적인 컨트롤러: 다양한 형태의 컨트롤러 (@Controller, SimpleControllerHandlerAdapter, 등)

구현 예

public interface HandlerAdapter {
    boolean supports(Object handler);

    ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;

    long getLastModified(HttpServletRequest request, Object handler);
}
// HandlerAdapter
HandlerAdapter ha = this.getHandlerAdapter(mappedHandler.getHandler()); 

...

mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

...

스프링 MVC는 다음과 같은 구현체를 제공합니다:

  • SimpleControllerHandlerAdapter: Controller 인터페이스를 구현한 컨트롤러를 처리.
  • HttpRequestHandlerAdapter: HttpRequestHandler를 구현한 컨트롤러를 처리.
  • RequestMappingHandlerAdapter: @RequestMapping 기반의 컨트롤러를 처리.

작동 방식

  1. DispatcherServlet은 HTTP 요청을 수신합니다.
  2. 해당 요청에 매핑된 컨트롤러를 확인합니다.
  3. 컨트롤러를 처리할 수 있는 적절한 HandlerAdapter를 찾습니다.
  4. 적절한 HandlerAdapter를 통해 컨트롤러를 실행하고 결과를 반환받습니다.

 

 


https://jusungpark.tistory.com/22

 

'WEB개발 > Pattern' 카테고리의 다른 글

Proxy Pattern  (0) 2021.09.24
[PATTERN] Producer - Consumer  (0) 2021.08.27
DelegationPattern  (0) 2021.07.13