인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

혜림님의 프로필 이미지
혜림

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

단순하고 실용적인 컨트롤러 - v4

FrontControllerServletV4 와 model

해결된 질문

작성

·

288

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
FrontControllerServletV4에서 아래 코드 부분에서 model 을 직접 생성해 view에 넘겨주는데 model 은 controller.process 를 통해 controller 에 paramMap과 model 을 넘겨 model 값을 설정합니다. 그 후 다시 프론트 컨트롤러에서 model 정보도 같이 view로 render 해주는데 이때 model 의 값이 채워져있는건가요?

제가 생각하기로는 controller.process 를 통해 model 의 값이 채워지지만 viewName 만 반환해 결국 프론트 컨트롤러의 map 은 초기화 상태 그대로인것 같아서요:)

이러면 model 을 View 에 넘기는 것이 의미가 없지 않나요?

@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String requestURI = request.getRequestURI();
    ControllerV4 controller = controllerMap.get(requestURI);
    if (controller == null) {
        response.setStatus(HttpServletResponse.SC_NOT_FOUND);
        return;
    }

    Map<String, String> paramMap = createParamMap(request);
    Map<String, Object> model = new HashMap<>();
    String viewName = controller.process(paramMap, model);

    MyView view = viewResolver(viewName);

    view.render(model, request, response);
}


답변 1

2

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 박혜림님

프론트 컨트롤러에서 만든 model 객체의 참조를 controller.process로 실제 컨트롤러에 넘기고 있습니다.

객체의 참조를 넘겼기 때문에 다음과 같이 컨트롤러 안에서 model에 값을 담으면 프론트 컨트롤러가 참조하는 model에도 데이터가 담기게 됩니다.

model.put("members", members);

만약 이 부분이 잘 이해가 안된다면 자바 객체 참조에 대한 이해가 필요합니다.

자바 객체 참조에 대한 부분은 자바 기본편을 참고해주세요.

https://inf.run/i5fsN

감사합니다.

혜림님의 프로필 이미지
혜림
질문자

객체 참조를 알고 있었지만, 인지를 하지 못했습니다. 😂

이해하였습니다 영한님 감사합니다!

혜림님의 프로필 이미지
혜림

작성한 질문수

질문하기