[Java 풀스택 과정 강의] 2월 23일

부트캠프 일지/Java 풀스택 과정 강의
2026.03.02
※ TIL와는 별개로 적는 개인 개발 일지라서 말은 좀 편하게하는 페이지입니다.
일지이기 때문에 일기의 성격이 더 강합니다.

 

 

DAO/DTO 구조 및 패턴

Interface와 DAO, DTO를 본격적으로 사용하기 시작한다. DAO는 DB 처리 전담, DTO는 데이터 담는 객체이다.

일반적인 DAO Interface는 다음과 같이 된다.

public interface IDAO {
	// DAO에 대한 인터페이스 설정의 예제
    
    //Create
    public void create(DTO dto);
    
    //Read. List로 반환한다
    public ArrayList<DTO> read();
    
    //update한다
    public void update(DTO dto);
    
    //delete한다. 여기서는 보통 DTO 객체보단 간단하게 처리하는게 편하다.
    public void delete(String no);    
}

 

이런 추상메서드를 DAO 파일을 만들어 오버라이딩하면 된다.

 

public class DAO implements IDAO {
	// DAO에 대한 인터페이스 설정의 예제
    
    //Create
    @override
    public void create(DTO dto);
    
    //Read. List로 반환한다
    @override
    public ArrayList<DTO> read();
    
    //update한다
    @override
    public void update(DTO dto);
    
    //delete한다. 여기서는 보통 DTO 객체보단 간단하게 처리하는게 편하다.
    @override
    public void delete(String no);   
}

 

그리고 DTO는 보통 하나의 객체를 다루는 편이라, 다음과 같이 이루어진다.

 

public class DTO {
	private String no;
    private String name;
    
    public DTO(String no, String name){
    	// 생성자를 만든다
    	this.no = no;
        this.name = name;
    }
    
    // 여기서 getter와 setter를 만든다.
    public String getNo() { return no; }
    public void setNo(String no) { this.no = no; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    
}

 

 

DAO/DTO 사용 JDBC CRUD

DB Connect

DB Connect에 대한 설정을 한다.

 

일단 DB를 연결한 뒤, close 메서드를 만드는 것이 좋다.

오버로딩이 가능하므로 여러가지 경우를 생각한다. close하는 것은 Connection, PreparedStatement, ResultSet 객체이다.

 

public static void close(Connection con, PreparedStatement pstmt, ResultSet rs) {
    try {
        if(rs != null) {
            rs.close();
            rs = null;
        }
        if(pstmt != null) {
            pstmt.close();
            pstmt = null;
        }
        if(con != null) {
            con.close();
            con = null;
        }
    } catch(SQLException e) {
        e.printStackTrace();
    }
}

 

이런 식으로 만들어두면 close 설정이 편해진다.

 

Read AND Write

CRUD 클래스를 별개로 만들어서 구현한다. 각 CRUD는 static으로 만들어두는 것이 좋다. 여기서 delete는 간단한 작업이라 제외되었다.

 

import java.util.List;
import java.util.Scanner;

public class ReadWrite {

    // 1. 등록(insert)용 – 번호도 새로 입력
    public static DTO readInfo(Scanner sc) {
        System.out.println("정보 등록");

        System.out.print("번호(no) 입력 : ");
        String no = sc.nextLine();

        System.out.print("이름(name) 입력 : ");
        String name = sc.nextLine();

        return new DTO(no, name);
    }

    // 2. 수정(update)용 – 번호는 고정, 이름만 다시 입력
    public static DTO readInfo(Scanner sc, String no) {
        System.out.println(no + " 정보 수정");

        System.out.print("이름(name) 입력 : ");
        String name = sc.nextLine();

        return new DTO(no, name);
    }

    // 3. 한 명 출력
    public static void writeInfo(DTO dto) {
        System.out.println("----- 정보 -----");
        System.out.println("no   : " + dto.getNo());
        System.out.println("name : " + dto.getName());
    }

    // 4. 여러 명 출력
    public static void writeInfo(List<DTO> list) {
        System.out.println("----- 전체 목록 -----");
        for (DTO dto : list) {
            System.out.println(dto.getNo() + " / " + dto.getName());
        }
    }
}

 

 

다중 테이블 사용

DB 테이블의 여러 가지를 사용하는 방법이다. 이 경우 각 테이블에 대한 CRUD를 작성하는 게 좋다.

그 후에 DB로 서브쿼리문을 작성하여 쓰면 된다.

 

 

다중 DAO/DTO 연계

이건 간단한 방법이다. 다른 패키지에 있는 DAO와 DTO를 import해서 사용하면 된다.