Java

Builder pattern @Builder

조정밍 2022. 6. 29. 20:13

Builder 패턴

객체를 생성할 때 사용하는 패턴이다.

객체를 생성할 수 있는 빌더를 builder() 함수를 통해 얻고 거기에 셋팅하고자 하는 값을 셋팅하고 마지막에 build()를 통해 빌더를 작동 시켜 객체를 생성한다.

 

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class UserInfo {
    private String name;
    private int age;
}

 

빌더를 사용하는 이유

1. 생성자 파라미터가 많을 경우 가독성이 좋지 않다. 

UserInfo userInfo = new UserInfo("홍길동", "19");

파라미터로 받아야 하는 값들이 많아질수록 각 값들이 어떤것을 의미하는지 확인하기 힘들다.

 

builder 패턴을 사용하면 각 파타미터가 무엇을 의미하는지 파악하기 쉽다.

UserInfo userInfo = UserInfo.builder()
                        .name("홍길동")
                        .age(19)
                        .build();

 

2. 어떤 값을 먼저 설정하든 상관없다.

생성자의 경우 정해진 순서대로 파라미터를 넣어주어야 한다.

하지만 Builder 패턴을 사용하면 필드의 이름으로 값을 설정하기 때문에 순서에 종속적이지 않다.

 

3. 필요한 데이터만 설정할 수 있다. 

생성자나 정적 메소드를 이용하는 경우 필요하지 않은 파라미터에 더미값을 넣어주거나 해당 파라미터가 없는 생성자를 만들어 주어야 한다. 하지만 빌더를 사용하면 이를 동적으로 처리할 수 있다.

UserInfo userInfo = UserInfo.builder()
                        .name("홍길동")
                        .build();

 

4. 유연성을 확보할 수 있음

UserInfo 객체에 userId를 추가한다면 기존 코드를 모두 수정해야 하는 문제가 있지만, 빌터 패턴 사용시 기존 코드의 영향을 주지 않는다.

@Builder
@NoArgsConstructor
@AllArgsConstructor
@Data
public class UserInfo {
    private String name;
    private int age;
    private String userId;
}
UserInfo userInfo = new UserInfo("홍길동", "19");