Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- Static
- redis
- r
- spring
- Java
- git
- socket
- effective
- NoSQL
- reactor
- 데이터통신
- cache
- HTTP
- ajax
- libuv
- javascript
- Elk
- html
- nodejs
- Linux
- network
- Lombok
- mybatis
- github
- mongodb
- VCS
- AWS
- 네트워크
- reactive
- Heap
Archives
- Today
- Total
빨간색코딩
Builder Pattern (빌더 패턴) 본문
인스턴스를 생성할 때 파라미터가 많을 수록, 매우 많은 경우의 수가 생긴다. 파라미터A는 값이 들어있을수도, B는 안들어있을수도 있는 등등등. 이럴 경우 대응할 수 있는 방안이 내 생각에서는 아래와 같았다.
- 오버로딩으로 사용할 만한 경우마다 생성자를 생성한다.
- 하나의 생성자에서 파라미터를 그냥 null 로 넘긴다.
그런데 타인의 코드를 보던 도중 VO 에 빌더패턴을 적용한 것을 보았다..!
1. Builder 패턴은 왜 쓰는가?
위의 서문같은 경우를 해결할 수 있다. 또한 아래와 같은 장점들이 있다.
- 인스턴스를 생성할 때 인자를 선택적으로 가독성 좋게 넘길 수 있다.
- 인자의 순서에 상관이 없어진다.
- 불필요한 생성자를 만들지 않는다.
2. 사용 예제
아래처럼 생성자를 멤버변수들을 나열해도 좋고, ComputerBulider 만 받아서 ComputerBulider.cpu 이런식으로 매핑해줘도 된다.
Computer.java
public class Computer {
private int serialNumber;
private String model;
private String vender;
private String cpu;
private int ram;
private int disk;
private String graphicCard;
private Computer(int serialNumber, String model, String vender, String cpu, int ram, int disk, String graphicCard) {
super();
this.serialNumber = serialNumber;
this.model = model;
this.vender = vender;
this.cpu = cpu;
this.ram = ram;
this.disk = disk;
this.graphicCard = graphicCard;
}
@Override
public String toString() {
return "Computer [serialNumber=" + serialNumber + ", model=" + model + ", vender=" + vender + ", cpu=" + cpu
+ ", ram=" + ram + ", disk=" + disk + ", graphicCard=" + graphicCard + "]";
}
public static class ComputerBulider {
private int serialNumber;
private String model;
private String vender;
private String cpu;
private int ram;
private int disk;
private String graphicCard;
public ComputerBulider setSerialNumber(int serialNumber) {
this.serialNumber = serialNumber;
return this;
}
public ComputerBulider setModel(String model) {
this.model = model;
return this;
}
public ComputerBulider setVender(String vender) {
this.vender = vender;
return this;
}
public ComputerBulider setCpu(String cpu) {
this.cpu = cpu;
return this;
}
public ComputerBulider setRam(int ram) {
this.ram = ram;
return this;
}
public ComputerBulider setDisk(int disk) {
this.disk = disk;
return this;
}
public ComputerBulider setGraphicCard(String graphicCard) {
this.graphicCard = graphicCard;
return this;
}
public Computer build() {
Computer computer = new Computer(serialNumber, model, vender, cpu, ram, disk, graphicCard);
return computer;
}
}
}
ComputerClient.java
public class ComputerClient {
public static void main(String[] args) {
Computer computer = new Computer.ComputerBulider()
.setCpu("i9")
.setDisk(256)
.build();
System.out.println(computer);
}
}
결과 : Computer [serialNumber=0, model=null, vender=null, cpu=i9, ram=0, disk=256, graphicCard=null]
'디자인패턴' 카테고리의 다른 글
Comments