https://www.inflearn.com/course/%EC%9E%90%EB%B0%94-%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4#
사전적 의미의 Builder란?
1. 건축업자, 시공업자, 건조자
2. 건설자
빌더 패턴이란?
- 복잡한 단계를 거쳐야 생성되는 객체의 구현을 서브 클래스에게 넘겨주는 패턴을 의미한다.
- 좀 더 쉽게 얘기해보면 인스턴스를 생성할 때, 생성자만을 통해서 생성하는 데는 어려움이 있다.
- 왜냐하면 생성자 인자가 너무 많은 경우 어떤 값을 나타내는지 힘들고 가독성이 떨어지기 때문이다.
- 그렇다고, 자바 빈 패턴을 이용하면 객체를 생성하는데 여러 번의 함수의 호출로 인해 객체의 일관성(Consistency)이깨질 수 있다.
- 즉 빌더 패턴을 이용하면 많은 변수를 가진 객체의 생성을 가독성 높도록 코딩할 수 있고 많은 인자를 가진 객체의 생성을 다른 객체의 도움으로 생성하는 패턴을 의미한다.
Computer.java
public class Computer {
/*
* @param cpu입니다
* @param ram램입니다.
* @param storage 저장소 입니다.
*/
private String cpu;
private String ram;
private String storage;
public Computer(String cpu, String ram, String storage) {
super();
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;
}
@Override
public String toString() {
return cpu+" "+ram+" "+storage;
}
}
ComputerBuilder.java
public class ComputerBuilder {
private Computer computer;
private ComputerBuilder() {
computer = new Computer("default", "default", "default");
}
/* 밑에 함수 때문에 주석
* public static ComputerBuilder start() {
*
*
* return new ComputerBuilder();
*
* }
*/
public static ComputerBuilder startWithCpu(String cpu) {
ComputerBuilder builder = new ComputerBuilder();
builder.computer.setCpu(cpu);
return builder;
}
/* 위에 함수 때문에 주석
* public ComputerBuilder setCpu(String string) {
*
* computer.setCpu(string); return this; }
*/
public ComputerBuilder setRam(String string) {
computer.setRam(string);
return this;
}
public ComputerBuilder setStorage(String storage) {
computer.setStorage(storage);
return this;
}
public Computer build() {
return this.computer;
}
}
Main.java
public class Main {
public static void main(String[] args) {
Computer computer = ComputerBuilder
// .start()
.startWithCpu("i7") // 함수 이름을통해 cpu를 세팅한다는것을 알수있다 -> 가독성이 높아짐
// .setCpu("i7")
.setRam("8g")
.setStorage("128g ssd")
.build();
System.out.println(computer.toString());
}
}
참고
https://asfirstalways.tistory.com/350
소스코드
'Java > design pattern' 카테고리의 다른 글
[java] 6강 프로토 타입 패턴(Prototype Pattern) (2) | 2020.01.22 |
---|---|
[java] 5강 싱글톤 패턴(singleton pattern) (0) | 2020.01.22 |
[java] 4강 팩토리 메소드 패턴(Factory Pattern) (0) | 2020.01.22 |
[java] 3강 템플릿 메소드 패턴(Template Method Pattern) (0) | 2020.01.13 |
[java] 2강 어댑터 패턴(adapter pattern) (0) | 2020.01.13 |