DAO,VO,DTO

강상은·2023년 12월 3일
0
post-thumbnail

1. DAO(Data Access Object)

데이터를 전문적으로 처리하는 객체 DAO는 주로 VO를 단위로 처리 DAO를 호출하는 객체는 DAO가 내부에서 어떤식으로 데이터를 처리하는지 알 수 없도록 구성합니다. 이 때문에 JDBC 프로그램을 작성한다는 의미는 실제로 DAO를 작성한다는 의미

2. VO(value object)

VO 혹은 Entity / 보관용도 / 값을 저장하고 있는 객체

객체 지향 프로그램에서는 데이터를 객체라는 단위로 처리, 테이블의 한 행(row)을 자바프로그램에서는 하나의 객체가 됨

데이터베이스는 하나의 데이터를 엔티티(entity)라고 함, 자바 프로그램에서 이를 처리하기 위해 테이블과 유사한 구조의 클래스를 만들어서 객체로 처리하는 방식을 사용하고, 이 때 만들어진 객체는 값을 보관하는 용도라는 의미에서 Value Object라고 함

3. DTO(data transfer object)

데이터를 전송하는 객체

vo 가 dto로 변환 (modelMapper) 다시 dto를 vo로 변환


  • DTO는 순수하게 데이터를 저장하고, 데이터에 대한 getter, setter 만을 가져야한다고 한다. 위키피디아에 따르면 DTO는 어떠한 비즈니스 로직을 가져서는 안되며, 저장, 검색, 직렬화, 역직렬화 로직만을 가져야 한다고 한다.
  • 말 그대로 데이터를 전송하기 위해 사용하는 객체라서 그 안에 비즈니스 로직 같은 복잡한 코드는 없고 순수하게 전달하고 싶은 데이터만 담아놓음
    • 직렬화는 DTO를 Byte, Json, Xml 등의 형태로 변환하는 것을 의미한다. 역직렬화는 그 반대를 의미한다.

3.1 ModelMapper

  • 하나의 객체 모델(VO)이 다른 객체 모델(DTO)에 매핑되는 방식(반대도 성립)을 자동으로 결정하여 개체 매핑을 쉽게 만드는 것

주요 기능과 특징

  1. 자동 매핑:
    • ModelMapper는 객체의 필드명이나 메서드명이 일치하는 경우 자동으로 값을 매핑합니다. 필드 타입이나 이름이 다르더라도 설정을 통해 유연하게 대처할 수 있습니다.
  2. 커스텀 매핑:
    • 매핑이 자동으로 이루어지지 않는 특정 필드에 대해서는 개발자가 직접 매핑 규칙을 정의할 수 있습니다. 이를 통해 복잡한 매핑 로직을 처리할 수 있습니다.
  3. 변환 기능:
    • 서로 다른 타입의 데이터를 변환하는데 유용한 기능을 제공합니다. 예를 들어, 문자열을 날짜로 변환하거나, 열거형을 다른 타입으로 변환하는 등의 작업이 가능합니다.
  4. 프로퍼티 매핑:
    • 필요에 따라 객체의 프로퍼티(속성) 간의 매핑도 처리할 수 있습니다.
  5. 중첩 매핑:
    • 객체 내부에 또 다른 객체가 중첩된 경우에도 재귀적으로 매핑을 수행할 수 있습니다.

간단한 예제를 통해 설명하면, 예를 들어 BoardDTO 클래스와 Board 클래스가 있다고 가정했을 때:

javaCopy code
public class BoardDTO {
    private String title;
    private String content;
    // getters, setters, 기타 메서드
}

public class Board {
    private String title;
    private String content;
    // getters, setters, 기타 메서드
}

ModelMapper를 사용하면 다음과 같이 두 객체 간의 매핑이 가능합니다

javaCopy code
ModelMapper modelMapper = new ModelMapper();
BoardDTO boardDTO = new BoardDTO();
boardDTO.setTitle("Sample Title");
boardDTO.setContent("Sample Content");

Board board = modelMapper.map(boardDTO, Board.class);

이렇게 함으로써 boardDTO의 데이터가 Board 객체로 복사되어 매핑됩니다.

Matching Strategy

Standard(기본값)
source 속성을 destination 속성과 지능적으로 일치시킬 수 있으므로, 모든 destination 속성이 일치하고
모든 source 속성 이름에 토큰이 하나 이상 일치해야함

MatchingStrategies.STANDARD

토큰을 어떤 순서로도 일치시킬 수 있다.
모든 destination 속성들이 매치되어야 한다.
모든 source 속성은 최소 하나 이상의 이름이 매치가 되어야 한다.

MatchingStrategies.LOOSE

토큰을 어떤 순서로도 일치시킬 수 있다.
마지막 destination 속성 이름은 모든 토큰이 일치해야 한다.
마지막 source 속성 이름에는 일치하는 토큰이 하나 이상 있어야 한다.

=> 계층 구조의 마지막 destination 속성만 일치하도록하여 source 속성을 destination 속성에 일치시킬 수 있다

MatchingStrategies.STRICT

source 속성과 destination 속성의 이름이 정확히 일치 할때만 매핑해준다

0개의 댓글