[디자인패턴] 빌더 패턴 (Builder)
by Roel Downey- 위키 : 빌더 패턴
복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴
Effective Java의 필더 패턴
이펙티브 자바에서 빌더 패턴으로 불변 클래스로 만들 수 있다.
불변 클래스는 생성이 되면 상태를 변경하지 않는 객체를 만들 수 있다.
모든 상태 정보는 객체가 생성 될 때 제공되며 객체의 수명 동안 변경되지 않는다.
링크 : 빌더 패턴
불변 클래스로 작성해야하는 이유
1. 불변 객체는 생성 된 상태인 하나의 상태에만 있을 수 있으므로 간단하고 사용하기 쉽다.
2. 본질적으로 스레드로 부터 안전하다. 즉, 동기화가 필요하지 않다.
3. 불변 클래스의 객체는 자유롭게 공유 할 수 있다.
불변 클래스 만들기
두가지 방법이 있다.
첫 번째는 롬복을 활용해서 @Builder 애노테이션으로 쉽게 사용한다.
두 번째는 직접 구현해서 활용한다.
첫 번째 방법은 롬복을 추가하고 클래스 위에 애노테이션을 주면 된다.
두 번째 방법은 다음과 같이 해보자!
public class User {
private final Email email;
private String password;
public User(Email email, String password) {
this(email, password);
}
public User(Email email, String password) {
this.email = email;
this.password = password;
}
public Email getEmail() {
return email;
}
public String getPassword() {
return password;
}
static public class Builder {
private Email email;
private String password;
public Builder() {
}
public Builder(User user) {
this.email = user.email;
this.password = user.password;
}
public Builder email(Email email) {
this.email = email;
return this;
}
public Builder password(String password) {
this.password = password;
return this;
}
public User build() {
return new User(email, password);
}
}
}
이 패턴을 학습하면서 이런 생각을 하게 되었다.
필드 패턴을 사용하면 객체를 생성한 후, 변경 불가능 상태로 만드는데, 만약에 password를 수정하려고 하면 setter를 만들어줘야 한다고 생각했다. 그러면 코드가 더 길어지고 비효율 적인거 아닌가? 라는 생각을 하게 되었다.
2020/08/25 - [Web/review And comment] - [comment] 상태를 가지는 객체에 Getter Setter를 쓰지마라?!
-> 답 : 엔터티는 상태가 바뀔수 있다. 빌더 패턴을 가져가면 불변성과 네임드 파라미터를 가져갈 수 있다. 단순히 setter를 하지말고 의미있는 메소드로 처리하는게 좋다. (링크)
'Java' 카테고리의 다른 글
[Java] 2주차 과제: 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.16 |
---|---|
[Java] 1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. (0) | 2020.11.16 |
[Java] Java Optional (0) | 2020.08.30 |
[Java] statement와 PreparedStatement (1) | 2020.05.13 |
[Java] JUnit4 사용하기 (Eclipse에서) (0) | 2020.04.06 |
블로그의 정보
What doing?
Roel Downey