Builder Pattern

wangjh789·2022년 8월 31일
0

Design Pattern

목록 보기
3/13
  • 클래스의 필드가 많을 경우, 생성자를 통해 인스턴스를 생성하는 메서드를 사용하기란 쉽지 않다.
    (각 파라미터의 위치가 정해져 있어서 사용하기 어렵다.)
  • 멀티 쓰레드의 경우 하나의 객체를 여러 쓰레드가 조작할 위험이 있다.
    (기본 생성자를 사용해 인스턴스를 만들고 setter로 값을 채우는 경우)

위 두 상황일 때, 빌더 패턴을 추천한다.
Person p = new Person.Builder().setAge(12).setName("Wang").build();
build() 메서드가 수행되야 객체가 생성되므로 멀티 쓰레드 환경에서도 안전하다.
빌더 패턴으로 생성한 객체를 보면 어떤 프로퍼티로 구성되어 있는지 알 수 있다.

public class Person{
	private String name;
    private String email;
    private int age;
    
    public Person(Builder builder){
    	this.name = builder.name;
        this.email = builder.email;
        this.age = builder.age;
    }
    
    public static class Builder{
    	private final String name;
        private final String email;
        private int age;
    
      public Builder(String name,String email){
          this.name = name;
          this.email = email;
      }
      // public setter, getter
      public Builder setAge(int age){
      	this.age = age;
        return this;
      }
      public Person build(){
      	return new Person(this);
      }
   }
}

Builder 클래스에서 name,email은 필수 값이므로 final을 붙였다.
만약 새로운 필드를 추가하고 싶다면 Builder의 set메서드를 만들면 된다.
Person p = new Person.Builder("name","email").setAge(20).build();

builder 패턴은 static inner class를 이용한다.

텔레스코핑 생성자를 사용할 필요가 없다. 불변 객체를 만드는 빌더패턴을 사용하자

profile
기록

0개의 댓글