Develop/Coding
DTO, VO, Entity, POJO 의 특징과 차이점
junu24
2024. 11. 30. 20:14
1. DTO (Data Transfer Object)
정의:
- 데이터 전송 객체로, 계층 간 데이터 전송을 목적으로 사용됩니다.
- 주로 컨트롤러와 서비스 간, 또는 외부 API와 데이터를 주고받을 때 사용됩니다.
- 비즈니스 로직은 포함하지 않으며, 데이터 구조와 Getter/Setter만 포함됩니다.
특징:
- 역할: 데이터를 캡슐화하여 네트워크 또는 계층 간에 전송.
- 변경: 전송 과정에서만 사용되므로 유연하게 설계 가능.
- 목적: 필요한 데이터만 담아 과도한 데이터 전송 방지.
예시 코드:
@Getter
@Setter
public class UserDTO {
private String name;
private String email;
// 기본 생성자
public UserDTO() {}
// 생성자
public UserDTO(String name, String email) {
this.name = name;
this.email = email;
}
}
용도:
- 클라이언트 요청 데이터를 받아 처리하거나, 응답 데이터를 전달할 때 사용.
2. VO (Value Object)
정의:
- 값 객체로, 고정된 데이터(immutable)를 표현합니다.
- 상태를 변경하지 않으며, 주로 값의 동등성(equality)을 비교하기 위해 사용됩니다.
특징:
- 역할: 읽기 전용 데이터 표현.
- 불변성: 생성 후 값이 변경되지 않음.
- 목적: 특정 값을 논리적으로 그룹화하거나 표현.
예시 코드:
@Getter
public class AddressVO {
private final String street;
private final String city;
// 생성자
public AddressVO(String street, String city) {
this.street = street;
this.city = city;
}
// equals와 hashCode 구현 (값 비교를 위함)
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
AddressVO address = (AddressVO) obj;
return street.equals(address.street) && city.equals(address.city);
}
@Override
public int hashCode() {
return Objects.hash(street, city);
}
}
용도:
- 특정 값들을 묶어서 사용해야 할 때.
- 주소, 돈, 날짜와 같은 불변 객체 표현.
3. Entity
정의:
- 데이터베이스 테이블과 1:1 매핑되는 클래스.
- JPA 또는 Hibernate와 같은 ORM(Object-Relational Mapping) 프레임워크에서 사용.
특징:
- 역할: DB와 직접적으로 매핑되는 데이터 구조.
- 변경: 데이터베이스 상태를 반영해야 하므로 가변 객체로 설계.
- 목적: DB 작업(Create, Read, Update, Delete)에 활용.
예시 코드:
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.GeneratedValue;
@Getter
@Setter
@Entity // JPA 엔티티 클래스임을 표시
public class UserEntity {
@Id // 기본 키 필드
@GeneratedValue // 자동 생성되는 키
private Long id;
private String name;
private String email;
// 기본 생성자 (JPA 요구)
public UserEntity() {}
// 생성자
public UserEntity(String name, String email) {
this.name = name;
this.email = email;
}
}
용도:
- 데이터베이스와 연동되어 데이터를 저장하거나 조회하는 데 사용.
- 비즈니스 로직은 포함하지 않음.
4. POJO (Plain Old Java Object)
정의:
- 순수한 자바 객체로, 특정 프레임워크나 라이브러리에 의존하지 않는 객체.
- 특별한 애노테이션이나 상속이 필요하지 않음.
특징:
- 역할: 단순한 데이터 구조 표현.
- 변경: 자유로운 설계 가능.
- 목적: 복잡한 종속성을 피하고 간단하게 데이터를 저장.
예시 코드:
@Getter
@Setter
public class Product {
private String name;
private double price;
// 기본 생성자
public Product() {}
// 생성자
public Product(String name, double price) {
this.name = name;
this.price = price;
}
}
용도:
- 간단한 데이터 저장, 비즈니스 로직과 무관한 객체.
차이점 요약
구분 | DTO | VO | Entity | Pojo |
역할 | 데이터 전송 | 값 표현 | DB 매핑 | 단순 객체 |
가변성 | 가변 | 불변 | 가변 | 가변 |
종속성 | 프레임워크 종속적 | 독립적 | ORM 종속적 | 독립적 |
예시 | 요청/응답 데이터 | 주소, 돈 등 | 사용자, 상품 등 | 단순 데이터 저장 객체 |
반응형