-
빌더 패턴(Builder Pattern)Design Pattern 2022. 3. 19. 05:22반응형
이번에는 마지막으로 이전에서 본 점층적 생성자 패턴과 자바 빈 패턴의 장점(안정성 + 가독성)을 결합한
빌더 패턴을 알아보겠습니다.public class User { //회원 ID(필수) private int id; //회원 이름(필수) private String userName; //회원 별명(선택) private String nickName; //회원 사물함번호(선택) private int lockerNumber; public User(Builder builder){ this.id = builder.id; this.userName = builder.userName; this.nickName = builder.nickName; this.lockerNumber = builder.lockerNumber; } public static Builder builder(int id, String userName){ return new Builder(id,userName); } public static class Builder{ private int id; private String userName; private String nickName; private int lockerNumber; //필수 매개변수만을 담은 Builder생성자 public Builder(int id, String userName){ this.id = id; this.userName = userName; } public Builder nickName(String nickName){ this.nickName = nickName; return this; } public Builder lockerNumber(int lockerNumber){ this.lockerNumber = lockerNumber; return this; } public User build(){ return new User(this); } } @Override public String toString() { return "User{" + "id=" + id + ", userName='" + userName + '\'' + ", nickName='" + nickName + '\'' + ", lockerNumber=" + lockerNumber + '}'; } }
앞서 본 패턴(점층정 생성자 패턴, 자바 빈 패턴)과는 다르게
빌더 패턴은 별도의 Builder 클래스를 만들어
필수 값에 대해서는 생성자를 통해,
선택적인 값들에 대해서는 메서드를 통하여 입력받은 후에
build() 메서드를 통해 최종적으로 하나의 인스턴스를 리턴하는 방식이다.User 객체를 생성해보겠습니다.
public class BuilderPt { public static void main(String[] args) { User user = User.builder(1,"kihwan") .lockerNumber(70) .build(); System.out.println("user : " + user); } }
결과
빌더 패턴을 이용하여 가독성도 좋아졌을 뿐만 아니라
한 번에 객체를 반환하므로 일관성(Consistency)이 깨지지 않고
setter() 같은 메서드가 없으므로 변경이 불가능한 객체를 만들 수 있어졌습니다.반응형'Design Pattern' 카테고리의 다른 글
자바 빈 패턴(JavaBeans Pattern) (0) 2022.03.19 점층적 생성자 패턴(Telescoping Constructor Pattern) (0) 2022.03.19