[디자인 패턴] Builder 패턴
이멀젼씨
·2020. 3. 10. 16:25
- 정의
복잡한 단계로 생성되는 생성자를 더 쉽고 가독성이 높게 생성할 수 있도록 고안된 패턴이다
- UML
1. Computer클래스를 만들고 cpu, ram, storage를 멤버 변수로 갖는다. Getter와 Setter를 설정하고 생성자를 정의한다
2. Computer객체 생성을 도와주는 ComputerBuilder클래스를 만든다. 이 클래스 역시 cpu, ram, storage를 멤버 변수로 갖는다. cpu, ram, storage 메소드를 통해 값을 저장하고 builder메소드로 Computer객체를 생성한다
- 코드
Computer class
public class Computer {
private String cpu;
private String ram;
private String storage;
public Computer(String cpu, String ram, String storage) {
this.cpu = cpu;
this.ram = ram;
this.storage = storage;
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getRam() {
return ram;
}
public void setRam(String ram) {
this.ram = ram;
}
public String getStorage() {
return storage;
}
public void setStorage(String storage) {
this.storage = storage;
}
public void printSpec() {
System.out.println("My Computer [cpu="+cpu+", ram="+ram+", storage="+storage+"]");
}
}
ComputerBuilder class
public class ComputerBuilder {
private String cpu;
private String ram;
private String storage;
public ComputerBuilder cpu(String cpu) {
this.cpu=cpu;
return this;
}
public ComputerBuilder ram(String ram) {
this.ram=ram;
return this;
}
public ComputerBuilder storage(String storage) {
this.storage=storage;
return this;
}
public Computer build() {
Computer computer = new Computer(cpu, ram, storage);
return computer;
}
}
Main class
public class Main {
public static void main(String[] args) {
Computer computer = new ComputerBuilder()
.cpu("i7")
.ram("64g")
.storage("1TB SSD")
.build();
computer.printSpec();
}
}
- 설명
알아둘 것
1. 점층적 생성자 패턴
필수 매개변수와 매개변수를 1개부터 모든 매개변수를 받는 생성자까지 점층적으로 생성자를 추가하는 패턴
장점
- 한번 생성되면 값이 바뀔 일이 없음
단점
- 설정할 필요가 없는 필드에도 인자를 전달해야 하는 경우가 생김
- 인자의 수가 늘어남에 따라 가독성과 유지보수성이 떨어짐
2. 자바빈 패턴
인자가 없는 생성자를 호출하여 객체를 생성한 뒤, setter를 통해 객체의 필드를 채우는 패턴
장점
- 가독성이 높음
단점
- 1회의 생성자 호출로 객체를 환성할 수 없음
- setter를 통해 생성 시점 이후에도 값이 변할 수 있기 때문에 객체의 일관성이 깨지게 됨
ex)
Computer computer = new Computer();
computer.setCpu("i7");
computer.setRam("16g");
computer.setStorage("256g SSD");
점층적 생성자 패턴의 안전성(immutable)과 자바빈 패턴의 가독성을 차용하여 만들어졌다
장점
- 각 인자가 어떤 의미인지 알기가 쉬움
- 한번에 객체를 생성하므로 일관성을 유지할 수 있음
단점
- 객체의 생성에 따라 빌더 역시 함께 생성이 되어야 하기 때문에 성능 이슈에 민감한 시스템이라면 고려해야함
'디자인패턴' 카테고리의 다른 글
[디자인 패턴] Bridge 패턴 (0) | 2020.03.12 |
---|---|
[디자인 패턴] AbstractFactory 패턴 (0) | 2020.03.11 |
[디자인 패턴] ProtoType 패턴 (0) | 2020.02.11 |
[디자인 패턴] Singleton 패턴 (0) | 2020.02.10 |
[디자인 패턴] Factory Method 패턴 (0) | 2020.01.20 |