반응형
이건 Effctive Java[1]에서 "항목 2. 생성자의 매개변수가 많을 때는 빌더(builder)를 고려하자"를 공부하고 작성하였습니다.
객체를 생성할 때, 텔리스코핑 생성자 패턴과 자비빈즈 패턴은 자주 사용하지만 빌더 패턴은 처음 알게 되었네요.
이런 형태로 객체 생성을 설계할 수 있구나하고 배우게 되었습니다.
텔리스코핑 생성자 패턴(Telescoping constructor)
필수 매개변수들만 갖는 생성자, 필수 매개변수들만 선택 매개변수 하나를 갖는 생성자, 필수 매개변수들과 선택 매개변수 두개를 갖는 생성자 등의 형태로 모든 매개변수를 생성자가 가질 수 있도록 여러 개의 생성자를 만드는 것
-단점
매개변수들의 수가 증가하면 무척 번거로워진다.
자바빈즈 패턴(JavaBeans Pattern)
매개변수가 없는 생성자를 호출해서 세터(setter) 메소드를 이용하여 필드 값을 지정하는 것
-단점
자바빈 객체가 일관된 상태를 유지하지 못할 수 있다.
결함을 찾기 어려운 문제를 야기할 수 있다.
빌더 패턴(Builder Pattern)
텔리스코핑 생성자 패턴의 안전성과 자바빈즈 패턴의 가독성을 결합한 방법
객체 생성이 안전하게 끝났을 때 그 객체를 동결(freezing)하고 안전하게 되기 전까지는 사용할 수 없도록 함
[Source. 1] Atin.java
Reference
[1] Effective Java
객체를 생성할 때, 텔리스코핑 생성자 패턴과 자비빈즈 패턴은 자주 사용하지만 빌더 패턴은 처음 알게 되었네요.
이런 형태로 객체 생성을 설계할 수 있구나하고 배우게 되었습니다.
텔리스코핑 생성자 패턴(Telescoping constructor)
필수 매개변수들만 갖는 생성자, 필수 매개변수들만 선택 매개변수 하나를 갖는 생성자, 필수 매개변수들과 선택 매개변수 두개를 갖는 생성자 등의 형태로 모든 매개변수를 생성자가 가질 수 있도록 여러 개의 생성자를 만드는 것
-단점
매개변수들의 수가 증가하면 무척 번거로워진다.
자바빈즈 패턴(JavaBeans Pattern)
매개변수가 없는 생성자를 호출해서 세터(setter) 메소드를 이용하여 필드 값을 지정하는 것
-단점
자바빈 객체가 일관된 상태를 유지하지 못할 수 있다.
결함을 찾기 어려운 문제를 야기할 수 있다.
빌더 패턴(Builder Pattern)
텔리스코핑 생성자 패턴의 안전성과 자바빈즈 패턴의 가독성을 결합한 방법
객체 생성이 안전하게 끝났을 때 그 객체를 동결(freezing)하고 안전하게 되기 전까지는 사용할 수 없도록 함
/**
* Builder Pattern
* Atin.java
* @author Chang-Hwan Han
* @date 2011. 6. 9.
* @description
*/
public class Atin {
private final int mVar1;
private final int mVar2;
private final int mOption1;
private final int mOption2;
public static class Builder{
// Required parameters
private final int mVar1;
private final int mVar2;
// Optional parameters - initialized to default value
private int mOption1;
private int mOption2;
public Builder(int var1, int var2){
this.mVar1 = var1;
this.mVar2 = var2;
}
public Builder option1(int opt1){
this.mOption1 = opt1;
return this;
}
public Builder option2(int opt2){
this.mOption2 = opt2;
return this;
}
public Atin build(){
return new Atin(this);
}
}
private Atin(Builder builder){
this.mVar1 = builder.mVar1;
this.mVar2 = builder.mVar2;
this.mOption1 = builder.mOption1;
this.mOption2 = builder.mOption2;
}
public static void main(String[] args){
Atin atin = new Atin.Builder(10, 20).option1(30).option2(40).build();
}
}
Reference
[1] Effective Java
반응형
'Devlopment > Java' 카테고리의 다른 글
Java 로그 기록 라이브러리 - Log4j (0) | 2011.12.06 |
---|---|
String vs StringBuffer (0) | 2011.07.01 |
Aptana 플러그인 (0) | 2011.06.13 |
싱글톤 패턴(Singleton Pattern) (0) | 2011.06.10 |
JavaHL (JNI) Not Available (0) | 2011.06.10 |
달팽이 & 피보나치 수열 구현 (0) | 2011.06.01 |
JNI(Java Native Interface) - 객체 (0) | 2011.06.01 |
두 개의 스택을 이용한 큐 구현 (0) | 2011.05.31 |
JNI(Java Native Interface) (0) | 2011.05.31 |
System.out.println의 재정의 (0) | 2011.05.13 |