DTO,DAO

Dong·2024년 11월 11일

DTO (Data Transfer Object) - 데이터 전송 객체

데이를 운반하는 역할을 하는 객체이다. DTO는 주로 여러 계층(예: 데이터베이스, 서비스, 웹 등) 간에 데이터를 전달할 때 사용됨

DTO 주요 특징

  • 순수한 데이터만 저장: DTO에는 오직 데이터와 그에 해당하는 getter/setter 메서드만 존재
  • 비즈니스 로직 없음: 계산이나 처리 등의 복잡한 로직은 포함하지 않으며, 단순히 데이터를 담고 전달하는 역할만한다.
  • 데이터 구조를 정의: 각 필드는 데이터베이스의 컬럼이나 비즈니스 로직에서 필요로 하는 데이터와 매핑됨
public class UserDTO {
    private int userId;
    private String username;
    private String email;

    // 기본 생성자
    public UserDTO() {}

    // getter와 setter
    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

DAO (Data Access Object) - 데이터 접근 객체

데이터베이스 상호작용을 담당하는 객체이다 주로 데이터베이스 접근하여 데이터를 저장하거나 조회, 수정, 삭제하는 역할을 수행

DAO 주요 특징

  • 데이터베이스 작업 전담: 데이터베이스와의 연걸 SQL 실행 등을 처리함.
  • CRUD 작업 담당: CRUD 작업을 수행하는 메서드를 포함
  • DTO와 함께 사용 : DAO 는 주로 DTO와 함께 사용하며, 데이터베이스로부터 조회한 데이터를 DTO에 담아 반환하거나 DTO에 담긴 데이터를 받아 저장함.
import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class UserDAO {
    private Connection conn;

    // 데이터베이스 연결 메서드
    private Connection getConnection() throws Exception {
        String url = "jdbc:mariadb://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        conn = DriverManager.getConnection(url, username, password);
        return conn;
    }

    // 사용자 추가
    public void addUser(UserDTO user) throws Exception {
        try {
            conn = getConnection();
            String sql = "INSERT INTO users (user_id, username, email) VALUES (?, ?, ?)";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, user.getUserId());
            pstmt.setString(2, user.getUsername());
            pstmt.setString(3, user.getEmail());
            pstmt.executeUpdate();
        } finally {
            if (conn != null) conn.close();
        }
    }

    // 모든 사용자 조회
    public List<UserDTO> getAllUsers() throws Exception {
        List<UserDTO> userList = new ArrayList<>();
        try {
            conn = getConnection();
            String sql = "SELECT * FROM users";
            PreparedStatement pstmt = conn.prepareStatement(sql);
            ResultSet rs = pstmt.executeQuery();

            while (rs.next()) {
                UserDTO user = new UserDTO();
                user.setUserId(rs.getInt("user_id"));
                user.setUsername(rs.getString("username"));
                user.setEmail(rs.getString("email"));
                userList.add(user);
            }
        } finally {
            if (conn != null) conn.close();
        }
        return userList;
    }
}
profile
소통을 잘하는 백엔드 개발자가 되기 위해, 꾸준히 성장하고 기록중입니다.

0개의 댓글