Anyway

[Spring] @Builder 패턴 사용하기 본문

Java/Spring

[Spring] @Builder 패턴 사용하기

dyana 2024. 8. 27. 10:32
[@Builder 패턴 사용하기]

 

개발을 다시 시작하면서 @Builder 어노테이션을 처음 써 봐 헷갈리는 부분이 있어 개념 정리를 했다. 😬

 

1. 생성자(Constructor)

  • 역할 : 객체를 생성할 때 호출되며 필수적인 초기화 작업을 수행한다. 
  • 사용 방식 :  'new' 키워드를 사용하여 직접 호출한다.
  • ex
DeptListResDto dto = new DeptListResDto();

 

 

2. Builder 패턴

  • 역할 : 복잡한 객체를 생성할 때, 보다 유연하고 가독성 좋은 방법을 제공한다. 
  • 사용 방식: 'builder()' 메서드를 호출하여 빌더 객체를 생성하고, 필요한 필드를 설정한 후 'build()' 메서드를 호출하여 최종 객체를 생성한다.
  • ex
DeptListResDto dto = DeptListResDto.builder()
                                   .dept(deptVo)
                                   .build();

 

차이 

  • 생성자는 객체 생성과 초기화를 한 번에 수행하며, 매개변수의 순서가 중요하다. 
  • 빌더 패턴은 객체를 생성하기 전에 필요한 필드들을 체이닝 방식으로 설정하며, 매개변수의 순서와 관계없이 가독성이 높아지고, 일부 필드만 설정할 수도 있다. 

 

DeptListResDto.builder() 만으로 생성자가 될 수 있나? 싶었는데 객체를 생성하기 위한 빌더 객체를 반환하는 메서드로 생성자와는 다르며 객체를 생성하기 위한 과정 중의 첫 단계로 이해할 수 있겠다.

 

@builder 어노테이션

'@Builder'는 Lombok 라이브러리에서 제공하는 어노테이션으로 빌터 패턴을 쉽게 구현할 수 있도록 도와준다.

빌더 패턴은 복잡한 객체를 생성하는 방법 중 하나로 생성자나 팩토리 메서드와 비교해 가독성이 높고 유연한 객체 생성을 가능하게 한다. 

  • 가독성 :
    여러 필드가 있는 객체를 생성할 때 매개변수의 순서에 의존하지 않고 명시적으로 어떤 필드를 설정하는지 알 수 있다
  • 유연성 :
    선택적 매개변수를 다룰 때 유용하다. 일부 필드만 설정하고 나머지는 기본값을 사용할 수 있다. 
import lombok.Builder;
import lombok.ToString;

@Builder
@ToString
public class Person {
    private String name;
    private int age;
    private String address;

    // Getters는 Lombok의 @Getter를 사용할 수 있습니다.
}

public class Main {
    public static void main(String[] args) {
        // 빌더 패턴을 사용하여 Person 객체 생성
        Person person = Person.builder()
                              .name("John Doe")
                              .age(30)
                              .address("1234 Elm Street")
                              .build();

    }
}

 

'Person.builder()' 메소드를 호출하면 Person 객체를 생성하기 위한 빌더 객체가 반환된다. 이후 체이닝 방식으로 필드 값을 설정한 후 build() 메서드를 호출하여 최종적으로 Person 객체가 생성된다. 

@Builder는 특히 필드가 많은 클래스나 생성자가 복잡한 클래스에서 자주 사용된다.