디자인패턴

build 패턴

개발하는지호 2024. 2. 6. 10:07

build 패턴을 사용하게 된 이유

 

기존 객체를 생성하기 위해 생성자 내부에 매개변수를 넣어줬었다. 이때 넣어줘야 할 값이 적다면 가독성 부분에서 큰 문제가 없었지만,

넣어야 할 값들이 많아지면 가독성이 떨어질 뿐만이 아니라, 특정 위치에 어떤 값이 와야 하는지 찾는데에도 시간이 걸릴 수가 있다.

 

이를 해결하고자 나온 패턴이 바로 buil 패턴이다.

 

빌드 패턴이 만들어지는 과정

public class User {
    private String email;
    private String password;
    private String name;
    // User 클래스의 다른 필드와 메서드

    // User 클래스의 생성자는 private으로 설정하여 외부에서 직접 호출을 막고,
    // 오직 Builder를 통해서만 User 객체를 생성하도록 강제합니다.
    private User(Builder builder) {
        this.email = builder.email;
        this.password = builder.password;
        this.name = builder.name;
    }

    // User 클래스의 Builder 정적 내부 클래스
    public static class Builder {
        private String email;
        private String password;
        private String name;

        // Builder 클래스의 메서드들
        public Builder email(String email) {
            this.email = email;
            return this;
        }

        public Builder password(String password) {
            this.password = password;
            return this;
        }

        public Builder name(String name) {
            this.name = name;
            return this;
        }

        public User build() {
            return new User(this); // 여기에서 User 객체를 생성하고 초기화
        }
    }
}

 

매번 위의 코드처럼 작성하면 시간이 많이 걸린다. 그래서 롬복이 이를 해결해준다.

 

롬복(lombok)활용시 저 위의 코드를 만들 필요 없이 바로 사용 가능하다.

 @Builder // 빌더 패턴으로 객체 생성
    public Article(String title, String content) {
        this.title = title;
        this.content = content;
    }

 

 

그러면 아래와 같이 바로 객체 생성이 가능하다.

 

Article a = Article.builder()
                .title(title)
                .content(content)
                .build();

 

 

여러 형태도 보여주기 위해 아래 코드도 올린다.

public Article toEntity() {
        return Article.builder()
                .title(title)
                .content(content)
                .build();
    }