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

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

기존 V3 구조와 동일하며 각 Controller는 ModelView객체가 아닌 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)
: handler가 ControllerV3와 같은 인스턴스인지 검사
( ControllerV4HandlerAdapter )

(handler instanceof ControllerV4)
: handler가 ControllerV4와 같은 인스턴스인지 검사