[6] 스프링 MVC (5) - 프론트 컨트롤러(FrontController) 패턴 -V4 / V5

김정욱·2021년 5월 4일
2

[6] 스프링 MVC

목록 보기
5/13
post-thumbnail

개요

  • MVC패턴에서 발생되는 많은 중복개선하기 위해 프론트 컨트롤러(FrontController) 패턴 도입
  • 공통된 부분을 처리해주는 FrontController로 중복을 줄일 수 있음
  • 점진적으로 개선
    • V1 : 프론트 컨트롤러(FrontController) 패턴 도입
    • V2 : view render를 처리해주는 MyView 도입
    • V3 : 서블릿(Servlet) 종속성 제거 / 뷰 리졸버(View Resolver) 도입으로 논리 뷰 이름 사용
    • V4 : V3 코드에서 반환타입논리 주소명으로 변경
    • V5 : 어댑터(Adapter) 패턴 도입으로 다양한 종류의 컨트롤러 처리
  • V5까지 점진적으로 개선시킨 구조실제 스프링 MVC의 핵심 구조와 동일

V4

[ 구조 & 설명 ]

  • 기존 V3 구조동일하며 각 ControllerModelView객체가 아닌 String 타입의 view path만 반환
    --> 매번 ModelView 객체를 return 하지 않아도 되서 덜 귀찮음
    --> 대신 ModelView를 사용하지 않기 때문model 정보를 저장하는 <String, Object> model필요!
    (V3와 큰 차이가 없으니 코드는 생략)

V5

[ 구조 ]

  • 다양한 종류의 인터페이스를 처리하기 위해 어댑터(Adapter) 패턴 추가
    • 핸들러(Handler)
      : 컨트롤러의 이름더 넓은 범위인 핸들러(Handler)변경
          --> 이제 어댑터(Adapter)가 있기 때문컨트롤러가 아닌 어떤것도 알맞게 처리할 수 있기 때문!
    • 핸들러 어댑터(Handler Adapter)
      : 중간에 어댑터(Adapter) 역할을 하는 인터페이스를 추가해서 다양한 컨트롤러를 호출하게 함

[ 코드 ]

( FrontControllerServletV5 )


( MyHandlerAdapter - Interface )

  • boolean supports(Object handler)
    : 어댑터(Adapter)가 해당 컨트롤러를 처리할 수 있는지 판단하는 메서드
  • MoydelView handle(HttpServletRequest req, HttpServletResponse resp, Object handler)
    : 어댑터(Adapter)를 통해서 실제 컨트롤러의 비즈니스 로직을 호출하는 메서드
    (이제 더이상 FrontController실제 Controller를 호출하지 않는다)

( ControllerV3HandlerAdapter )

  • (handler instanceof ControllerV3)
    : handlerControllerV3같은 인스턴스인지 검사

( ControllerV4HandlerAdapter )

  • (handler instanceof ControllerV4)
    : handlerControllerV4와 같은 인스턴스인지 검사
profile
Developer & PhotoGrapher

0개의 댓글