spring을 사용하면 가장 먼저 접하는 용어 중 하나가 DTO DAO VO 일 것이다.
DAO
DAO(Data Access Object)는
데이터베이스의 data에 접근하기 위한 객체이다. DataBase에 접근하기 위한 로직 & 비즈니스 로직을 분리하기 위해 사용한다.- PA, Hibernate, Mybatis 등의 Persistence Framework를 통해 접근한다.
DTO
DTO(Data Transfer Object
는 계층 간 데이터 교환을 하기 위해 사용하는 객체로 DTO는 로직을 가지지 않는 순수한 데이터 객체(getter & setter)만 가지는 클레스이다. 따라서 DTO는 데이터 전송(이동) 객체라는 의미를 가진다.@Getter @Setter class ArticleDTO { private String title; private String content; private String writer; }
유저가 입력한 데이터를 DB에 넣으면 →
유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송 →
해당 DTO를 받은 서버가 DAO를 이용하여 DB로 데이터를 집어넣는다.
VO
VO(Value Object)
값 오브젝트로써 값을 위해 쓰인다.- read-Only 특징(사용하는도중에 변경 불가능하며 오직 읽기만 가능 -getter 메서드만 가진 클래스)
equals(), hashcode()
오버라이딩 필요하다.- DTO와 유사하지만 DTO는 Setter를 가지고 있어 값이 변할 수 있다.
- VO 내부에 선언된 필드 모든 값들이 같아서 동일 객체인지 판단하기 위함이다.
@Getter
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);
}
}
Entity
- 실제 데이터베이스와 1:1 매칭되는 클래스
- DB 테이블 내 존재하는 컬럼만을 속성(필드)으로 가져야 한다.(테이블 내에 존재하지 않는 칼럼을 가져도 안됨)
- 상속받거나 구현 클래스면 안된다.
- 최대한 외부에서 Entity 클래스의 getter/setter를 사용하지 않도록 클래스 내부에서 필요한 로직을 구현해야 함
- setter 무분별하게 사용 금지
- 객체의 일관성을 보장할 수 없음
- 구현 메소드는 주로 Service Layer에서 사용함
- Domain Logic
- Presentation Logic을 가지면 안 됨
// Article 엔티티
@Entity
@Getter
@Table(name = "article")
public class Article {
// 기본 생성자 protected로 접근 제한 (기본 생성자 접근 제한자는 protected 까지 허용
// 기본 생성자의 접근 제한자를 private으로 걸면 추후에 Lazy Loading 사용 시 Proxy 관련 예외가 발생)
protected Article(){};
...
}
// 객체 생성 시 값 세팅 (빌더패턴 사용)
Article article = Article.Builder()
.title("Harry Potter")
.content("...")
.writer("J. K. Rowling.")
.build();
'Spring' 카테고리의 다른 글
[JSP] EL 과 JSTL 정리 (0) | 2022.10.26 |
---|---|
[JSP] 기초 문법 (0) | 2022.10.25 |
[JSP] Java Beans (0) | 2022.10.22 |
[JSP] Cookie (0) | 2022.10.20 |
[JSP] Session (0) | 2022.10.20 |