일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- TSLA
- mysql
- aqqle
- 아이온큐
- Aggregation
- Query
- NORI
- aggs
- 양자컴퓨터
- file download
- dbeaver
- elasticsearch cache
- KNN
- API
- api cache
- Elastic
- 테슬라
- java
- request cache
- Elasticsearch
- redis
- Docker
- IONQ
- JPA
- java crawler
- ann
- vavr
- Cache
- Analyzer
- Selenium
Archives
- Today
- Total
아빠는 개발자
[java] VO, DTO, DAO 구성 본문
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
반응형
'Java' 카테고리의 다른 글
[java] Value annotation - lombok (1) | 2025.02.01 |
---|---|
[java] Value annotation (0) | 2025.02.01 |
[java] 멀티스레드 최적화 (java application batch) - 테스트 편 (0) | 2024.09.22 |
[java] 멀티스레드 최적화 (java application batch) - 이론편 (1) | 2024.09.21 |
[java] 함수형 프로그래밍(Functional Programming) 은? (0) | 2024.09.02 |