STUDY/Java
Java | Builder패턴 (Lombok @Builder)
개미606
2021. 3. 29. 15:55
빌더 패턴(Builder pattern)이란 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴이다.
출처: 위키백과 - 빌더패턴
빌더 패턴은 아래와 같이 구현할 수 있다.
public class User {
private int id;
private String name;
private String email;
private String nickname;
// getter 생략 (setter는 생성하지 않는다)
// private 생성자
private User(Builder builder) {
this.name = builder.name;
this.email = builder.email;
this.nickname = builder.nickname;
}
// User클래스 안에 선언한 정적 내부 클래스
public static class Builder {
private int id;
private String name;
private String email;
private String nickname;
// name과 email은 필수로 입력해야 하는 필드
public Builder(String name, String email) {
this.name = name;
this.email = email;
}
public Builder nickname(String nickname) {
this.nickname = nickname;
return this;
}
public User build() {
return new User(this);
}
}
}
그리고 이런식으로 사용한다.
User user = new User.Builder("Oladipo", "vo4@miami.heat")
.nickname("feathery")
.build();
빌더 패턴을 사용하는 이유?
- 필수 및 선택인자가 많아질수록 생성자 방식보다 가독성이 좋다.
- 자바빈 패턴(setter를 이용하는 방식)보다 안전하다. - setter가 없기 때문에 객체를 변경할 수 없음 (불변성을 보장)
+) Builder Pattern을 빠르게 구현하기
사실 빌더 패턴을 알게된 것도 롬복 때문이다. 롬복의 @Builder
어노테이션을 이용해 쉽고 간편하게 빌더 패턴을 구현할 수 있다.
public class User {
private int id;
private String name;
private String email;
private String nickname;
@Builder
public User(String name, String email, String nickname) {
this.name = name;
this.email = email;
this.nickname = nickname;
}
}
+) References