DataObjectsInSpring
Spring 애플리케이션에서 데이터를 표현하고 처리하기 위해 사용되는 주요 객체 패턴들을 알아봅시다. 각 패턴의 역할과 차이점을 명확히 이해하면 효율적인 애플리케이션 설계가 가능합니다.
1. DTO (Data Transfer Object) 📦
목적: 데이터를 전송하기 위한 객체
주요 특징:
클라이언트와 서버 간, 또는 계층 간 데이터를 주고받을 때 사용
비즈니스 로직이 없는 순수한 데이터 구조
보통 getter와 setter만 포함하며, 데이터를 담고 전송하는 데 초점
예시:
public class UserDTO {
private String name;
private int age;
public UserDTO(String name, int age) {
this.name = name;
this.age = age;
}
// Getter, Setter
}
사용 사례:
클라이언트에서 서버로 데이터를 보낼 때
컨트롤러와 서비스 계층 간 데이터를 교환할 때
2. Entity (도메인 객체) 🏢
목적: 비즈니스 로직과 데이터 표현의 핵심 객체
주요 특징:
도메인(비즈니스 요구사항)을 모델링한 객체
비즈니스 로직을 포함하고, 애플리케이션에서 데이터를 처리하는 데 중심 역할
JPA에서는 @Entity 어노테이션으로 표시되며 데이터베이스 테이블과 매핑됨
예시:
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
// 비즈니스 로직 예시
public boolean isAdult() {
return this.age >= 18;
}
}
사용 사례:
도메인(비즈니스) 모델을 표현
서비스 계층에서 비즈니스 로직을 처리할 때 사용
3. VO (Value Object) 💎
목적: 변하지 않는 값(불변 객체)을 표현
주요 특징:
값 자체를 비교하는 객체(내용으로 동등성 판단)
불변성(Immutable)을 가지며, 생성 후 상태가 변하지 않음
데이터의 일부 속성을 캡슐화하여 의미를 부여
예시:
public class Money {
private final int amount;
private final String currency;
public Money(int amount, String currency) {
this.amount = amount;
this.currency = currency;
}
// 값 비교를 위해 equals와 hashCode 구현
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (!(obj instanceof Money)) return false;
Money other = (Money) obj;
return this.amount == other.amount && this.currency.equals(other.currency);
}
@Override
public int hashCode() {
return Objects.hash(amount, currency);
}
}
사용 사례:
금액, 날짜, 좌표와 같은 값 그 자체를 나타낼 때
4. DAO (Data Access Object) 🔌
목적: 데이터베이스와의 접근을 담당하는 객체
주요 특징:
데이터베이스와 애플리케이션 간의 연결 고리 역할
데이터의 CRUD(Create, Read, Update, Delete) 작업을 수행
SQL 쿼리나 ORM(EntityManager, Repository 등)을 통해 데이터를 처리
예시:
public class UserDAO {
public User findById(int id) {
// 데이터베이스에서 사용자 검색
return new User("John Doe", 25);
}
public void save(User user) {
// 데이터베이스에 사용자 저장
}
}
사용 사례:
데이터베이스에서 데이터를 읽거나 쓰는 작업을 담당
서비스 계층에서 호출하여 데이터베이스 작업 수행
차이점 정리 📊
구분
DTO
Entity
VO
DAO
목적
데이터 전송
비즈니스 로직 표현
변하지 않는 값 표현
데이터베이스 작업
포함 기능
Getter/Setter
비즈니스 로직 포함
불변성 유지, 값 동등성 비교
CRUD 작업(SQL 처리 등)
가변성
가변
가변
불변
가변
사용 위치
계층 간 데이터 교환
서비스 계층, 도메인 계층
값 자체 표현
데이터 계층
예시 사용 대상
클라이언트와 서버 간 통신
사용자, 주문 등 도메인 객체
금액, 좌표 등
DB 접근을 위한 객체
요약 ✨
DTO: 데이터를 계층 간 이동시키기 위한 단순한 데이터 객체
Entity: 비즈니스 로직을 포함한 애플리케이션의 핵심 모델
VO: 불변 객체로, 값 그 자체를 표현
DAO: 데이터베이스와의 통신을 담당하는 객체
쉽게 말해,
DTO는 데이터를 전달하는 택배 상자 📦
Entity는 애플리케이션의 심장 ❤️
VO는 변하지 않는 값의 표현 💎
DAO는 DB 작업을 담당하는 직책 🔌 이라고 보면 됩니다.
Last updated