모델
✔ 클래스를 역할에 따라 부르는 이름
현실 세계에서는 다양한 객체들이 존재하고, 그 객체들은 자신의 역할이 있는데, 역할이 정해져있다는 의미로
객체를 설계할 때는 모델을 만든다라고 합니다. 모델이라 함은 역할에 따라 전부 구분되어져 부르는 이름이라고 생각하면 됩니다.
💡 클래스 = 모델을 설계하는 도구
① 시작 클래스 (main)
② DTO(Data Transfe Object), VO(Value Object) Model : 데이터를 담는 (이동) 모델 / 데이터를 하나로 수집하는 역할 !
- DTO : 주로 데이터베이스로부터 데이터를 검색하거나 데이터를 저장하기 위해 사용됩니다.
- DTO는 데이터를 저장하는 속성(멤버 변수)과 해당 데이터에 접근하기 위한 getter 및 setter 메서드를 가지고 있습니다.
- DTO는 일반적으로 데이터베이스로부터 데이터를 검색하여 그 결과를 전달하거나, 클라이언트와 서버 간의 데이터 교환에 사용됩니다.
주로 데이터베이스의 레코드나 특정 도메인 객체의 필드를 담고 있는 단순한 데이터 구조로 구성됩니다. DTO는 주로 읽기 전용이며, 데이터를 보관하고 전달하기 위한 목적으로 사용됩니다.
💡 DTO는 일반적으로 다음과 같은 특징을 가지고 있습니다
- 데이터 전달: DTO는 데이터를 전송하거나 전달하기 위한 목적으로 사용됩니다.
예를 들어, 데이터베이스의 결과를 클라이언트에 전달하거나, 클라이언트에서 서버로 데이터를 전송할 때 DTO를 사용할 수 있습니다. - 필드와 접근 메서드: DTO는 데이터 구조를 나타내기 위해 필드(field)를 가지고 있습니다. 일반적으로 필드는 데이터를 저장하거나 조회하는 용도로 사용됩니다.
또한 필요에 따라 접근자(getter)와 설정자(setter) 메서드를 제공하여 필드에 접근할 수 있도록 합니다. - 직렬화(Serialization): DTO는 데이터 전송을 위해 직렬화(serialization)될 수 있습니다.
직렬화는 객체를 바이트 스트림 등의 형태로 변환하여 저장하거나 네트워크 상에서 전송할 수 있도록 하는 과정을 의미합니다. DTO는 주로 네트워크 통신이나 분산 시스템에서 사용되므로 직렬화가 필요할 수 있습니다.
- DTO는 비즈니스 로직을 담지 않고, 순수한 데이터를 전달하는 목적으로 사용됩니다.
따라서 DTO는 보통 속성(필드)과 그에 대한 접근자(getter)와 설정자(setter) 메서드를 가지는 간단한 데이터 구조로 구성됩니다. DTO는 데이터의 일관성과 효율성을 유지하며, 객체 간의 데이터 전달을 간편하게 만들어 줍니다.
③ DAO(Data Access Object) Model : 데이터를 처리(DB)를 하는 모델
- DAO : 데이터베이스에 데이터(VO, DTO)를 저장, 수정하거나 검색, 삭제를 하기 위해서 만들어지는 모델(클래스)
해당 역할을 하는것이 DAO 클래스 - CRUD 동작을 가지고 있는 클래스, 비즈니스 로직을 처리하는 클래스
1) 수집된 데이터를 데이터 베이스에 저장 : insert 수정 : update
2) 데이터베이스에 저장된 데이터를 검색 : select 삭제 : delete CRUD
동작을 통해 DB와 서로 데이터를 주고받을 수 있다
💡 SQL은 Structured Query Language (구조적 질의 언어)로 관계형 데이터베이스 시스템에서 자료를 관리 및 처리하기 위해 설계된 언어이다.
DAO를 만들 때 저장 , 수정, 검색, 삭제 기능을 만들 때 SQL 명령문을 이용해서 만들 수 있다. 명령문을 이용해 DB를 제어할 수 있다.
DAO는 "Data Access Object"의 약어로, 데이터베이스와의 상호작용을 담당하는 객체를 말합니다. DAO는 데이터베이스에 접근하여 데이터를 조회, 삽입, 수정, 삭제 등의 데이터 조작 작업을 수행하는 역할을 담당합니다.
DAO는 일반적으로 데이터베이스에 대한 접근을 추상화하고, 비즈니스 로직과 데이터베이스 로직의 분리를 지원합니다.
이를 통해 애플리케이션의 유지 보수성과 확장성을 향상시킬 수 있습니다.
DAO는 데이터베이스에 직접적인 접근을 처리하므로, 데이터베이스 종류에 따라 다른 DAO 구현체를 작성해야 할 수도 있습니다.
일반적으로 DAO는 CRUD(Create, Read, Update, Delete) 작업을 수행하는 메서드를 포함합니다.
이를 통해 데이터베이스와 상호작용하면서 애플리케이션의 데이터 관리를 담당합니다.
DAO는 데이터베이스 연결, SQL 문 실행, 결과 처리 등을 담당하며, 비즈니스 로직에서는 DAO를 사용하여 데이터를 조작하고 처리합니다.
import java.util.Scanner;
public class CarInsertTest {
public static void main(String[] args) {
//자동차 정보를 키보드로부터 입력을 받아서 데이터 베이스에 저장을 해라.
Scanner scan = new Scanner(System.in);
System.out.print("자동차의 일련번호를 입력해주세요 = ");
int carSN = scan.nextInt();
scan.nextLine();
System.out.print("자동차의 이름을 입력해주세요 = ");
String carName = scan.nextLine();
System.out.print("자동차의 가격을 입력해주세요 = ");
int carPrice = scan.nextInt();
scan.nextLine();
System.out.print("자동차의 소유자의 이름을 입력해주세요 = ");
String carOwner = scan.nextLine();
System.out.print("자동차의 연식을 입력해주세요 = ");
int carYear = scan.nextInt();
scan.nextLine();
System.out.print("자동차의 타입을 입력해주세요 = ");
String carFlue = scan.nextLine();
CarDTO car = new CarDTO();
car.carSN = carSN;
car.carName = carName;
car.carPrice = carPrice;
car.carOwner = carOwner;
car.carYear = carYear;
car.carFlue = carFlue;
CarDAO carDAO = new CarDAO();
carDAO.carInsert(car);
carDAO.carSelect();
}
carDAO.carInsert(car)에서 매개변수로 car를 입력하는 이유는 carInsert() 메서드의 시그니처에 맞게 데이터를 전달하기 위해서입니다.
carInsert() 메서드는 CarDTO 객체를 매개변수로 받아서 해당 객체에 저장된 자동차 정보를 데이터베이스에 저장하는 역할을 수행합니다.
따라서 carDAO.carInsert(car)는 입력받은 자동차 정보를 car 객체에 저장한 후, car 객체를 carInsert() 메서드에 전달하여 데이터베이스에 저장합니다.
반면에 carDAO.carSelect()는 매개변수를 입력하지 않는 이유는 해당 메서드에서는 데이터베이스로부터 자동차 정보를 조회하는 기능만을 수행하기 때문입니다.
자동차 정보를 조회하는 데에는 별다른 매개변수가 필요하지 않기 때문에 carDAO.carSelect()처럼 매개변수를 입력하지 않습니다.
④ Utility Model : 도움(Utility)을 주는 모델
- Utility : 반복적으로 사용해야 될 동작(기능)을 별도의 클래스로 만들어놓고 필요할 때 사용하는 클래스 / 꼭 필요한 것은 아니고, 필요하면 만들어서 사용하면 됩니다.
Utility 모델은 다음과 같은 특징을 가지고 있습니다:- 정적 메서드: Utility 클래스의 메서드는 일반적으로 정적(static)으로 선언됩니다. 이는 객체의 인스턴스 생성 없이 직접 클래스 이름을 통해 메서드에 접근할 수 있다는 의미입니다.
- 인스턴스화 불가능: Utility 클래스는 주로 유틸리티 함수를 제공하기 위한 목적으로 사용되므로, 인스턴스화할 필요가 없습니다. 따라서 일반적으로 생성자는 private으로 선언하여 인스턴스화를 방지합니다.
- 공통 기능 제공: Utility 클래스는 일반적으로 다양한 클래스나 모듈에서 공통으로 사용되는 기능들을 제공합니다. 예를 들어, 문자열 처리, 날짜 및 시간 계산, 파일 조작 등과 같은 작업을 수행할 수 있는 메서드들이 Utility 클래스에 포함될 수 있습니다.
- Utility 모델의 주요 목적은 코드의 재사용성과 유지보수성을 향상시키는 것입니다. 반복적이고 공통적인 작업들을 유틸리티 함수로 추상화하여 중복 코드를 피하고, 코드를 모듈화하여 관리하기 쉽게 만듭니다.
또한 Utility 클래스는 객체 지향 프로그래밍에서 정적 메서드를 통해 유틸리티 함수를 호출하기 때문에, 호출하는 코드가 간결해지고 사용하기 쉬워집니다. - 주의할 점은 Utility 클래스가 지나치게 많은 역할과 책임을 가지지 않도록 하는 것입니다.
즉, 단일 책임 원칙을 지키기 위해 너무 많은 기능을 Utility 클래스에 넣지 않는 것이 좋습니다.
작은 범위의 관련된 유틸리티 함수들을 포함하는 작은 클래스들을 만들고,
필요한 유틸리티 함수를 필요한 곳에서 적절히 활용하는 것이 바람직합니다.
Utility 모델은 주로 간단한 독립적인 메서드들의 집합으로 구성되며, 특정한 작업을 수행하기 위한 유틸리티(도구) 함수를 제공하는 클래스입니다.
'[ BACKEND] > JAVA_객체지향' 카테고리의 다른 글
[JAVA] VO클래스 설계 시 중요사항 (정보은닉 , Getter&Setter, 생성자 메서드, 오버로딩) (0) | 2023.06.14 |
---|---|
[JAVA] 객체 접근 권한 & 패키지 (1) | 2023.06.13 |
[JAVA] 클래스로 객체 모델링 (0) | 2023.06.11 |
[JAVA] 메서드 오버로딩 / 정적 바인딩 (1) | 2023.06.10 |
[JAVA] 메서드와 변수 (1) | 2023.06.09 |