-
Java - Entity, DTO, VO란?Back-end/Java 2021. 8. 2. 13:25반응형
이번 포스팅은 프로젝트를 하며 헷갈리기 쉬운 Data객체에 대해서 포스팅 해볼려고 합니다.
Entity, DTO같은 경우는 워낙 많이 쓰는 객체다보니 알기 쉬울 수도 있습니다.
그러나 VO객체는 DTO와 겹치는 부분이 많지만 저의 개인적인 견해로 어떤 부분에 쓰이는지 설명했습니다.
설명 시작하겠습니다.
❗ 목적
이번 챕터의 목적은 위 3개의 객체가 역할이 어떻게 되고 어느 상황에서 쓰이는지 확인하기 위한 목적입니다.
1. Entity
Entity는 DB Layer접근을 위한 객체입니다. 그리고 각 속성들은 DB의 필드명과 1:1매칭이됩니다.
그리고 이 클래스는 "순수"한 객체(POJO)여야만 합니다. 일관성을 위해서 Setter를 적어주기보다는 Builder패턴을 이용하여 접근합니다. 아래 예시 입니다.
@Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) privae Long id; @Column(nullable = false) private String name; @Column(nullable = false) private String email; @Builder public User(String name, String email) { this.name = name; this.email = email; } public User update(String name, String email) { this.name = name; this.email = email; return this; } }
@Entity로 DB에 접근 할 객체인 것을 알려줍니다. Primary Key를 @ID로 지정하고 그 값을 자동으로 증가시켜주기
위해선 GenerationType.IDENTITY를 설정해줍니다. 그리고 @Column을 이용하여 각 DB필드와 객체 속성들의 이름을 맵핑시켜줍니다.
2. DTO(Data Transfer Object)
DTO는 영어 해석 그대로 데이터를 옮기기 위한 객체입니다. 이것은 DB Layer가 아닌 View Layer에서동작하므로 Service, Controller에서 다뤄지는 객체입니다. 이것은 계속 변경 될 수 있는 객체이기 때문에 Entity와 같이 묶어 사용 할 수 없습니다. 특징으로는 오직 Getter, Setter만 로직으로 가지고 다른 로직은 구현되어 있지 않습니다. 아래 예시입니다.
@Getter @Setter public class User { privae Long id; private String name; private String email; }
저 같은 경우에는 Entity에서 뽑아온 데이터들 중 필요한 데이터만 뽑아내기위해서 DTO를 만들어서 자주 사용합니다.
이러한 사용도 아주 유용한 활용입니다.
3. VO(Value Object)
저는 VO를 잘 사용해보지 않았지만 이번을 계기로 한 번 찾아봤습니다.
VO는 값 객체라고 말합니다. 즉 모든 객체의 인스턴스가 같은 속성 값을 지니고 있어야 같은 객체라는 뜻입니다. 이것은 주로 부모 클래스로 사용되어 공통 부분을 상속받을 때 사용합니다. 그리고 DTO와의 차이점은 "Read-Only"특성을 가지고 있습니다. 솔직히 VO의 중요성을 아직은 느끼지 못해 여기까지만 설명하겠습니다.
이렇게 Back-end에서 Data를 다루는 3가지 대표적인 객체에 대해서 알아봤습니다.
부족한 점은 댓글 남겨주시면 수정하겠습니다~ 긴 글 끝까지 봐주셔서 감사합니다~
반응형'Back-end > Java' 카테고리의 다른 글
Java - Linked List 구현 (0) 2021.08.16 Java - JDBC란? (0) 2021.08.05 Java - ATM Project업그레이드 버전 (0) 2021.07.24 JSP/Servlet 개념 (0) 2021.06.02 Java - Chatting Project (0) 2021.05.30