객체 디자인 패턴 DAO, VO, DTO

홍영창·2025년 4월 5일

1. VO (Value Object)

  • VO는 주로 값 객체를 의미하고 생성된후 값은 불변한다.
public class Money {
    private final int amount;

    public Money(int amount) {
        this.amount = amount;
    }

    public int getAmount() {
        return amount;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) return true;
        if (obj == null || getClass() != obj.getClass()) return false;
        Money money = (Money) obj;
        return amount == money.amount;
    }

    @Override
    public int hashCode() {
        return Integer.hashCode(amount);
    }
}

2.DAO(Data Access Object)

  • 주로 데이터베이스에 접근하여 데이터를 조회, 삽입, 수정, 삭제하는 작업을 담당한다.
public class UserDAO {
    private Connection connection;

    public UserDAO() {
        this.connection = DatabaseConnection.getConnection();
    }

    public void save(User user) {
        String query = "INSERT INTO users (id, name) VALUES (?, ?)";
        try (PreparedStatement stmt = connection.prepareStatement(query)) {
            stmt.setInt(1, user.getId());
            stmt.setString(2, user.getName());
            stmt.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public User findById(int id) {
        String query = "SELECT * FROM users WHERE id = ?";
        try (PreparedStatement stmt = connection.prepareStatement(query)) {
            stmt.setInt(1, id);
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
                return new User(rs.getInt("id"), rs.getString("name"));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

3. DTO (Data Transfer Object)

  • DTO는 일반적으로 데이터를 담고 있는 필드만 포함하고, 비즈니스 로직을 포함하지 않는다
public class UserDTO {
    private int id;
    private String name;


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


    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }
}
profile
안녕하세요.

0개의 댓글