DesignPattern

Builder pattern

Dexlee 2022. 4. 23. 20:04

1. 나오게 된 배경

생성자를 통해서 객체를 생성하는데 어려움이 있어 생긴 패턴이다.

여기서 어려움이란, 파라미터에 각 필드를 직접 적는데 있어 개발자가 실수할 일이 커지고, 각 필드를 직접 접근해 가독성이 좋지 못하기 때문이다.

 

2. 빌더 패턴이란?

객체를 생성해준다.

 

3. 내부 원리.

static inner class로 외부 클래스의 필드를 메서드로 만들어 객체를 생성해준다.

 

4. 왜 사용하는지?

가장 큰 이유는 각 필드를 메서드로 만들어 접근이 편하고, 가독성이 좋기 때문이다. 이러한 이유로 개발자가 실수할 일도 적어진다.

또한, 유연성이 좋다. 모든 필드를 채울 필요 없이, 필요한 필드만 채워 객체를 생성할 수 있다.

 

public class Outer {
    private int id;
    private String name;

    public Outer(Builder builder) {
        this.id = builder.id;
        this.name = builder.name;
    }

    public static class Builder {
        private int id;
        private String name;

        public Builder id(int id) {
            this.id = id;
            return this;
        }
        public Builder name(String name) {
            this.name = name;
            return this;
        }
        public Outer build() {
            return new Outer(this);
        }
    }
    
    @Override
    public String toString() {
        return "Outer{" +
                "id=" + id +
                ", name='" + name + '\'' +
                '}';
    }
}
public class Main {
    public static void main(String[] args) {
        Outer outer = new Outer.Builder()
                .id(10)
                .build();
        System.out.println(outer);
    }
}

위에 보는 것처럼 id값만 필요하다면, id 메서드에만 접근해 객체를 생성할 수 있다. 이러한 유연성과 메서드로 접근해 높은 가독성을 가지고 있어서 builder 패턴을 사용하는 것이다.