예전에 했던 자바 콘솔 프로그램을 복습하면서 포트폴리오를 만들고있다.
스프링에서는 VO라고 쓰는 클래스를 자바에서 콘솔만으로 프로그램을 만들때는 DTO라고 썼었다.
당시 강사님께 뭐가 다른건지 질문을 했었지만 명확한 답변은 듣지 못했거나 기억이 나지 않고,
비슷하게 사용한다고만 이해하고 넘어갔었다.
갑자기 궁금해서 Entity는 무엇인지, DTO와 VO의 차이점에 대해 검색해보았다.
Entity
Entity 클래스는 DB의 테이블내에 존재하는 컬럼만을 속성(필드)으로 가지는 클래스를 말합니다. 엔티티 클래스는 상속을 받거나 구현체여서는 안되며, 테이블내에 존재하지 않는 컬럼을 가져서도 안됩니다.
RDB(Relational DataBase, 관계형 데이터베이스)에서의 Entity(개체)란, 현실세계에서의 개체를 표현하기 위한 유형, 무형의 실체로써, Entity를 표현하기 위해서 테이블을 생성합니다.
VO(Value Object)
VO(Value Object)는 말 그대로 값 객체라는 의미를 가지고 있습니다. VO의 핵심 역할은 equals()와 hashcode() 를 오버라이딩 하는 것입니다. 즉, VO 내부에 선언된 속성(필드)의 모든 값들이 VO 객체마다 값이 같아야, 똑같은 객체라고 판별합니다.
VO는 Getter와 Setter를 가질 수 있으며, VO는 테이블 내에 있는 속성 외에 추가적인 속성을 가질 수 있으며, 여러 테이블(A, B, C)에 대한 공통 속성을 모아서 만든 BaseVO 클래스를 상속받아서 사용할 수 도있습니다.
DTO(Data Transfer Object)
DTO(Data Transfer Object)는 데이터 전송(이동) 객체라는 의미를 가지고 있습니다. DTO는 주로 비동기 처리를 할 때 사용합니다. 비동기 처리에서도 JSON 데이터 타입으로 변환해야하는 경우, Spring Boot에서 Jackson 라이브러리를 제공하는데, Jackson은 ObjectMapper를 사용해서 별다른 처리 없이도 객체를 JSON 타입으로 변환시켜 줍니다.
비동기처리를 할 때에, VO 클래스에 있는 모든 속성을 JS로 JSON 형식으로 반환해야 하는 경우 DTO를 따로 만들어줄 필요성까지는 없지만, 만약에 자신이 필요한 속성들만 추려서 JSON 형식으로 파싱하여 보내줘야하는 경우, 데이터 가공 처리를 위해서 DTO를 만들어주는 것입니다.
예를들어 ArticleVO 클래스내에 title, content, writer, regDate, modDate, delSts(삭제여부) 속성을 가지고 있으며, JSON 형식으로 변환해서 보내야할 속성은 title, content, writer라고 가정할때, 해당 속성만을 클래스로 가지는 DTO를 아래처럼 만들면 됩니다.
@Getter @Setter
class ArticleDTO {
private String title;
private String content;
private String writer;
}
출처:
webdevtechblog.com/entity-vo-dto-666bc72614bb
gmlwjd9405.github.io/2018/12/25/difference-dao-dto-entity.html
'언어공부 > JAVA&SPRING' 카테고리의 다른 글
이클립스, STS 서버 구동시간 늘리기 Server Tomcat Server at localhost was unable to start within 45 seconds (0) | 2021.01.22 |
---|---|
패스트캠퍼스 Java 웹 개발 마스터 올인원 패키지 Online. 챌린지 참여 후기 (0) | 2020.10.14 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 50회차 미션 (0) | 2020.09.28 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 49회차 미션 (0) | 2020.09.27 |
[패스트캠퍼스 수강 후기] 자바 인강 100% 환급 챌린지 48회차 미션 (0) | 2020.09.26 |
댓글