Forest Gump?

Entity, DTO, VO,DAO 란? 본문

카테고리 없음

Entity, DTO, VO,DAO 란?

code1010 2021. 9. 23. 18:09

 

1. Entity 란?

Entity 클래스는 실제 DataBase의 테이블과 1 : 1로 매핑 되는 클래스로, DB의 테이블내에 존재하는 컬럼만을 속성(필드)으로 가져야 한다.
Entity 클래스는 상속을 받거나 구현체여서는 안되며, 테이블내에 존재하지 않는 컬럼을 가져서도 안된다.


예를들어 ARTICLE (게시판) 테이블 내에 TITLE, CONTENT, WRITER를 컬럼으로 가지고 있을 경우, Entity 클래스의 속성도 title, content, writer만 가져야합니다.

@Entity
class Article {
    private String title;
    private String contents;
    private String writer;
}

 

2. DTO(Data Transfer Object)

DTO(Data Transfer Object)는 데이터 전송(이동) 객체라는 의미를 가지고 있다. DTO는 주로 비동기 처리를 할 때 사용한다.


예를들어 Article 클래스내에 title, content, writer, regDate, modDate 를 필드로 가지고 있으며, JSON 형식으로 변환해서 보내야할 속성은 title, content, writer라고 가정할때, 해당 속성만을 클래스로 가지는 DTO는 title, content, writer만 갖게 합니다.

@Getter @Setter
class ArticleDTO {
  private String title;
  private String content;
  private String writer;
}

 

3. VO(Value Object)

VO(Value Object)는 말 그대로 값 객체라는 의미를 가지고 있다.
대부분 DTO와 비슷한 개념이지만  + READ ONLY 의 속성을 갖고있다. 

VO의 핵심 역할은 equals()와 hashcode() 를 오버라이딩 하는 것이다.
VO 내부에 선언된 속성(필드)의 모든 값들이 VO 객체마다 값이 같아야, 똑같은 객체라고 판별한다.

@Getter @Setter
@Alias("article")
class ArticleVO {
    private Long id;
    private String title;
    private String contents;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Article article = (Article) o;
        return Objects.equals(id, article.id);
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }
}

4. DAO (Data Access Object) 


실제 DB에 접근하는 객체

(ex. Service -(DAO) ==>  DB )VO(Value Object)

Service와 DB를 연결하는 역활.

- SQL을 사용하여 DB 접근한 후 적절한 CRUD API를 제공.