[생성패턴] 3. 빌더 패턴

Carrot.___.·2023년 11월 20일

디자인패턴

목록 보기
3/6

빌더 패턴 (Builder Pattern)

구상 클래스에 의존하지 않고도 서로 연관되거나 의존적인 객체로 이루어진 제품군을 생상하는 인터페이스를 제공합니다. 구상 클래스는 서브클래스에서 만듭니다.

복잡한 객체들을 단계별로 생성할 수 있도록 하는 디자인 패턴입니다.

필더 패턴을 적용하면 다음과 같은 장점을 가질 수 있습니다.

  • 필요한 데이터만 설정할 수 있다.
  • 유연성을 확보할 수 있다.
  • 가독성을 높일 수 있다.

빌더 패턴 예제 코드

// 구현 클래스
public class User {
	private String name;
    private Integer age;
    private Integer height;
    private Integer iq;
    
    public User(String name, Integer age, Integer height, Integer iq) {
    	this.name = name;
        this.age = age;
        this.height = height;
        this.iq = iq;
    }
    
    public UserBuilder builder() {
    	return new UserBuilder();
    }
}

// 빌더 클래스
public class UserBuilder {
	private String name;
    private Integer age;
    private Integer height;
    private Integer iq;
    
    public UserBuilder name(String name) {
    	this.name = name;
        return this;
    }
    
    public UserBuilder age(Integer age) {
    	this.age = age;
        return this;
    }
    
    public UserBuilder age(Integer height) {
    	this.height = height;
        return this;
    }
    
    public UserBuilder age(Integer age) {
    	this.age = age;
        return this;
    }
    
    public User build() {
    	return new User(name, age, height, iq);
    }
}

위 코드는 User 클래스와 이를 활용한 UserBuilder 클래스를 정의했습니다.
위를 활용하게 되면 위에서 언급한 장점을 얻을 수 있습니다.

  1. 필요한 데이터만 설정할 수 있다.
    • 위 코드를 보면, UserBuilder에 필요한 데이터만 설정하고, build() 메소드를 통해 User객체를 생성하고 있습니다. 따라서, 모든 값을 설정하지 않아도, 필요한 부분만 설정된 User 객체를 생성할 수 있습니다.
  2. 유연성을 확보할 수 있다.
    • 만약, User 클래스에 새로운 지역변수가 생긴다고 가정해봅시다. 그렇다면, 새로운 생성자를 생성하거나, 생성자를 수정해야할텐데, 빌더 패턴을 사용하면, User클래스와 빌더패턴을 사용한 부분만 수정하면 됩니다. 다른 곳에서 생성자를 통해 사용하고 있던 코드들은 수정하지 않아도 됩니다.
  3. 가독성을 높일 수 있다.
    • 빌더 패턴을 적용하지 않고, 생성자를 통해 객체를 생성한다면, 생성자의 매개변수에 어떤값이 들어가는지 알 수 없습니다. 하지만, 빌더패턴을 적용하면, 메소드의 이름을 통해 어떤 값을 설정하는지 정확히 알 수 있습니다.

0개의 댓글