아빠는 개발자

[java] VO, DTO, DAO 구성 본문

Java

[java] VO, DTO, DAO 구성

father6019 2025. 2. 1. 20:25
728x90
반응형

Java에서 VO, DTO, DAO는 계층적 애플리케이션 구조에서 자주 사용되는 중요한 패턴입니다.

 

1. VO (Value Object)

  • 목적: 데이터를 읽기 전용으로 저장하기 위한 객체
  • 특징: Immutable(불변) 속성 권장
  • 사용 예: 특정 비즈니스 로직에서 값을 전달하거나 읽기 위한 객체
  • 예제 코드:
public class UserVO {
    private final String name;
    private final int age;

    public UserVO(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "UserVO{name='" + name + "', age=" + age + "}";
    }
}
 
 

2. DTO (Data Transfer Object)

  • 목적: 계층 간 데이터를 전달하기 위한 객체
  • 특징: 일반적으로 Setter 포함, 변환 유연성 필요
  • 사용 예: 컨트롤러와 서비스 계층 사이에서 데이터를 주고받을 때
  • 예제 코드:
public class UserDTO {
    private String name;
    private int age;

    public UserDTO() {}

    public UserDTO(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "UserDTO{name='" + name + "', age=" + age + "}";
    }
}

3. DAO (Data Access Object)

  • 목적: 데이터베이스와 직접 상호작용하는 객체
  • 특징: CRUD 기능 메서드 제공
  • 사용 예: JDBC 또는 JPA로 DB 접근
  • 예제 코드:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class UserDAO {

    private static final String URL = "jdbc:mysql://localhost:3306/mydb";
    private static final String USER = "root";
    private static final String PASSWORD = "password";

    public List<UserDTO> getAllUsers() {
        List<UserDTO> users = new ArrayList<>();
        String query = "SELECT name, age FROM users";

        try (Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);
             PreparedStatement statement = connection.prepareStatement(query);
             ResultSet resultSet = statement.executeQuery()) {

            while (resultSet.next()) {
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                users.add(new UserDTO(name, age));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return users;
    }
}

정리

  • VO: 읽기 전용, 불변 객체
  • DTO: 계층 간 데이터 전달
  • DAO: 데이터베이스 접근

필요에 따라 이 구성을 프로젝트에 맞게 확장하거나 개선할 수 있음.

728x90
반응형