v3까지 설계한 것은 구조적으로 좋은 설계이다.
하지만 개발자들 입장에서는 항상 ModelView 객체 생성 반환해야해서 좀 번거롭다.
이를 좀 더 단순화하기 위해 코드를 변경해보겠다.
이전 코드: yeonyeon.tistory.com/105
이번 글은 코드 전문을 공개하기보다 어느 부분이 어떻게 바뀌었는지 위주로 짚어보겠다.
이번 수정 포인트는 Controller에서 매번 ModelView 객체를 생성하고 반환하는 작업이 번거롭다는 것이다.
만약 간단하게 이름만 보내는 형식으로 사용한다면?
포인트는 Controller의 함수인 process 함수의 반환 타입이다.
public interface ControllerV4 {
/*
* @param paramMap
* @param model
* @return viewName
*/
String process(Map<String, String> paramMap, Map<String, Object> model);
}
- 기존에 ModelView 형태로 반환하던 것을 단순히 String 형태로 반환
- Map을 추가해 model을 파라미터로 사용
Controller interface가 위와 같이 변함에 따라 Controller는 다음의 변화를 겪는다.
- ModelView 객체를 만들고 반환하던 과정 생략
- return 형태가 String으로 변환됨으로써 viewName을 직접 반환
- Member에 대한 데이터는 파라미터로 추가한 model에 저장
Front Controller의 로직도 살짝 변화가 생긴다.
- ModelView를 생성한 뒤, process 값을 받아서 값을 꺼낼 필요가 없음
- viewName을 바로 받아서 사용
아직도 개선사항은 있다.
바로 process가 interface로 규정되어있다보니 파라미터의 형식과 개수를 맞춰야한다는 점
interface를 다른 종류로 바꾸자니 front controller에 다음과 같이 선언되어 있다.
private Map<String, ControllerV4> controllerMap = new HashMap<>();
(키, 값)이 (String, ControllerV4) 타입으로 고정되어 있다.
ControllerV4 외에 ControllerV3, V2, V1 등등 하나만 선택할 수는 있지만 여러 버전을 다 사용할 수는 없다.
= '호환'이 불가능하다
이를 개선하기 위해서는 어댑터를 사용한다.
어댑터 패턴을 이용해 front controller가 다양한 방식의 controller를 사용할 수 있도록 개선해보겠다.
본 게시글은 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의를 구매 후 정리하기 위한 포스팅입니다.
내용을 임의로 추가, 수정, 삭제한 부분이 많으며 정확한 이해를 위해서 강의를 구매하시는 것을 추천 드립니다.
'Develop > Java' 카테고리의 다른 글
[Java] Collections와 Map (1) | 2021.05.21 |
---|---|
[MVC] 어댑터 추가 (0) | 2021.05.19 |
[MVC] Model 분리 (0) | 2021.05.11 |
[MVC] View 분리 (0) | 2021.05.10 |
[MVC] 프론트 컨트롤러 패턴 (2) | 2021.05.10 |