728x90
1. DTO (Data Transfer Object)
DTO란 데이터 전송 객체이다.
말그대로 데이터를 전송하기 위한 객체로 사용된다.
class colorDTO{
private int red;
private int blue;
private int green;
public colorEntity(int red, int blue, int green) {
this.red = red;
this.blue = blue;
this.green = green;
}
public int getRed() {
return red;
}
public int getBlue() {
return blue;
}
public int getGreen() {
return green;
}
public void setRed(int red) {
this.red = red;
}
public void setBlue(int blue) {
this.blue = blue;
}
public void setGreen(int green) {
this.green = green;
}
}
DTO는 getter와 setter를 가질 수 있다.
내부에 로직은 담지 못한다.
DTO의 핵심 역할은 레이어간 데이터를 전송하는 것이다.
DTO에서 setter를 제거한다면 데이터가 이동할때 불변성을 보장할수도 있게 된다.
2. VO (Value Object)
VO는 값을 표현하기 때문에 불변성을 보장한는 객체이다.
객체를 생성시 객체마다 고유한 메모리주소를 받는다.
이 메모리 주소가 다르다면 서로 다른 객체라고 한다.
하지만 VO는 메모리주소로 비교하는게 아닌 객체가 가지고 있는 값만을 가지고 비교한다.
getter를 가질수 있지만 값의 불변성을 위해 setter를 가지진 못한다.
내부에 로직을 담을 수 있다.
값만을 비교하기 위해서는 위와 같은 과정을 거친다.
따라서 equals와 hashCode를 오버라이드 해줘야 한다.
class colorVO{
private int red;
private int blue;
private int green;
public colorEntity(int red, int blue, int green) {
this.red = red;
this.blue = blue;
this.green = green;
}
public int getRed() {
return red;
}
public int getBlue() {
return blue;
}
public int getGreen() {
return green;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
colorVO colorVO = (colorVO) o;
return red == colorVO.red && blue == colorVO.blue && green == colorVO.green;
}
@Override
public int hashCode() {
return Objects.hash(red, blue, green);
}
public int sumRedBlue(){
return red+blue;
}
}
3. Entity
Entity는 데이터베이스와 1:1로 매핑되어있는 객체이다.
데이터베이스에 값을 넣을때, 가져올때 사용한다.
getter를 가질 수 있다.
내부에 로직을 담을 수 있다.
객체의 일관성을 보장하기 위해 setter 보단 아래 보이는 update나 Builder패턴을 많이 이용한다.
@Entity
public class Color {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
privae Long id;
@Column(nullable = false)
private int red;
@Column(nullable = false)
private int blue;
@Column(nullable = false)
private int blue;
public Color update(int red, int blue, int green) {
this.red = red;
this.blue = blue;
this.green = green;
return this;
}
}
4. DTO vs VO vs Entity
DTO | VO | Entity |
레이어간 데이터 전송용 객체 | 값을 나타내는 객체 | DB 매핑용 객체 |
getter/ setter | getter | getter |
로직 포함 불가 | 로직 포함 가능 | 로직 포함 가능 |
참고
https://www.youtube.com/watch?v=z5fUkck_RZM&t=1s
https://www.youtube.com/watch?v=J_Dr6R0Ov8E&list=PLgXGHBqgT2TvpJ_p9L_yZKPifgdBOzdVH&index=67&t=2s
728x90
'개발 > Spring Boot' 카테고리의 다른 글
[Spring Boot] 어노테이션 정리 (0) | 2023.05.17 |
---|---|
[Spring Boot] Setter vs Constructor vs Builder (0) | 2023.05.16 |
[Spring Boot] Controller, Service, Repository (0) | 2023.05.16 |
[Spring Boot] DI 와 IoC는 무엇일까? (1) | 2023.05.11 |
[Spring Boot] mysql 연결 삽질기 (0) | 2023.04.16 |