티스토리 뷰
빌더패턴 (Builder Pattern)
개요
- 빌더패턴이란 ?
- 객체를 생성 시 생성자를 깔끔하고 직관적으로 확인하기 위한 기법
- 메소드 체이닝 기법을 활용하여 객체를 생성함
- Builder패턴 예제
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | public class User { private final Long seq; private final String name; private final Email email; public User(String name, Email email, String password) { this(name, email, password, null); } public User(String name, Email email, String password, String profileImageUrl) { this(null, name, email, password, profileImageUrl, 0, null, null); } public Long getSeq() { return seq; } public String getName() { return name; } public Email getEmail() { return email; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; User user = (User) o; return Objects.equals(seq, user.seq); } @Override public int hashCode() { return Objects.hash(seq); } @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE) .append("seq", seq) .append("name", name) .append("email", email) .toString(); } static public class Builder { private Long seq; private String name; private Email email; public Builder() {} public Builder(User user) { this.seq = user.seq; this.name = user.name; this.email = user.email; } public Builder seq(Long seq) { this.seq = seq; return this; } public Builder name(String name) { this.name = name; return this; } public Builder email(Email email) { this.email = email; return this; } public User build() { return new User(seq, name, email); } } } | cs |
- Lombok을 활용한 Builder 사용법
1 2 3 4 5 6 7 8 9 10 11 | @Builder @Getter @NoArgsConstructor @AllArgsConstructor public class User { private Long seq; private String name; private Email email; } | cs |
- 메소드 체이닝 ?
대표적으로 StringBuilder.append 가 있다.
1 2 3 4 | public StringBuilder append(String var1) { super.append(var1); return this; } | cs |
- 메소드 체이닝을 사용하면 메모리 누수의 가능성이 있음
(참고 : https://blog.ggaman.com/1009)
'Design Pattern > Design Pattern' 카테고리의 다른 글
[Pattern] 프록시 패턴( Proxy Pattern ) (403) | 2016.06.10 |
---|---|
[Pattern] 전략 패턴 ( Strategy Pattern ) (0) | 2016.05.26 |
[Pattern] 템플릿 메소드 패턴 ( Template Method Pattern ) (0) | 2016.05.24 |
[Pattern] MVC Pattern (0) | 2016.04.21 |
댓글