엔티티(Entity)
- JPA @Entity
- 실제 Database의 테이블과 1:1 매핑
- DB의 테이블내에 존재하는 컬럼만을 속성으로 가짐
- 상속받거나 구현체여서는 안됨, 존재하지 않는 컬럼을 가지면 안됨
- VO와 다르게 식별성을 가짐
무분별한 Setter는 객체의 일관성 보장을 해치므로 사용 자제(객체의 생성자에 값 추가하는 형식으로 사용)
// <객체 생성자 설정>
@Builder
public User(String username, String password, String name) {
this.username = username;
this.password = password;
this.name = name;
}
// <객체 생성 시 값 세팅(Builder 패턴)>
User user = User.Builder()
.username("name")
.password("1234")
.name("name")
build();
// ex1 ) Spring Boot Entity.class
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@ToString
public class Member {
@Id
private String email;
private String password;
private String name;
public Member(String email){
this.email = email;
}
VO(Value Object)
- 값 객체
- 값이 같으면 같은 객체라고 인식하는 식별성 없는 작은 객체
- 핵심적인 역할 : equals() 와 hashcode() 를 overriding
- 테이블 속성 외의 추가적인 속성 가짐
- ReadOnly
//ex) Spring Boot VO
class BookVO {
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;
BookVO bookVO = (BookVO) o ;
return Objects.equals(id, bookVO.id);
}
@Override
public int hashCode() {
return Objects.hash(id);
}
}
DTO(Data Transfer Object)
- DB의 데이터를 Service나 Controller 등올 보낼 때 사용하는 데이터 전송 객체
- DB의 데이터가 Presentation Logic Tier로 넘어올때는 DTO로 변환되어 오고감
- 네트워크 전송 시 Data holder의 느낌이 강함
- 데이터 가공 처리를 감싸주는 객체
//ex) Spring Boot DTO
class MenuDTO() {
private String name;
private String description;
private int price;
}
'IntelliJ > Spring boot' 카테고리의 다른 글
[Springboot]게시판 만들기 3장 서비스 계층과 DTO - hoyhi (0) | 2021.04.26 |
---|---|
[Springboot]게시판 만들기 2장 Querydsl 설정 및 테스트 - hoyhi (0) | 2021.04.25 |
[Springboot]게시판 만들기 1장 프로젝트 설정 및 테이블 생성 - hoyhi (0) | 2021.04.25 |
Spring Model 객체 (0) | 2021.02.21 |
스프링부트 프로젝트 생성 (0) | 2021.02.21 |