DTO, DAO, VO, Record 개념 및 차이

2024. 6. 24. 16:40Java/Spring

DTO, DAO, VO, Record

  • 소프트웨어 개발에서 데이터와 관련된 작업을 구조화하고 구분하기 위해 사용되는 다양한 개념들입니다. 각 개념의 주요 특징과 차이점을 간단히 설명하겠습니다.

 

DTO (Data Transfer Object)

 

  • 개념: DTO는 데이터 전송 객체로, 계층간 데이터 교환을 위해 사용됩니다. 일반적으로 데이터베이스에서 데이터를 얻어 서비스로 보내거나, 서비스에서 클라이언트로 전송할 때 사용됩니다. DTO는 주로 데이터만을 가지고 있고 비즈니스 로직을 포함하지 않습니다.
  • 특징:
    • 주로 읽기 전용 데이터를 전달하기 위해 사용됩니다.
    • 필요한 데이터의 일부만 포함할 수 있습니다.
    • 데이터 전송의 효율성을 높이기 위해 사용됩니다.
  • 예시:
// 사용자 정보 DTO
public class UserDTO {
    private Long id;
    private String username;
    private String email;

    // 생성자, Getter, Setter
    // 생략
}

 

DAO (Data Access Object)

 

  • 개념: DAO는 데이터베이스와의 직접적인 접근을 담당하는 객체입니다. 데이터베이스 CRUD(Create, Read, Update, Delete) 작업을 수행하며, 이를 통해 데이터베이스와의 상호작용을 캡슐화합니다.
  • 특징:
    • 주로 데이터베이스 연동을 위한 메서드들을 포함합니다.
    • 보통 트랜잭션 관리와 같은 데이터베이스 관련 로직을 처리합니다.
    • 데이터베이스와의 종속성을 줄이기 위해 인터페이스를 통해 구현될 수 있습니다.
  • 예시:
// 사용자 DAO 인터페이스
public interface UserDAO {
    User findById(Long id);
    void save(User user);
    void update(User user);
    void delete(User user);
}

VO (Value Object)

  • 개념: VO는 값 객체로, 개념적으로는 불변(Immutable)한 객체를 의미합니다. 주로 비즈니스 로직에 사용되며, 도메인 모델의 일부로서 객체의 상태를 나타냅니다.
  • 특징:
    • 주로 데이터베이스나 다른 시스템 간의 데이터 전송을 담당합니다.
    • 불변 객체로 설계되어, 값의 변경이 없고 비교 가능하게 설계됩니다.
    • 일반적으로 equals() 및 hashCode() 메서드를 오버라이딩하여 동등성 비교가 가능하게 합니다.
  • 예시:
// 주소 VO
public class AddressVO {
    private final String street;
    private final String city;
    private final String zipCode;

    public AddressVO(String street, String city, String zipCode) {
        this.street = street;
        this.city = city;
        this.zipCode = zipCode;
    }

    // Getter 메서드만 제공
    public String getStreet() {
        return street;
    }

    public String getCity() {
        return city;
    }

    public String getZipCode() {
        return zipCode;
    }
}

 


 

Record

  • 개념: Record는 자바 14부터 도입된 데이터 레코드(Records)라는 개념으로, 데이터를 저장하기 위한 구조화된 데이터 타입입니다. 기존의 클래스보다 간단하게 데이터를 표현할 수 있습니다.
  • 특징:
    • 불변(Immutable)하며, 자동으로 생성자, getter 메서드, equals(), hashCode() 등의 메서드가 제공됩니다.
    • DTO와 유사하지만 데이터 전송에 특화된 기능보다는 단순 데이터 저장에 초점을 맞추고 있습니다.
    • 자바에서는 기본적으로 데이터 레코드를 사용하기 위해 record 키워드를 제공합니다.
  • 예시:
// 사용자 레코드 타입
public record UserRecord(String username, String email) {}

 


각 개념의 사용 예시 요약

  • DTO: 데이터 전송을 위한 객체로, 주로 클라이언트와 서버 간의 데이터 전송에 사용됩니다.
  • DAO: 데이터베이스 접근 객체로, 데이터베이스와의 CRUD 작업을 캡슐화하여 제공합니다.
  • VO: 값 객체로, 비즈니스 로직에서 사용되며 불변성을 가지고 있습니다.
  • Record: 자바의 데이터 레코드 타입으로, 간단하고 불변한 데이터 구조를 제공합니다

DB 에 접근할 때는 DAO를 사용하고, 데이터를 전송할 땐 DTO를 사용하고, VO는 데이터의 불변성을 보장해야할 때 사용하면 된다.

각 개념의 차이점

  • DTOVO: DTO는 데이터 전송을 위해 사용되며, 주로 읽기 전용 데이터를 포함합니다. 반면 VO는 값 객체로서 불변성을 가지고 비교 가능하게 설계됩니다.
  • DTODAO: DTO는 데이터 전송에 초점을 맞추고, DAO는 데이터베이스 접근과 관련된 작업을 캡슐화하는 객체입니다.
  • DAOVO: DAO는 데이터베이스 접근 계층을 구현하기 위한 객체이며, VO는 비즈니스 로직에서 사용되는 데이터를 표현하는 객체입니다.
  • Record와 기타 개념들: Record는 자바의 최신 기능으로, 데이터 저장 및 표현을 위해 간단하고 불변한 구조를 제공합니다. 다른 개념들은 이와 같은 명시적인 데이터 레코드 타입을 가지고 있지 않습니다.

 

 

'Java > Spring' 카테고리의 다른 글

MVC (Model-View-Controller) 구조  (0) 2024.06.25
영속성 컨텍스트  (0) 2024.06.24
@Controller와 @RestController 의 설명 과 차이  (0) 2024.06.24
@Transactional  (0) 2024.06.24
Entity 맵핑 @어노테이션  (0) 2024.06.19