클래스(모델)의 종류

둥냥둥냥둥·2023년 6월 9일
0
post-thumbnail

현실세계에는 다양한 객체들이 존재하고 그 객체들은 자신의 역할이 정해져 있다. 역할이 정해져 있다는 의미로 객체를 설계할 때 모델을 만든다고 한다. 객체지향프로그래밍에서는 클래스로 객체를 설계하기 때문에 클래스를 모델을 설계하는 도구라고도 다.

[학습 목표]

  • 모델(Model)이란 무엇인가
  • DTO, VO 클래스가 왜 필요할까
  • DAO 클래스가 왜 필요할까
  • Utility 클래스가 왜 필요할까

모델(Model)이란 무엇인가

✓ 객체_Object(현실적) = 클래스_class(프로그래밍적)= 모델_Model(소프트웨어공학적)
✓ 객체지향프로그래밍에서 클래스를 역할에 따라 부르는 이름을 모델(Model)이라고 부른다.
✓역할에따라다양한모델을만들어사용할수있다.

우리가 클래스로 만들어 사용하게 될 모델의 종류는 아래와 같다.

  • 식작 클래스
  • DTO, VO Model
  • DAO Model
  • Utillity Model

그렇다면 왜? DTO, VO, DAO, Utillity 클래스 들이 필요한 것일까?


DTO, VO 클래스가 왜 필요할까

DTOVO
목적계층간 데이터 전달값 자체 표현
동등성필드값이 같아도 같은 객체 아니다.필드값이 같으면 같은 객체
가변성setter존재 시 가변, setter 비 존배시 불가변불변
로직getter/setter외의 로직이 필요하지 않음getter/setter외의 로직이 있어도 무방

DTO(Data Transfer Object)

DTO는 계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 데이터 객체

  • DTO는 즉, getter/setter 메서드만 가진 클래스를 의미합니다.
  • DB에서 데이터를 얻어서 Service나 Controller 등으로 보낼 때 사용합니다.
  • 즉 엔티티를 DTO 형태로 변환한 후 사용합니다.

VO(value Object)

VO는 DTO와 달리 Read-Only속성을 지닌 값 오브젝트입니다. DTO는 setter를 가지고 있어서 값이 변할 수 있지만 VO의 경우에는 getter만 가지고 있어서 수정이 불가능합니다.

DTO와 VO의 차이점은 DTO는 인터턴스 개념이고, VO는 리터럴 값 개념입니다. VO는 값들에 대해 Read-Only를 보장해줘야 존재의 신뢰성이 확보되지만 DTO의 경우에는 단지 데이터를 담는 그릇의 역할일 뿐 값은 그저 전달되어야 할 대상일 뿐입니다. 따라서 값 자체에 의미가 있는 VO와 전달될 데이터를 보존해야 하는 DTO의 특성상 개념이 다릅니다.

따라서 VO의 핵심은 두 객체의 모든 필드 값들이 동일하면 두 객체는 같다입니다. 따라서 완전히 값 자체 표현 용도로만 사용하는 게 목적이라면, 두 객체의 모든 필드 값들이 모두 같으면 같은 객체이도록 만드는 것(equals() 와 hashCode()의 오버라이딩)이 중요하지, 메소드는 어떤 메소드가 있든 말든 상관 없습니다.

출처 : https://dkswnkk.tistory.com/500

DTO, VO

  • 데이터를 하나로 묶어야 될 경우
    • 바구니가 필요로 하다, 데이터를 하나로 수집 하는 역할
public class CarDTO {
    public int carSn;
    public int carPrice;
    public String carName;
    public int carYear;
    public String carType;
}

DAO 클래스가 왜 필요할까

DAO

  • DAO(Data Access Object)

    • DAO는 실제로 DB의 data에 접근하기 위한 객체
    • 실제로 DB에 접근하여 data를 삽입, 삭제, 조회, 수정 등 CRUD 기능을 수행
    • Service와 DB를 연결하는 고리 역할
    • Repository package가 바로 DAO
  • 데이터베이스에 VO, DTO를 저장,수정 하거나 검색,삭제를 하기 위해서 만들어지는 모델

    • (CRUD 동작을 가지고있는 클래스, 비즈니스 로직을 처리하는 클래스)
CRUDSQL
Createinsert
Readselect
Updateupdate
Deletedelete

DAO(Data Access Object)

  • 수집된 데이터를 데이터베이스에 저장, 수정

    • 저장 : insert
    • 수정 : update
  • 데이터베이스에 저장된 데이터를 검색, 삭제

    • 검색 : select

    • 삭제 : delete


public class CarDAO {
     C.R.U.D
     C = Create
     R = Read
     U = Update
     D = Delete

    public void carInsert(CarDTO carDTO){
        // DB 연결, Insert SQL
        System.out.println("car 정보가 DB에 저장이 되었습니다.");
    }

    public void carSelect(CarDTO carDTO){
        // DB 연결, Insert SQL
        System.out.println("car 정보가 DB에 출력이 되었습니다.");
    }

    public void carUpdate(CarDTO carDTO){
        // DB 연결, Insert SQL
        System.out.println("car 정보가 DB에 Update 되었습니다.");
    }

    public void carDelete(CarDTO carDTO){
        // DB 연결, Insert SQL
        System.out.println("car 정보가 DB에 삭제 되었습니다.");
    }
}

Utility 클래스가 왜 필요할까

Utillity

  • 반복적으로 사용해야 될 동작을 별도의 클래스로 만들어 놓고 필요할 때 사용하는 클래스
  • 꼭 필요한 것을 아니고, 필요하면 만들어서 사용하면 된다.
  • 자바에서도 java.util 패키지에 이러한 Utility 클래스가 많이 있다.

Utility, Helper, Facade (도움을 주는 클래스들)

1 날짜, 통화, 시간 정보 획득 기능(동작)
2 인코딩(한글 깨짐) 기능(동작)
3 DAO이외의 별도 기능(동작) -> main 메서드에서 분리해서 코딩

public class CarUtility {
    public void carPtrint(CarDTO carDTO) {
        System.out.println(carDTO.carSn + "\t" + carDTO.carName + "\t" + carDTO.carPrice + "\t" + carDTO.carYear + "\t" + carDTO.carType);
    }
}
profile
Java 먹자

0개의 댓글