Java DTO, DAO, Utility 클래스

강서진·2023년 11월 13일
0

Java

목록 보기
7/35
post-custom-banner

강좌 Course 1. Part 3. ch2 요약

Model

모델은 객체를 소프트웨어공학적인 관점에서 부르는 것으로, 객체지향프로그래밍에서는 클래스의 역할에 따라 모델이라고 부른다. 즉, 객체=클래스=모델이라고 보면 된다. 해당 클래스가 어떤 역할을 하느냐에 따라 다양한 모델을 사용할 수 있다. 모델에는 시작 클래스, DTO/VO 클래스, DAO 클래스, Utility 클래스 등이 있다.

DTO, VO 클래스의 필요성

DTO, VO 클래스는 데이터를 하나로 수집해야 할 경우 필요하다. 하나의 변수에 하나의 정보를 담는 것도 가능하지만 이는 번거로우며, 객체에는 여러 정보와 기능이 있을 수 있고 그 자료형이 전부 일치하지 않을 수도 있다. 예를 들어 자동차의 정보를 입력받아 다른 메서드로 이동시키거나, 데이터베이스에 있는 데이터를 가져와서 사용해야 하는 상황이 있을 수 있다. 이런 상황에서 객체 없이 각각 정보 하나당 하나의 작업을 실행하기란 번거롭기 때문에 객체는 DTO를 사용하여 관리한다.

DTO는 Data Transfer Object의 줄임말이고, VO는 Value Object이다. 전 챕터에서 보았듯 이 두가지는 곧 객체를 가리키며, 말 그대로 데이터를 이동할 때 사용하는 객체, 즉 데이터를 담는 모델이라고 할 수 있다.

// 예시: CarDTO
public class CarDTO {
    public int carSN;
    public String carName;
    public int carPrice;
    public String carOwner;
    public int carAge;
    public String carType;
}

DAO 클래스의 필요성

DAO는 Data Access Object의 줄임말로, CRUD 동작을 가지고 비즈니스 로직을 처리하는 클래스이다. DTO/VO 클래스로 객체를 생성한 후에는 데이터베이스에 이를 저장, 수정, 검색, 삭제 등의 CRUD(Create, Read, Update, Delete) 작업을 하는 DAO 클래스가 필요하다.

실제로 DAO 클래스를 사용하려면 MySQL, SQLite 등의 DB와 연결하는 작업이 필요하나, 강의에서 거기까지 다루지는 않아 해당부분은 생략하고 대략적인 DAO 클래스의 구조만을 예시로 들었다.

public class CarDAO {
    // CREATE
    public void carInsert(CarDTO car){
        // Connect DB
        // Insert SQL
        System.out.println("Car"+car.carName+"'s info has been saved.");
    }

    public void carSelect(CarDTO car){
        // Connect DB
        // Select SQL
        System.out.println("Car"+car.carName+"'s info has been found.");
    }

}

Utility 클래스의 필요성

Utility 클래스는 DTO, DAO와 별개로 동작하는, 반복적으로 사용되는 동작(기능)을 유지보수의 편의성 및 관리를 위하여 별도의 클래스로 만들어 둔 것이다. 필수는 아니고 필요할 때 만들어서 사용하면 된다. 자바에 기본적으로 포함된 java.util 패키지를 보면 대표적인 Utility 클래스들이 생성되어 있다. 예시로 날짜, 시간정보 획득 기능이나 인코딩 기능 등을 들 수 있다.

// 예시: CarUtil
import fc.java.model.CarDTO;
public class CarUtil{
    public String carPrint(CarDTO car) {
        return "carPrint{" +
                "carSN=" + car.carSN +
                ", carName='" + car.carName + '\'' +
                ", carPrice=" + car.carPrice +
                ", carOwner='" + car.carOwner + '\'' +
                ", carAge=" + car.carAge +
                ", carType='" + car.carType + '\'' +
                '}';
            }
        }
        
// ----

// 예시: CarUtil 사용예시
import fc.java.model.CarDTO;
import static fc.java.model.CarUtil.*;

public class CarUtilityTest {
    public static void main(String[] args) {
        CarDTO car = new CarDTO();
        car.carSN = 1111;
        car.carName = "Bonita";
        car.carPrice=9000000;
        car.carOwner = "Pedro";
        car.carAge= 1;
        car.carType = "AUTO";
      
        carPrint(car);
    }
}
post-custom-banner

0개의 댓글