๐ก ๋น๋(Builder) ํจํด์ด๋?
๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ ์ ์ ์ง์ ์ผ๋ก ๊ฐ์ฒด์ ์ ๋ณด๋ฅผ ์์งํ์ฌ ๋ณต์กํ ๊ฐ์ฒด๋ค์ ๋จ๊ณ ๋ณ๋ก ์์ฑํ๋ ์์ฑ ๋์์ธ ํจํด์ ๋๋ค. ์์ฑ์์ ๋ค์ด๊ฐ ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฉ์๋๋ก ํ๋ํ๋ ๋ฐ์๋ค์ด๊ณ ๋ง์ง๋ง์ ํตํฉ ๋น๋ํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ์์ ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ ์์ฑ์๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ฑํ์ง๋ง, ์์ฑ ๊ฐ์ฒด์ ์ด๊ธฐ๊ฐ์ ์ฃผ๊ฑฐ๋ ์์ฑํ ํด๋์ค๋ฅผ ์ ํํ๊ณ ์ถ์ ๋ ๋ณํ์ด ํ์ํฉ๋๋ค. ์ฆ, ๊ฐ์ฒด ์์ฑ์ ํด๋์ค ๋ก์ง ๋ฐ์ผ๋ก ์ฎ๊ธธ ํ์๊ฐ ์์ ๋ ๋น๋ ํจํด์ ์ฌ์ฉํฉ๋๋ค.
public static void main(String[] args) {
// ์์ฑ์ ๋ฐฉ์
Hamburger hamburger = new Hamburger(2, 3, 0, 3, 0, 0);
// ๋น๋ ๋ฐฉ์
Hamburger hamburger = new Hamburger.Builder(10)
.bun(2)
.patty(3)
.lettuce(3)
.build();
}
๐ก ํด๋์ค ๋ค์ด์ด๊ทธ๋จ์ผ๋ก ๋ณธ ๋น๋ ํจํด
- Builder : ๋ชจ๋ ์ ํ์ ๋น๋๋ค์ ๊ณตํต ๋ฉ์๋๋ฅผ ๋ด์ ์ธํฐํ์ด์ค
- Concrete Builder : ์์ฑ ๋จ๊ณ๋ค์ ๋ค์ํ ๊ตฌํ
- Product : ์์ฑ๋ ๊ฐ์ฒด๋ค
- Director : ์์ฑ ๋จ๊ณ๋ค์ ํธ์ถํ๋ ์์๋ฅผ ์ ์
๐ก ๋น๋ ํจํด ๊ตฌํ
class StudentBuilder {
private int id;
private String name;
private String grade;
private String phoneNumber;
public StudentBuilder id(int id) {
this.id = id;
return this;
}
public StudentBuilder name(String name) {
this.name = name;
return this;
}
public StudentBuilder grade(String grade) {
this.grade = grade;
return this;
}
public StudentBuilder phoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
return this;
}
public Student build() {
return new Student(id, name, grade, phoneNumber); // Student ์์ฑ์ ํธ์ถ
}
}
// ๋น๋ ํด๋์ค ์คํ
public static void main(String[] args) {
Student student = new StudentBuilder()
.id(2016120091)
.name("์๊บฝ์ ")
.grade("Senior")
.phoneNumber("010-5555-5555")
.build();
System.out.println(student);
}
๐ก ๋ง๋ฌด๋ฆฌ
๋น๋ ํจํด์ ์ฌ์ฉํ๋ฉด ์ ํ๋ค์ ๋ค์ํ ํํ์ ๋ง๋ค ๋ ๊ฐ์ ์์ฑ ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ ์ ์๊ณ , ์ ํ์ ๋น์ฆ๋์ค ๋ก์ง์์ ๋ณต์กํ ์์ฑ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค(SRP ์ค์).