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#
자바 디자인 패턴의 이해 - Gof Design Pattern - 인프런
자바 디자인 패턴 이해하기 강좌 입니다. 여러가지 디자인 패턴들을 알아보며 디자인 패턴에 대한 이해도를 높이도록 도와줍니다. Gof Design Pattern을 자바 언어로 설명한 강의. 의미 있고 쉬운 예제를 준비하려고 노력했습니다. 중급 프로그래밍 언어 Java MVC 온라인 강의 자바 디자인 패턴
www.inflearn.com
사전적 의미의 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 |