DTO, VO, Entity에 대해 알아봅시다 😎
오늘은 DTO, VO, Entity를 비교해보고 DTO에 대해서 자세히 알아봅시다.
VO (Value Object)
- 값 그자체를 표현하는 객체이다.
- 로직을 포함할 수 있습니다.
- 변하지 않는 값을 가집니다(불변성).
- 주소가 달라도 값이 같으면 같다고 봅니다.
DTO (Data Transfer Object)
- 계층간 데이터 교환을 위해 사용하는 객체입니다.
- 데이터 교환만을 위해 사용하므로 로직을 갖지 않고, getter/setter 메소드만 가집니다.
- 값을 변경할 수 있습니다(가변).
Entity
- 실제 DB 테이블과 매핑되는 클래스입니다. 이를 기준으로 테이블이 생성되고 스키마가 변경됩니다.
- 로직을 포함할 수 있습니다.
- id로 구분됩니다.
DTO 살펴보기
public class Member {
public int num;
public String name;
public String addr;
}
Member 클래스를 DTO로 만들어봅시다!
DTO로 만들면 이런 형태가 됩니다. 만드는 방법을 알아봅시다.
public class MemberDto {
private int num;
private String name;
private String addr;
public MemberDto() {
}
public MemberDto(int num, String name, String addr) {
super();
this.num = num;
this.name = name;
this.addr = addr;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
}
DTO 만드는 방법
필드의 접근지정자를 private로 지정하여 외부에서 필드로 직접 접근하지 못하게 만들어줍니다.
필드에 직접 접근하지 못하니 메소드로 접근해야합니다. getter와 setter를 만들어줍니다.
setter와 getter 자동으로 만드는 방법!
마우스 우클릭 => Source => Generate getters and setters
생성자 자동으로 만드는 방법!
마우스 우클릭 => Source => Generate Constructor using Fields
이제 main에서 사용해봅시다.
1. 객체만들기
//1. MemberDto 객체를 저장할 ArrayList 객체를 생성해서 참조값을 members라는 지역변수에 담아보세요
List<MemberDto> members = new ArrayList<>();
//2.2명의 회원정보를 members에 담아보세요.
members.add(new MemberDto(1,"이00","서울"));
members.add(new MemberDto(2,"김00","부산"));
ArratList에 MemberDto를 담아봅시다.
생성자를 만들어 놓았으니 생성자를 사용하여 바로 담을 수 있습니다.
2. getter, setter 사용해보기
//참조 연습
members.get(0).setName("최00");
List<MemberDto> a = members;
MemberDto b = members.get(0);
int c = members.get(0).getNum(); //1
String d = members.get(0).getName();
String e = members.get(0).getAddr();
setter로 데이터를 지정할 수 있고 getter로 데이터를 얻어낼 수 있습니다.
3. 데이터 불러오기
//반복문 연습 (members 에 저장된 참조값 순서대로 불러내기)
for(int i=0; i<members.size(); i++) {
MemberDto tmp=members.get(i);
System.out.println(tmp.getName());
}
//확장 for문 사용
for(MemberDto tmp:members) {
System.out.println(tmp.getName());
}
for문을 사용하여 모든 데이터를 불러와봅시다.
잘 불러와진 것을 볼 수 있습니다.