스프링을 사용하면서 엔티티를 작성할때 @Bulder 어노테이션을 붙였었는데, 다른 코드를 살펴보니
@Builder(builderMethodName = "entityBuilder", toBuilder = true)
이런식으로 @Bulder 어노테이션 옆에 속성값도 붙이는 경우가 있다는 것을 알게 되었다.
@Bulder 어노테이션에 속성을 안붙이고 그냥 사용하던 나는 이 옵션이 왜 사용되는지 궁금해져서 검색하게 되었다.
1. builderMethodName
해당 속성은 빌더 패턴을 위한 메서드의 이름을 지정한다. 기본적으로 Lombok의 @Builder 는 'builder()' 라는 정적 메서드를 생성하는데, 만약 자기가 직접 커스텀한 이름을 짓고싶다면 해당 속성을 이용하여 변경해줄 수 있다.
예를들어, 위의 코드처럼 @Builder(builderMethodName= 'entityBuilder') 로 작성하면 Lombok 에서는 builder() 대신에 entityBuilder() 라는 정적 메서드를 생성하게 된다. 이 메서드는 해당 클래스의 인스턴스를 생성하기 위한 빌더 객체를 반환하게 된다.
2. toBuilder
이 속성은 객체의 현재 상태를 기반으로 새 빌더를 생성하는 메서드를 추가한다. 이 속성을 true 로 설정하면, 기존 객체의 모든 필드값을 가진 새로운 빌더 객체를 얻을 수 있다. 이를 통해 객체를 복사하고 일부 속성만 변경하여 새 객체를 생성하는데 매우 유용하다. 예를들어, toBuilder=true 로 설정하면 Lombok은 toBuilder() 라는 메서드를 생성하게 된다. 이 메서드는 객체의 현재 상태를 반영한 새로운 빌더를 변환하게 된다.
3. 예시코드
@Builder(builderMethodName = "entityBuilder", toBuilder = true)
public class SomeClass {
private String field1;
private int field2;
// 다른 필드들...
}
// 빌더를 사용하여 객체 생성
SomeClass obj1 = SomeClass.entityBuilder()
.field1("value1")
.field2(123)
.build();
// 기존 객체의 상태를 기반으로 새로운 객체 생성
SomeClass obj2 = obj1.toBuilder()
.field2(456) // field2만 변경
.build();
위의 예시코드에서 보면 내가 속성값으로 설정한 entityBuilder()로 객체를 생성하였으며, toBuilder()에서는 내가 원하는 속성값만 변경하여 새로운 객체를 생성하는 코드를 볼 수 있다.
'백엔드 > spring boot' 카테고리의 다른 글
스프링 빈을 등록하는 2가지 방법 (0) | 2024.02.22 |
---|---|
[JPA] @MappedSuperclass (0) | 2024.02.06 |
@Valid 어노테이션 (0) | 2023.11.08 |
Spring) @EnableJpaAuditing 이란? (0) | 2023.10.17 |
UserDetails 커스텀을 통한 @AuthenticationPrincipal 어노테이션 사용 (0) | 2023.10.13 |