개발 무지렁이

[Spring Boot] BaseEntity에 사용되는 @SuperBuilder와 @MappedSuperclass 본문

Backend/스프링부트

[Spring Boot] BaseEntity에 사용되는 @SuperBuilder와 @MappedSuperclass

Gaejirang-e 2022. 12. 6. 10:40

@SuperBuilder


자식클래스의 빌더*를 사용하여 부모클래스의 필드까지
한 번에 세팅하기 위해 자식클래스와 부모클래스 모두에 @SuperBuilder를 사용한다.
❓ 빌더 패턴
: 복합 객체의 생성과정과 표현방법을 분리하여,
  동일한 생성절차에서 서로 다른 표현결과를 만들 수 있게 하는 패턴이다.

  1. 생성자 파라미터가 많을 경우 가독성을 위해 사용
  2. 순서가 상관없다

빌더x

Member member = new Member("member1", "{noop}1234", "nick", "user1@test.com")

빌더o

Member member = Member.builder()
                .username("member1")
                .password("{noop}1234")
                .nickname("nick")
                .email("user1@test.com")
                .build();

@MappedSuperclass


공통 매핑정보가 필요할 때, 부모클래스에 선언

BaseEntity


@Getter
@SuperBuilder // 자식클래스의 빌더를 이용하여 부모클래스의 필드(createDate, modifyDate)까지 한번에 세팅할 수 있다
@MappedSuperclass // 공통매핑정보(createDate, modifyDate)가 필요할 때, 부모클래스에 선언
@NoArgsConstructor(access = PROTECTED)
@EntityListeners(AuditingEntityListener.class) // Audit이란, 시간에 대해서 자동으로 값을 넣어주는 기능
@ToString
public class BaseEntity {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    private Long id;
    @CreatedDate
    private LocalDateTime createDate;
    @LastModifiedDate
    private LocalDateTime modifyDate;
}
Comments