V4
앞서 만든 컨트롤러는 서블릿의 종속성도 벗어나고 뷰의 경로의 중복도 제거하는 등 잘 설계된 컨트롤러다.
근데 약간 아쉬운게 개발자가 항상 ModelView를 리턴해줘야한다는게 조금 아쉽다
그래서 V4는 개발하는데 좀더 실용성있게 만들어 보자.
넘겨줄떄 모델도 같이 넘겨준다.
논리이름만 반환하면 된다.
V5
근데 만약 어떤 개발자는 v3 를 쓰고 싶어하고 어떤개발자는 v4를 쓰고 싶다면 어떻게 해야할까?
controllerV3 와 controllerV4는 엄연히 다른 컨트롤러이다.
따라서 둘이 호환이안된다(return 값도 다르고 파라미터도 다름)
이럴떄 사용하는 것이 어댑터이다.
어댑터를 사용해서 프론트 컨트롤러가 다양한 방식의 컨트롤러를 처리할 수 있도록 만들어 보자.
- 핸들러 어댑터
중간에 어댑터역할을 해주는 어댑터가 추가되었는데 여기서 어댑터역할을 해주는 덕분에 다양한 종류의 컨트롤러를 호출할 수 있다.
- 핸들러
컨트롤러의 이름을 더 넓은 범위인 핸들러로 변경해주었다.
그 이유는 어댑터만 있으면 어떠한 것이든 해당하는 종류의 어댑터만 있으면 처리할 수 있기 때문이다.
- boolean supports(Object handler)
handler는 어댑터를 말하고 해당 어댑터가 핸들러를 처리할수있는지 판단하는 메서드이다.
- ModelView handle(HttpServletRequest request, HttpServletResponse response, Object handler)
이제는 어댑터를 통해서 컨트롤러가 호출이된다. 그리고 그 결과로 ModelView를 반환받는다.
이떄 만약 실제 컨트롤러가 ModelView를 반환하지 않으면 어댑터에서 ModelView를 생성해서 프론트 컨트롤러로
넘겨줘야한다.(어댑터의 진가)
※ V3 어댑터
분석해보자.
handler가 ControllerV3인지 판단하는 메서드
ControllerHandlerV4Adapter를 추가한것(아래)