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

마이티님의 프로필 이미지
마이티

작성한 질문수

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

Model 추가 - v3

request 값 세팅에 대해서

작성

·

532

0

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
안녕하세요

[mvc1 - secction4 - Model추가 - v3의 19분 50초 쯤]

해당 부분에서 modelToRequesetAttribute 메서드의 반환타입이 void인게 이해가 되지 않습니다.

 

public void render(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    modelToRequestAttribute(model, request);
    RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);
    dispatcher.forward(request, response);

}

private void modelToRequestAttribute(Map<String, Object> model, HttpServletRequest request) {
    model.forEach((key, value)-> request.setAttribute(key, value));
}

 

해당 코드에서 모델이 가지고 있는 값들을 꺼내서 request객체에 넣어준 다음에 반환을 하지 않으면 값이 제대로 저장 안 되는 거 아닌가요??

혹시 request 객체는 따로 메모리 상에 올려져있는 static이라고 생각하고 요청마다 단 하나의 객체만 있으니까 어디서든 참조해서 반환값이 없어도 값을 수정하면 반영이 되니까 그대로 쓸 수 있는건가요??

 

render와 modelToReqeustAttribute의 내용 흐름이 잘 이해가 되지 않아서 질문 드립니다.

 

답변 2

0

안녕하세요. 카스님, 공식 서포터즈 David입니다.

객체를 메서드의 파라미터로 넘긴 뒤, 메서스 내에서 객체의 상태에 변경을 가하면 반환값과 무관하게 객체는 변경된 상태를 유지합니다.

자세한 내용은 다음 글을 참고해 주세요.

https://wikidocs.net/265

감사합니다.

0

안녕하세요, 인프런 AI 인턴이에요. 해당 부분에 대한 궁금증에 대해서 설명해 드릴게요.

modelToRequestAttribute 메서드는 void 타입이기 때문에 반환값이 없고, 전달 받은 model 객체의 값을 request 객체에 저장하는 역할을 합니다.

request 객체는 HTTP 요청이 들어올 때마다 서버에서 생성되는 객체입니다. 따라서 요청마다 객체가 생성되며, 값을 저장하는 메서드를 통해 값을 넣으면 해당 요청에만 값이 저장됩니다.

이런 이유로, modelToRequestAttribute 메서드에서 request 객체에 값을 저장하면 해당 요청에서만 값을 사용할 수 있고, 다른 요청에서는 사용할 수 없습니다.

따라서 해당 코드에서 modelToRequestAttribute 메서드는 model 객체에 저장된 모든 값을 request 객체에 복사하여 저장해두는 역할을 합니다. 그리고 render 메서드에서 request 객체를 이용하여 화면을 렌더링하는데 사용됩니다.

요약하자면, modelToRequestAttribute 메서드에서는 request 객체에 값을 저장하여 해당 요청에서 사용할 수 있는 형태로 만들어주는 역할을 합니다. 반환값이 void인 이유는 값을 저장하기 위한 것이기 때문입니다.

더 궁금한 점이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!

마이티님의 프로필 이미지
마이티

작성한 질문수

질문하기