Post

빌더 패턴





빌더 패턴이란

  • 다양한 방법의 객체 생성 및 초기화 방법을 단순하고 유연하게 구현할 수 있도록 해주는 생성 패턴이다.
  • 복잡한 객체의 생성을 차근차근 단계적으로 만들 수 있도록 해준다.
  • 빌더 패턴은 세 가지로 구성된다.
    • 빌더 인터페이스
      • 객체 생성에 필요한 단계를 정의하는 인터페이스
    • 빌더 클래스
      • 실제로 객체를 생성하는 빌더 인터페이스의 구현체
    • 디렉터 클래스
      • 빌더 인터페이스와 구현체를 사용해 객체를 생성해 활용하는 애





구현하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public interface PersonBuilder {

    PersonBuilder name(String name);

    PersonBuilder age(int age);

    PersonBuilder gender(Gender gender);

    PersonBuilder height(int height);

    PersonBuilder weight(int weight);

    Person build();

}

  • Person 객체를 만드는 방법을 정의한 빌더 인터페이스이다.
  • 각 필드를 구성하는 메서드는 메서드 체이닝을 할 수 있도록 리턴값이 PersonBuilder이다.
  • 원하는 필드를 구성하고 마지막으로 완성 객체를 받을 수 있는 build() 메서드이다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public class PersonBuilderImpl implements PersonBuilder {

    private String name;
    private int age;
    private Gender gender;
    private int height;
    private int weight;

    @Override
    public PersonBuilder name(String name) {
      this.name = name;
      return this;
    }

    @Override
    public PersonBuilder age(int age) {
      this.age = age;
      return this;
    }

    @Override
    public PersonBuilder gender(Gender gender) {
      this.gender = gender;
      return this;
    }

    @Override
    public PersonBuilder height(int height) {
      this.height = height;
      return this;
    }

    @Override
    public PersonBuilder weight(int weight) {
      this.weight = weight;
      return this;
    }

    @Override
    public Person build() {
      return new Person(name, age, gender, height, weight);
    }

}

  • 빌더 인터페이스의 구현체인 빌더 클래스이다.
  • 실질적으로 객체를 생성하는 역할을 담당한다.



1
2
3
4
5
6
7
8
9
10
11
PersonBuilder personBuilder = new PersonBuilderImpl();

personBuilder.name("박현근");
personBuilder.age(20);
personBuilder.gender(Gender.MALE)
          .height(185)
          .weight(80);

Person park = personBuilder.build();

  • 실제로 빌더 패턴을 사용해 객체를 만드는 코드이다.
  • 한 줄씩 메서드를 호출해도 되고, 메서드 체이닝을 사용해 한 번에 여러 개의 필드를 채울 수도 있다.
  • 마지막에 build()를 호출해 차곡차곡 쌓은 필드들을 실제 객체로 리턴 받아 사용할 수 있다.





This post is licensed under CC BY 4.0 by the author.