java spring @Builder

BackEnd_Ash.log·2023년 7월 23일
0

자바스터디

목록 보기
15/19

@Builder 를 사용하는 이유가 뭘까?

@Builder 어노테이션은 Lombok 라이브러리가 제공하는 기능으로, Builder 패턴을 자동으로 구현하는데 사용됩니다. Builder 패턴의 주요 목적은 복잡한 객체를 생성하는 코드를 간결하게 만드는 것입니다.

Builder 패턴은 다음과 같은 상황에서 유용합니다:

  1. 불변 객체 생성: 불변 객체는 생성 시점에 모든 필드 값을 한 번에 설정하고 이후로는 변경할 수 없습니다. Builder를 사용하면 모든 필드 값을 한 곳에서 설정하고, 한 번에 불변 객체를 생성할 수 있습니다.

  2. 매개변수가 많은 객체 생성: 객체 생성자에 많은 수의 매개변수가 필요한 경우, 어떤 값이 어떤 필드에 해당하는지 알기 어렵고 코드 가독성이 떨어집니다. Builder 패턴은 각 필드에 대해 명시적인 메서드를 제공함으로써 이 문제를 해결합니다.

  3. 선택적 매개변수를 가진 객체 생성: 모든 필드가 필수적이지 않고 일부는 선택적인 경우, 필요한 필드만 설정하고 객체를 생성할 수 있습니다.

Builder 패턴을 수동으로 구현하면 코드가 복잡해지고 유지 보수가 어려워질 수 있습니다. 이런 문제를 해결하기 위해 Lombok의 @Builder 어노테이션을 사용하면 Builder 패턴을 쉽게 구현할 수 있습니다. Lombok이 Builder 패턴에 필요한 메서드를 모두 자동으로 생성해줍니다.

생성자를 받아서 하는것과 @Builder 를 사용하는것에 차이가 가독성 이외엔 없을까?

두 가지 방식에는 가독성 외에도 몇 가지 차이점이 있습니다. 그 차이점 중 하나는 선택적 매개변수의 처리 방식입니다. 생성자를 통해 객체를 생성하는 경우에는 선택적 매개변수를 처리하기 어렵습니다. 선택적 매개변수가 많을 경우, 각 경우에 대해 오버로딩된 생성자를 제공해야 할 수도 있습니다. 이는 코드가 복잡해지고 유지 관리가 어려워질 수 있습니다.

반면에 Builder 패턴을 사용하면 각 필드를 독립적으로 설정할 수 있으므로 선택적 매개변수를 쉽게 처리할 수 있습니다. 또한, 빌더 메서드를 통해 필드를 설정하면 어떤 값이 어떤 필드에 설정되는지 명확히 알 수 있습니다.

예를 들어, 아래에는 Person 클래스에 대한 두 가지 방식의 객체 생성 코드를 보여줍니다:

  1. 생성자를 이용한 방식:
public class Person {
    private String firstName;
    private String lastName;
    private int age;
    private String address;

    public Person(String firstName, String lastName, int age, String address) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.age = age;
        this.address = address;
    }
    // getters and setters
}

// 사용 예:
Person john = new Person("John", "Doe", 30, "123 Main St");

이 코드에서 Person 객체를 생성할 때 필요한 모든 값을 생성자에 제공해야 합니다. 선택적인 필드가 있다면, 그 필드를 위한 추가 생성자를 제공하거나 기본 값을 설정해야 할 수 있습니다.

  1. @Builder를 이용한 방식:
import lombok.Builder;

@Builder
public class Person {
    private String firstName;
    private String lastName;
    private int age;
    private String address;
    // getters and setters
}

// 사용 예:
Person john = Person.builder()
    .firstName("John")
    .lastName("Doe")
    .age(30)
    .address("123 Main St")
    .build();

이 코드에서는 @Builder 어노테이션을 사용하여 Person 객체를 생성합니다. 각 필드는 별도의 메서드를 통해 설정되므로 코드 가독성이 향상됩니다. 또한, 필요한 필드만 설정하고 나머지 필드는 기본 값이나 null로 남겨둘 수 있습니다. 이렇게 하면 선택적 매개변수를 쉽게 처리할 수 있습니다.

좋은글:
https://velog.io/@cieroyou/Builder-%EC%82%AC%EC%9A%A9%EB%B2%95

profile
꾸준함이란 ... ?

1개의 댓글

comment-user-thumbnail
2023년 7월 23일

좋은 글 감사합니다.

답글 달기