현실엔 다양한 객체들이 존재하고, 그 객체들은 각각 역할이 정해져있다. 이것을 바탕으로 객체를 설계할 때 모델(model)을 만든다고도 말한다.
객체지향 프로그래밍에서는 클래스로 객체를 설계하기 때문에 클래스를 모델을 설계하는 도구라고 말한다.
모델(Model) : 객체지향 프로그래밍에서 클래스를 역할에 따라 부르는 이름
역할에 따라 다양한 모델을 만들 수 있다.
우리가 클래스로 만들어 사용하게 될 모델의 종류
1. DTO, VO Model : 데이터를 담는(이동)모델
2. DAO Model : 데이터를 처리(DB)하는 모델(Data Access Object)
3. Utility Model : 도움을 주는 모델(Helper Object)
데이터를 하나로 묶어야 될 경우(데이터를 하나의 구조에 수집하는 역할)
ex) 자동차의 정보를 키보드로부터 입력 받아서 다른 메서드로 이동 해야 되는 경우
-> CarDTO에 데이터를 입력받은 후 다른 메서드로 이동시키게 됨
public class CarTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("자동차 일련번호 : ");
int carSn = scan.nextInt();
scan.nextLine();
System.out.println("자동차 이름 : ");
String carName = scan.nextLine();
System.out.println("자동차 가격 : ");
int carPrice = scan.nextInt();
scan.nextLine();
System.out.println("자동차 소유자 : ");
String carOwner = scan.nextLine();
System.out.println("자동차 연식 : ");
int carYear = scan.nextInt();
scan.nextLine();
System.out.println("자동차 타입 : "); // G(휘발유), D(경유)
String carType = scan.nextLine();
CarDTO car = new CarDTO();
//콘솔로 받는 데이터를 DTO에 연결(데이터를 객체에 수집해 하나로 모음)
car.carSn = carSn;
car.carName = carName;
car.carPrice = carPrice;
car.carOwner = carOwner;
car.carYear = carYear;
car.carType = carType;
carInfo(car); // 인자로 인스턴스Car를 전달
}
//Q. 매개변수로 자동차의 정보를 받아서 출력하는 메서드
public static void carInfo(CarDTO car) { // call By Reference 형식으로 객체를 매개변수로 전달
System.out.println(
"자동차 일련번호: " + car.carSn + "\n" +
"자동차 이름: " + car.carName + "\n" +
"자동차 가격: " + car.carPrice + "\n" +
"자동차 소유자: " + car.carOwner + "\n" +
"자동차 연식: " + car.carYear + "\n" +
"자동차 타입: " + car.carType);
}
}
DB에 있는 데이터를 프로그램에서 가져와서 담는 경우에도 DTO를 활용한다.
데이터베이스에 데이터(VO, DTO)를 저장, 수정 하거나 검색, 삭제를 하기 위해서 만들어지는 모델
DAO(Data Access Object) : CRUD 동작을 가지고 있는 모델, 비즈니스 로직을 처리하는 클래스
public class CarDAO {
public void createCar(CarDTO car) {
//DB연결, Insert SQL
System.out.println("car정보가 DB에 저장됨");
}
public void insertCar() {
System.out.println("car정보가 표시됨");
}
... DB연결이 아닌 비즈니스 로직만 표현함
}
//DAO에선 DB연결 및 CRUD와 관련한 비즈니스 로직을 담당한다.
반복적으로 사용해야 될 동작(기능)을 별도의 클래스로 만들어 놓고 필요할 때 사용하는 클래스
자바에서도 java.util 패키지에 이러한 utility클래스가 많이 있다.
도움을 주는 클래스들
날짜, 통화교환, 시간 정보 획득 기능(동작)
인코딩 기능(동작)
DAO이외의 별도 기능(동작)
->main 메서드에서 분리해서 코딩(모듈화)