• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

인자로 전달되는 request, response 객체는 참조값으로 공유되는건가요?

24.04.07 17:51 작성 24.04.07 17:51 수정 조회수 86

0

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

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

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

[질문 내용]
FrontControllerServletV2 에서 호출한 MemberListControllerV2 인스턴스 내부에서 인자로 받은 요청 객체에 members 값을 setAttribute 로 설정한것을 봤습니다.

 

이후 해당 인스턴스에서 반환한 MyView 객체를 통해 render를 수행하던데, 이때 req 에는 MemberListControllerV2에서 요청객체에 설정했던 members 값이 들어가는 것 같던데

 

원리가 무엇인가요?.. 저는 요청,응답 객체를 다른 인스턴스에 인자로 전달(복사)한다고 생각했습니다. 어떻게 frontControllerServletV2에서 MemberListControllerV2 에서 설정한 members 객체를 사용할 수 있는 건가요?

답변 2

·

답변을 작성해보세요.

0

안녕하세요. 김동현님

request 객체는 고객이 요청이 올 때 하나 만들어져서 고객의 요청이 응답으로 나갈때 까지 유지됩니다.

따라서 request 인스턴스가 x001의 참조를 가진다고 하면

MemberListControllerV2에서 x001 참조의 request 인스턴스에 members를 저장해두고,

frontControllerServletV2에서 x001 참조의 request 인스턴스에 있는 members의 값을 꺼내서 사용하게 됩니다.

만약 이 내용이 이해가 어렵다면 자바 기본편을 학습하는 것을 권장드립니다.

감사합니다.

김동현님의 프로필

김동현

질문자

2024.04.11

이해되었습니다 답변 감사합니다!

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.07

안녕하세요, 인프런 AI 인턴입니다.

김동현님, 요청(request)과 응답(response) 객체가 여러 컨트롤러나 뷰 사이에서 어떻게 공유되는지에 관한 질문이신 것 같습니다. 이와 관련하여, 두 개의 질문과 답변이 김동현님의 궁금증을 해소하는 데 도움이 될 것 같습니다.

첫 번째로, “HttpServletRequest 동일 인스턴스 질문” 링크에서는, HttpServletRequest 객체가 왜 같은 인스턴스로 확인되는지에 대한 질문입니다. 답변에 따르면 톰캣 같은 WAS(웹 애플리케이션 서버)는 하나의 요청을 처리할 때 동일한 요청 객체를 사용하여 성능을 향상시키고 있습니다. 이는 HttpServletRequest 객체가 컨트롤러 간에 참조값으로 공유되고 있다는 것을 의미합니다.

두 번째로, “V2에서 saveController 안에서 request.setAttrribute에 대한 궁금증” 링크에서는 saveController에서 요청 객체에 속성을 설정하고 다른 인스턴스에서 그 값을 어떻게 사용할 수 있는지에 대해 묻는 질문입니다. 답변에서는 Java의 참조 전달 방식 때문에 서로 다른 컨트롤러에서도 동일한 요청 객체(instance)에 접근할 수 있음을 설명합니다.

질문자님이 제시한 상황에서 MemberListControllerV2가 설정한 members 속성이 나중에 다른 곳에서도 사용될 수 있는 이유는 바로 HttpServletRequest 객체가 참조값을 통해 전달되기 때문입니다. 따라서 한 컨트롤러에서 요청 객체에 속성을 설정하면, 그 요청을 처리하는 요청의 생명주기 동안 같은 요청 객체에 대해 설정된 속성이 다른 컨트롤러나 뷰에서도 접근 가능한 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.