728x90
참조 변수
프로그래밍에서 변수가 다른 변수나 데이터 구조에 대한 참조를 가지고 있는 변수를 말함
참조 변수의 특징
- OOP(객체 지향 프로그래밍) 에서 특히 JAVA에서 좋아하는 기법
- return 값이 2개 이상이 불가능하기 때문에 발달한 기법 (즉, 객체로 저장해서 return 값을 보낸다는 뜻)
실습
@RequestMapping("/test")
public String test(VO vo, Model model) {
System.out.println("vo : " + vo);
model.addAttribute("apple", vo.getId());
return "test";
}
Q. 자바에서 파라미터로 사용하는 변수를 보통 '지역변수'라고 하는데 그럼 Model 객체도 지역변수니까 메소드가 종료되면 사라지지 않나요 ? 그니까 위의 코드를 아래와 같이 커맨드 객체인 Model을 삭제하면 View에서 사용할 수 없지 않나요 ?
CTRL.java
@RequestMapping("/test")
public String test(VO vo) {
System.out.println("vo : " + vo);
return "test";
}
일반적으로 Controller에서 View로 이동할 때 Model 객체(대부분)를 활용하여 데이터를 전달한다
하지만 Model 객체를 삭제해도 값의 전달은 가능하다 그 이유는 스프링 컨테이너가 'new' 해준 객체가 커맨드 객체이기 때문에 개발자가 객체를 관리하는 것이 아닌 컨테이너가 객체를 대신 관리해주게 된다 이것을 '참조 변수'라고 한다
따라서 Model 객체 없이도 View에서 값을 사용할 수 있게 된다
또한, View에서 객체명을 지정하여 사용하고 싶다면 Controller에서 @ModelAttribute 를 통해 이름을 지정하여 해당 이름으로 View에서도 값을 사용할 수 있다
CTRL.java
@RequestMapping("/test")
public String test(@ModelAttribute("a")VO vo) {
System.out.println("vo : " + vo);
return "test";
}
아래는 @ModelAttribute 를 사용했을 때의 jsp와 사용하지 않았을 때의 jsp 코드이다
VO.java의 멤버변수로는 id, name 두가지의 종류가 있다
@ModelAttribute를 사용하지 않았을 때
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>커맨드 객체를 사용하여 model 활용하지 않고 값 출력하기</title>
</head>
<body>
<h1>${ vo.id } | ${ vo.name }</h1>
</body>
</html>
@ModelAttribute 를 사용했을 때 (해당 이름을 'a' 로 작성함)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>커맨드 객체를 사용하여 model 활용하지 않고 값 출력하기</title>
</head>
<body>
<h1>${ a.id } | ${ a.name }</h1>
</body>
</html>
코드 시연
해당 값들이 잘 넘어오는 것을 확인할 수 있다
728x90
'Spring Boot' 카테고리의 다른 글
[Spring Boot] DB 연결 방법 (0) | 2023.09.18 |
---|---|
[Spring Boot] 데이터 유효성 검사 (2) | 2023.09.15 |
[Spring Boot] 스프링 부트 매번 해야하는 설정 및 정적 리소스 실습 (2) | 2023.09.14 |
[Spring Boot] Lombok (0) | 2023.09.14 |
[Spring Boot] 의존성 / 의존 주입 (0) | 2023.09.13 |