VO, DAO, DTO 차이

알비레오·2025년 3월 17일

자바

목록 보기
10/17

VO(Value Object)

VO는 값 객체를 나타냄

  • 특징
  1. 비즈니스 로직에서 사용되는 값이나 객체를 표현
  2. 일반적으로 불변 객체로 설계되어 생성 시점의 상태를 변경할 수 없음
  3. 읽기 전용 속성을 가짐
  4. 데이터베이스에서 가져온 데이터를 객체로 변환하여 사용
  • 역할
  1. 데이터를 표현하지만 비즈니스 로직을 표함하지 않음
  2. 데이터 자체에 의미를 부여
public final class PhoneNumberVO {
    private final String number;
    public PhoneNumberVO(String number) {
        if (!isValidPhoneNumber(number)) {
            throw new IllegalArgumentException("Invalid phone number");
        }
        this.number = number;
    }
    private boolean isValidPhoneNumber(String number) {
        // 전화번호 유효성 검사 로직
        return number.matches("\\d{3}-\\d{4}-\\d{4}");
    }
    public String getNumber() {
        return number;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        PhoneNumberVO that = (PhoneNumberVO) o;
        return Objects.equals(number, that.number);
    }
    @Override
    public int hashCode() {
        return Objects.hash(number);
    }
}

DAO(Data Access Object)

DAO는 데이터 액세스 객체를 나타냄

  • 특징
  1. 데이터베이스와 관련된 모든 작업을 수행
  2. 비즈니스 로직에서 데이터베이스를 직접 액세스하는 것을 방지
  • 역할
  1. 데이터베이스에서 데이터를 검색, 삽입, 업데이트, 삭제 등의 CRUD 작업 수행
  2. 데이터베이스와의 상호 작용을 추상화
  3. 응용 프로그램의 유지 보수성과 확장성을 향상
public class UserDAO {
    private Connection connection;
    public UserDAO(Connection connection) {
        this.connection = connection;
    }
    public void createUser(User user) throws SQLException {
        String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
        try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
            pstmt.setString(1, user.getName());
            pstmt.setString(2, user.getEmail());
            pstmt.executeUpdate();
        }
    }
    public User getUserById(int id) throws SQLException {
        String sql = "SELECT * FROM users WHERE id = ?";
        try (PreparedStatement pstmt = connection.prepareStatement(sql)) {
            pstmt.setInt(1, id);
            try (ResultSet rs = pstmt.executeQuery()) {
                if (rs.next()) {
                    return new User(
                        rs.getInt("id"),
                        rs.getString("name"),
                        rs.getString("email")
                    );
                }
            }
        }
        return null;
    }
}

DTO(Data Transfer Object)

DTO는 데이터 전송 객체를 나타냄

  • 특징
  1. 비즈니스 로직과 데이터베이스 사이에서 데이터를 전송하는 데 사용
  2. 일반적으로 가변성을 가짐(setter 메소드를 통해 값 변경 가능)
  • 역할
  1. 데이터베이스에서 가져온 데이터를 객체로 변환하여 비즈니스 로직에서 사용할 수 있도록 함
  2. 여러 데이터 항목을 하나의 객체로 그룹화
  3. 계층 간 데이터 전송(예: 프레젠테이션 게층과 비즈니스 계층 사이)
public class UserDTO {
    private int id;
    private String name;
    private String email;
    public UserDTO() {}
    public UserDTO(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }
    // Getters and setters
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}

0개의 댓글