DTO는 계층 간 데이터 교환을 위해 사용하는 객체다. 여기서 계층은 View-Controller-Service-DAO와 같은 계층을 의미
데이터를 담을 private 속성과 그 속성에 접근할 수 있는 Getter, Setter 메소드로 구성되어있다.
VO(Value Object)와 혼용되어 쓰이나, VO는 내부 속성값을 변경할 수 없는(imuutable) Read-Only의 의미적 특성을 가진 객체이다. 즉, 변경없이 값으로 취급할 객체를 말한다.
반복적인 작업을 효율적으로 하기 위해서 사용한다.
Bean 이란 JAVA 언어의 데이터(속성)과 기능(메소드)로 이루어진 클래스이다.
- Default 생성자 : 파라미터가 없는 Default 생성자를 갖고 있어야한다.
- Property : 자바빈이 노출하는 이름을 가진 속성을 Property라고 하며, Property는 set으로 시작하는 수정자 메소드(setter)와 get으로 시작하는 접근자 메소드(getter)를 이용해 수정 또는 조회할 수 있다.
DTO와 Java Beans의 관계에 대해선 DTO의 형식으로 Java Beans를 따르고 있다고 생각하면 된다.
Spring에서 지칭하는 Bean이란, Spring의 IoC Container(=DI Container)를 통해 관리(생성, 제어)되는 객체를 말하며, 이는 Spring IoC Container에서 자세히 볼 수 있다.
빈을 만든다는 것은 데이터 객체를 만들기 위한 클래스를 만드는 것이다. ( getter, setter )
package example;
public class Student {
private String name;
private int age;
private int grade;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
}
관련 액션 태그(useBean, getProperty, setProperty)로 주로 데이터를 업데이트하고, 얻어오는 역할을 한다.
특정 Bean을 사용한다고 명시할 때 사용한다.
<jsp:useBean id = "빈이름" class="패키지명을 포함한 클래스명" scope="스코프 범위"/>
<jsp:useBean id = "student" class="example.Student" scope="page"/>
- Scope 범위
scope | 설명 |
---|---|
page | 생성된 페이지 내에서만 사용 가능 |
request | 요청된 페이지 내에서만 사용 가능 |
session | 웹 브라우저 생명주기와 동일하게 사용 가능 |
application | 웹 어플리케이션 생명주기와 동일하게 사용가능 |
데이터 값을 설정할 때 사용한다.(setter)
<jsp:setProperty name="빈 이름" property="속성 이름" value ="속성 값" />
<jsp:setProperty name="student" property="name" value ="홍길동" />
데이터 값을 가져올 때 사용한다.(getter)
<jsp:getProperty name="빈 이름" property="속성 이름" />
<jsp:getProperty name="student" property="name" />
- Java Class
package example;
public class Student {
private String name;
private int age;
private int grade;
public Student() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
}
- jsp로 구현하기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="student" class="example.Student" scope="page" />
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:setProperty name="student" property="name" value="박서"/>
<jsp:setProperty name="student" property="age" value="13"/>
<jsp:setProperty name="student" property="grade" value="6"/>
이름 : <jsp:getProperty name="student" property="name" /><br />
나이 : <jsp:getProperty name="student" property="age" /><br />
학년 : <jsp:getProperty name="student" property="grade" /><br />
</body>
</html>