본문 바로가기
Etc

Design Pattern - Builder

by SuperDT 2024. 3. 31.

Springboot에서 자주 사용하는 Builder Pattern은

 

객체를 생성하는 복잡한 과정을 추상화하고

객체 생성 과정을 쉽게 만들어주는 디자인패턴으로

많은 수의 매개변수를 가진 객체를 생성하는데 사용합니다.

 

해당 패턴을 사용하면 가독성이 향상되고

프로그램 유지 보수가 간편해집니다.

 

그러면 어떻게 가독성과 유지 보수가 간편해 지는지

아래 예제 코드를 한 번 확인해보겠습니다.

 

 

builder pattern을 사용하지 않은 경우

//사용자 응답 클래스
public class UserResponse {
    private String email;
    private String name;
    private String pwd;
    private LocalDateTime createAt;

    public UserResponse(String email, String name, String pwd, LocalDateTime createAt) {
        this.email = email;
        this.name = name;
        this.pwd = pwd;
        this.createAt = createAt;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public LocalDateTime getCreateAt() {
        return createAt;
    }

    public void setCreateAt(LocalDateTime createAt) {
        this.createAt = createAt;
    }
}

//객체 생성
UserResponse response = new UserResponse();
        response.setName("abbear");
        response.setEmail("abbear@gamil.com");
        response.setCreateAt(LocalDateTime.now());

 

 

builder pattern을 사용한 경우,

Springboot에서는 이러한 builder를 @builder 어노테이션을 통해 사용 가능

//사용자 응답 클래스
@Data
@Builder
public class UserResponse {
    private String email;
    private String name;
    private String pwd;
    private LocalDateTime createAt;
}

//객체 생성
UserResponse response = UserResponse.builder()
                .name("abbear")
                .email("abbear.korea@gamil.com")
                .createAt(LocalDateTime.now())
                .build();

 

Springboot에서 큰 차이를 확인 할 수 있는데

 

Builder를 사용하는 경우에는 변수가 추가 될 때마다

생성자를 포함한 get, set 메서드를 생성해주지 않아도 사용가능하기 때문에

유지보수 비용이 내려가고 효율이 올라가게 됩니다.

 

또한, 객체 생성시 반복적인 변수 입력을 줄임으로

가독성이 향상됩니다.