
MVC패턴에서발생되는 많은 중복을개선하기 위해프론트 컨트롤러(FrontController) 패턴 도입공통된 부분을 처리해주는FrontController로 중복을 줄일 수 있음점진적으로 개선
V1:프론트 컨트롤러(FrontController) 패턴 도입V2:view render를 처리해주는MyView 도입V3:서블릿(Servlet) 종속성 제거/뷰 리졸버(View Resolver) 도입으로 논리 뷰 이름 사용V4:V3 코드에서반환타입을논리 주소명으로 변경V5:어댑터(Adapter) 패턴 도입으로다양한 종류의 컨트롤러 처리
V5까지 점진적으로 개선시킨 구조는실제 스프링 MVC의 핵심 구조와 동일
기존 V3 구조와동일하며각 Controller는ModelView객체가 아닌String 타입의 view path만 반환
-->매번 ModelView 객체를 return 하지 않아도 되서덜 귀찮음
--> 대신ModelView를 사용하지 않기 때문에model 정보를 저장하는<String, Object> model이필요!
(V3와 큰 차이가 없으니 코드는 생략)
다양한 종류의 인터페이스를 처리하기 위해어댑터(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와 같은 인스턴스인지 검사