@Builder

2023. 4. 17. 14:59Spring Boot/Annotations

@Builder annotation은 Lombok 라이브러리에서 제공하는 annotation 중 하나로, Builder 패턴을 자동으로 생성해주는 역할을 합니다. Builder 패턴은 객체 생성 시 사용되며, 복잡한 객체를 생성하기 위해 사용됩니다. @Builder annotation을 사용하면 Builder 패턴을 사용하는 코드를 간단하게 작성할 수 있습니다.

 

Builder 디자인 패턴은 객체를 생성하는 디자인 패턴 중 하나로, 복잡한 객체를 생성할 때 사용됩니다. Builder 디자인 패턴은 객체의 생성 과정을 단계적으로 나누어 처리하며, 각 단계에서 필요한 값을 입력받아 객체를 생성합니다. 이를 통해 객체 생성 과정을 단순화하고, 코드 가독성을 높일 수 있습니다.

 

Builder 패턴은 다음과 같은 특징을 가지고 있습니다.

  1. 객체 생성 과정을 단계별로 처리합니다.
  2. 생성자에서 많은 매개변수를 받는 경우, 가독성을 높입니다.
  3. 객체의 불변성을 보장합니다.
  4. 필수적인 매개변수와 선택적인 매개변수를 처리할 수 있습니다.
  5. 유연성이 높아, 객체 생성 방식을 변경하기 쉽습니다.

Builder 패턴은 다음과 같은 구조로 이루어져 있습니다.

  1. 객체를 생성하기 위한 Builder 클래스를 생성합니다.
  2. Builder 클래스에는 객체의 필수적인 매개변수를 설정하는 메서드를 추가합니다.
  3. Builder 클래스에서 객체를 생성하는 build() 메서드를 정의합니다.
  4. 객체를 생성할 때는 Builder 클래스의 객체를 생성하여 필요한 매개변수를 설정한 후 build() 메서드를 호출합니다.

다음은 Builder 패턴을 사용하여 객체를 생성하는 예시 코드입니다.

public class User {
    private final String username;
    private final String password;
    private final String email;
    
    private User(UserBuilder builder) {
        this.username = builder.username;
        this.password = builder.password;
        this.email = builder.email;
    }
    
    public static class UserBuilder {
        private String username;
        private String password;
        private String email;
        
        public UserBuilder(String username, String password) {
            this.username = username;
            this.password = password;
        }
        
        public UserBuilder email(String email) {
            this.email = email;
            return this;
        }
        
        public User build() {
            return new User(this);
        }
    }
}

public class Main {
    public static void main(String[] args) {
        User user = new User.UserBuilder("john", "password")
            .email("john@example.com")
            .build();
    }
}

 

위 코드에서 User 클래스는 Builder 패턴을 사용하여 객체를 생성합니다. User 클래스는 불변성을 보장하며, 필수적인 매개변수인 username과 password는 UserBuilder 클래스의 생성자에서 설정하며, 선택적인 매개변수인 email은 UserBuilder 클래스의 email() 메서드를 통해 설정합니다. UserBuilder 클래스에서는 객체를 생성하는 build() 메서드를 정의합니다. Main 클래스에서는 Builder 패턴을 사용하여 User 객체를 생성합니다. 이를 통해 객체 생성 과정을 단순화하고, 가독성을 높일 수 있습니다.

 

@Builder annotation은 클래스, 생성자, 메서드 등에 적용될 수 있으며, Builder 패턴에 필요한 필드를 자동으로 생성해줍니다. 이를 통해 개발자는 필요한 필드만 선언하여 불필요한 코드 작성을 줄일 수 있습니다.

 

다음은 @Builder annotation을 사용하여 Builder 패턴을 자동으로 생성하는 예시 코드입니다.

public class User {
    private Long id;
    private String username;
    private String password;
    private String email;
    
    @Builder
    public User(Long id, String username, String password, String email) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.email = email;
    }
}

public class Main {
    public static void main(String[] args) {
        User user = User.builder()
            .id(1L)
            .username("john")
            .password("password")
            .email("john@example.com")
            .build();
    }
}

 

위 코드에서 User 클래스에 @Builder annotation이 적용되어 Builder 패턴을 자동으로 생성합니다. User 클래스의 생성자에서는 @Builder annotation을 사용하여 Builder 패턴을 사용할 수 있습니다. Main 클래스에서는 Builder 패턴을 사용하여 User 객체를 생성합니다. 이를 통해 간단하게 복잡한 User 객체를 생성할 수 있습니다.

 

Chain Method

자바에서 체인 메소드(Chain Method)란, 객체의 메소드 호출 결과를 객체 자신으로 리턴하여 메소드를 연속해서 호출할 수 있는 기능을 말합니다. 즉, 객체의 메소드를 연속해서 호출하면서 객체의 상태를 변경할 수 있는 기능입니다.

체인 메소드는 객체 지향 프로그래밍에서 자주 사용되며, 메소드 체이닝(Method Chaining)이라고도 불립니다. 체인 메소드를 사용하면 코드의 가독성을 높일 수 있고, 객체의 상태를 보다 쉽게 변경할 수 있습니다.
체인 메소드는 다음과 같은 형식으로 구현할 수 있습니다.
public class MyClass {
    private int value1;
    private int value2;

    public MyClass setValue1(int value1) {
        this.value1 = value1;
        return this;
    }

    public MyClass setValue2(int value2) {
        this.value2 = value2;
        return this;
    }
}

 

위 코드에서 MyClass 클래스는 체인 메소드를 사용하여 value1과 value2 필드의 값을 설정합니다. setValue1() 메소드와 setValue2() 메소드는 자신의 객체를 반환하므로, 다음과 같이 메소드 체이닝을 사용할 수 있습니다.

MyClass myObject = new MyClass().setValue1(10).setValue2(20);

 

위 코드에서 MyClass 클래스의 객체를 생성한 후, setValue1() 메소드와 setValue2() 메소드를 체인으로 호출하여 객체의 상태를 변경합니다. 이를 통해 코드의 가독성을 높이고, 객체의 상태를 보다 쉽게 변경할 수 있습니다.

'Spring Boot > Annotations' 카테고리의 다른 글

@SessionAttributes / @ModelAttribute 란?  (0) 2023.08.08
@RequiredArgsConstructor  (0) 2023.04.17