본문 바로가기

Vue/bookStore

book Entity - Setter ? Builder?

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는 사용되지 않은 것을 볼 수 있다.

어노테이션에 관해

 

 

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의 장점은

 

  1. 필요한 데이터만 설정할 수 있다
  2. 유연성을 확보할 수 있다
  3. 가독성을 높일 수 있다
  4. 불변성을 확보할 수 있다

다음 블로그에 잘 설명되어있다. [ https://mangkyu.tistory.com/163 ]

 

 

 

 

 

출처

https://velog.io/@aidenshin/%EB%82%B4%EA%B0%80-%EC%83%9D%EA%B0%81%ED%95%98%EB%8A%94-JPA-%EC%97%94%ED%8B%B0%ED%8B%B0-%EC%9E%91%EC%84%B1-%EC%9B%90%EC%B9%99

https://bloowhale.tistory.com/97

'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