728x90
DTO(Data Transfer Object)와 VO(Value Object)란?
객체 지향 프로그래밍에서 DTO와 VO는 모두 객체이지만 그 목적과 사용 방식이 다르다.
DTO는 주로 데이터 전송에 초점을 맞추고 있으며, VO는 객체의 값 자체에 집중하여 불변성을 유지하는 특징이 있다.
DTO(Data Transfer Object): 데이터 전송을 위한 객체
- 가변 객체
DTO는 시스템 간에 데이터를 전송하는 데 사용된다. 이 객체는 데이터를 저장하고 그 값을 변경할 수 있다. 예를 들어, 클라이언트에서 서버로 데이터를 전송하거나 데이터베이스에서 데이터를 불러와 다른 계층으로 전달할 때 주로 사용된다. - 특징
- Setter와 Getter 제공: 데이터를 외부에서 가져오거나 수정할 수 있다.
- 주로 네트워크 통신에서 사용: API 호출 시 데이터를 주고받는 데 적합하다.
- 비즈니스 로직을 포함하지 않음: 데이터 자체에 대한 처리는 최소한으로 하고 단순히 데이터를 전달하는 데 초점을 맞춘다.
public class UserDTO {
private String name;
private String email;
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String name) {
this.name = name;
}
// Getter
public String getEmail() {
return email;
}
// Setter
public void setEmail(String email) {
this.email = email;
}
}
VO(Value Object): 값 자체를 나타내는 객체
- 불변 객체
VO는 객체의 속성값이 생성된 이후 변경되지 않는 것을 보장한다. 이 특성 덕분에 값 자체의 의미를 강조하며 같은 값을 가진 객체는 동일하다고 간주한다. 주로 금액, 좌표, 날짜와 같이 '하나의 값'을 명확히 나타내는 경우에 사용된다. - 특징
- Setter가 없음: 객체가 생성된 이후에는 값을 변경할 수 없다.
- 비즈니스 로직에서 값의 동등성 보장: VO는 값의 동일성을 중요시하기 때문에 동일한 속성값을 가진 VO는 같은 것으로 취급한다.
- 불변성 유지: VO는 값의 변경 없이 안전하게 사용할 수 있다.
public class MoneyVO {
private final int amount;
public MoneyVO(int amount) {
this.amount = amount;
}
// Getter만 제공
public int getAmount() {
return amount;
}
// 값의 동등성을 비교
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
MoneyVO moneyVO = (MoneyVO) obj;
return amount == moneyVO.amount;
}
@Override
public int hashCode() {
return Objects.hash(amount);
}
}
728x90
'Backend > Java' 카테고리의 다른 글
[Java] Final 이란? (0) | 2024.10.15 |
---|---|
[Java] 객체 생성 방법 (0) | 2024.10.15 |
[Java] 자바 캡슐화의 이해 (Encapsulation) (2) | 2024.10.09 |
[Java] JVM : Java Virtual Machine (0) | 2024.10.08 |
[Java] Exception - 자바 예외 처리 (1) | 2024.10.07 |