DTO는 데이터를 저장하거나 계층 사이에서 데이터를 교환(전송)할때 사용되는 객체로, 순수하게 데이터만을 담고 있다. (다른 로직x)
이러한 특성 때문에 데이터만 가지고 있는 객체라 하여, 값 객체(Value Object) 라고도 부른다.
이 DTO는 자바빈즈 규약에 따라 작성된다.
자바빈즈는 자바로 작성된 소프트웨어 컴포넌트로, 자바빈즈 규약을 따르는 자바 클래스를 말한다.
DTO 또한 자바빈즈 규약에 따라 작성되는 클래스 이므로 자바빈즈라 할 수 있다.
자바빈즈 규약은 다음과 같다.
1) 기본패키지(default) 이외의 패키지에 속해야 한다.
(클래스 생성 시, 패키지 이름 아무것도 지정 안하면 그게 default 기본 패키지)
2) 자바빈즈(클래스) 내의 멤버변수(필드)의 접근 지정자는 private이여야 한다.
3) 기본 생성자가 있어야 한다.
4) 멤버변수에 접근하기 위한 getter / setter 메서드가 필요하다.
5) getter / setter 메서드의 접근 지정자는 public이여야 한다.
DTO는 데이터 저장 / 전송에 사용되는 Java 클래스이다. 때문에, 이러한 자바파일은 JavaResources 하위의 src에 생성해야 한다.
package test; // 자바빈즈 규약 - 자바빈즈는 default 패키지 이외의 패키지에 속해야 한다.
public class Person {
private String name; // 자바빈즈 규약 - 멤버변수의 접근 지정자는 private이여야 한다.
private int age; // 자바빈즈 규약 - 멤버변수의 접근 지정자는 private여야 한다.
public Person() {} // 자바빈즈 규약 - 기본 생성자가 존재해야 한다.
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() { // 자바빈즈 규약 - 멤버변수에 접근하기 위한 getter / setter 메서드가 필요하며, 해당 메서드의 접근 지정자는 public이여야 한다.
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
자바빈즈 규약 1 : default 패키지 이외의 패키지인 test 패키지에 Person이라는 DTO 클래스 생성.
자바빈즈 규약 2 : 해당 클래스의 멤버변수로 name과 age를 생성하였고, 접근지정자를 private로 지정.
자바빈즈 규약 3 : 기본 생성자 정의
자바빈즈 규약 4, 5 : 각각 멤버변수에 접근하기 위한 getter / setter 메서드 생성, 각 메서드의 접근지정자는 public으로 지정
Getter / Setter 메서드 자동 생성
해당 예시 코드상에서는 멤버변수의 수가 2개여서 getter / setter 메서드를 직접 작성하는데 복잡하지 않고 오래걸리지 않지만,
만약 멤버변수의 수가 많은 경우 해당 멤버변수에 접근을 위한 getter / setter 메서드를 작성하는데 오래걸릴 뿐만 아니라 오타가 생길 위험도 커지게 된다.
이러한 문제를 해결하기 위해서는, IDE(이클립스)가 제공하는 자동생성 기능을 이용하는 방법이 있다.
DTO 클래스 파일에 오른쪽 마우스 클릭 -> source -> generate getters and setters -> Select All -> Generate
생성자 자동생성
인수들을 받아 모든 속성을 한 번에 초기화 해주는 생성자도 IDE 자동생성 기능을 통해 추가가 가능하다.
DTO 클래스 파일에 오른쪽 마우스 클릭 -> source -> generate constructor using fields -> Select All -> Generate
데이터 전달을 위한 DTO 클래스는 일반적으로 테이블 당 하나씩 생성하며, 테이블의 컬럼과 같은 멤버변수를 가진다 !