Entity
@Entity
@Getter
@ToString
@Table(name = "book")
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Builder
public class Book {
@Id
@Column(name = "bid")
private long bid;
@Column(unique = true)
private String author;
private String subject;
private int price;
private LocalDate published_date;
private String tag;
private String detail_tag;
private String keyword;
private String isDel;
public Book(Long bid, String author, String subject, int price, LocalDate published_date, String tag, String detail_tag, String keyword, String isDel) {
this.bid = bid;
this.author = author;
this.subject = subject;
this.price = price;
this.published_date = published_date;
this.tag = tag;
this.detail_tag = detail_tag;
this.keyword = keyword;
this.isDel = isDel;
}
}
Book엔티티 클래스에 선언된 어노테이션을 보면 @Getter는 사용되었지만 @Setter는 사용되지 않은 것을 볼 수 있다.
어노테이션에 관해
- 엔티티 객체에 기본생성자가 필요한 이유 링크
- 생성자 ( 기본생성자 모든 필드의 생성자 ) https://dingue.tistory.com/14
- @AllArgsConstructor의 단점 : 기존에 멤버 변수의 순서를 바꾼다면, 기존 생성자의 파라미터의 순서가 바뀐다. 만약 두 멤버 변수의 타입이 동일하다면 인지하기 어렵다
- 엔티티 매핑 https://gmlwjd9405.github.io/2019/08/11/entity-mapping.html
Setter의 단점?
엔티티를 작성할때 @Setter어노테이션을 사용하여 모든 필드에 Setter를 생성했다.
Setter을 열어두면 여기저기 (컨트롤러, 서비스 등등) 에서 엔티티의 값을 변경(update) 할 수 있으므로
1. 일관성을 유지하기 힘들고
2. Setter메소드는 의도를 찾기 힘들다. 예를들어
Person person = findById(id);
person.setName(updateDto.getName);
person.setAddress(updateDto.getAddress);
person.setPhoneNumber(updateDto.getPhoneNumber);
return person;
위 코드를 보면 Setter가 person객체를 set메소드를 통해 변경하는데 무엇을 하는지 알 수 없다
즉 그냥 값을 Setting 한다는 것만 알 수 있지 Person의 정보를 수정하기 위해 값을 다시 Setting 한다고 단번에
생각하기는 힘들다.
Builder 사용 이유
빌드 패턴을 사용하여 객체를 생성할 수 있으며 객체 생성 후 setter를 통한 접근을 제한 할수 있어서 불변형 객체를 만들 수 있다. 그리고 어느 필드에 어떤 값이 들어가야하는지 명확히 알 수 있다.
즉 builder의 장점은
- 필요한 데이터만 설정할 수 있다
- 유연성을 확보할 수 있다
- 가독성을 높일 수 있다
- 불변성을 확보할 수 있다
다음 블로그에 잘 설명되어있다. [ https://mangkyu.tistory.com/163 ]
출처
'Vue > bookStore' 카테고리의 다른 글
4. bookStore - Book CRUD (0) | 2022.02.06 |
---|---|
3. BookStore jwtToken 인증 추가 (0) | 2022.02.06 |
2. bookStore (기본 세팅) (0) | 2022.01.31 |
1. bookStore (DB 테이블 생성) (0) | 2022.01.31 |
Springboot 와 Vue.js 를 사용하여 bookStore만들기 (0) | 2022.01.31 |