백엔드/spring boot

@Builder 어노테이션

STUFIT 2023. 12. 18. 10:19
반응형

스프링을 사용하면서 엔티티를 작성할때 @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()에서는 내가 원하는 속성값만 변경하여 새로운 객체를 생성하는 코드를 볼 수 있다.

 

반응형