VO(Value Object)
VO는 값 객체를 나타냄
- 특징
- 비즈니스 로직에서 사용되는 값이나 객체를 표현
- 일반적으로 불변 객체로 설계되어 생성 시점의 상태를 변경할 수 없음
- 읽기 전용 속성을 가짐
- 데이터베이스에서 가져온 데이터를 객체로 변환하여 사용
- 역할
- 데이터를 표현하지만 비즈니스 로직을 표함하지 않음
- 데이터 자체에 의미를 부여
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는 데이터 액세스 객체를 나타냄
- 특징
- 데이터베이스와 관련된 모든 작업을 수행
- 비즈니스 로직에서 데이터베이스를 직접 액세스하는 것을 방지
- 역할
- 데이터베이스에서 데이터를 검색, 삽입, 업데이트, 삭제 등의 CRUD 작업 수행
- 데이터베이스와의 상호 작용을 추상화
- 응용 프로그램의 유지 보수성과 확장성을 향상
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는 데이터 전송 객체를 나타냄
- 특징
- 비즈니스 로직과 데이터베이스 사이에서 데이터를 전송하는 데 사용
- 일반적으로 가변성을 가짐(setter 메소드를 통해 값 변경 가능)
- 역할
- 데이터베이스에서 가져온 데이터를 객체로 변환하여 비즈니스 로직에서 사용할 수 있도록 함
- 여러 데이터 항목을 하나의 객체로 그룹화
- 계층 간 데이터 전송(예: 프레젠테이션 게층과 비즈니스 계층 사이)
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; } }