Builder ํจํด
์์ฑ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํด ํด๋์ค๋ฅผ ๋ง๋ค ๋ Builder ํจํด์ ์ฌ์ฉํ๋ค.
ํ์์ฑ
์์ฑ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด์ฉํด ํด๋์ค๋ฅผ ๋ง๋ค ๋, ์ ๊ฒฝ ์จ์ผ ํ ์ธ์๋ค์ด 2~3๊ฐ๋ผ๋ฉด ์๊ด์์ง๋ง ์ธ์๋ค์ด 20๊ฐ, 30๊ฐ .. ๋ง์ ์๋ผ๊ณ ์๊ฐํด๋ณด์.
๊ทธ๋๊ทธ๋ ์ํฉ์ ๋ง๋ ์์ฑ์๋ฅผ ์ผ์ผ์ด ๋ง๋ค์ด ์ค ์ ์๊ธฐ ๋๋ฌธ์ Builder Pattern์ ์ด์ฉํ๋ค.
์์
public class Test {
private int testEl1;
private int testEl2;
private int testEl3;
private int testEl4;
private int testEl5;
}
์์ ๊ฐ์ Test Class๊ฐ ์๋ค๊ณ ์๊ฐํด๋ณด์.
์ํ๋ ๊ทธ๋๊ทธ๋ ์ํ๋ ๋ณ์๋ง ๋ฐ๊ฟ ์ ์๋ ์์ฑ์๋ฅผ ๋ง๋ค๊ธฐ ํ๋ค๋ค.
์ด๋ builder parttern์ ์ฌ์ฉํ๋ค.
public class Test {
private int testEl1;
private int testEl2;
private int testEl3;
private int testEl4;
private int testEl5;
public static class Builder {
private final int testEl1;
private final int testEl2;
private int testEl3 = 0;
private int testEl4 = 0;
private int testEl5 = 0;
public Builder(int testEl1, int testEl2){
this.testEl1 = testEl1;
this.testEl2 = testEl2;
}
public Builder testEl3(int testEl3){
this.testEl3 = testEl3;
return this;
}
public Builder testEl4(int testEl4){
this.testEl4 = testEl4;
return this;
}
public Builder testEl5(int testEl5){
this.testEl5 = testEl5;
return this;
}
public Test build() {
return new Test(this);
}
}
private Test(Builder builder){
testEl1 = builder.testEl1;
testEl2 = builder.testEl2;
testEl3 = builder.testEl3;
testEl4 = builder.testEl4;
testEl5 = builder.testEl5;
}
}
testEl1
, testEl2
๋ ํ์๋ก ๊ฐ์ ์ง์ ํด์ ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ๊ณ , ๋๋จธ์ง ์ธ์๋ค์ default ๊ฐ์ ์ ํด์ฃผ๊ณ ํ์ํ ๋ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค.
Test ํด๋์ค ์์ ๋ด๋ถ์ ์ผ๋ก Builder ๋ฉ์๋๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , return์ ํ์ฉํด ์์ฐจ์ ์ผ๋ก ๋ฉ์๋๋ฅผ ๋ถ๋ฌ์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค.
public static void main(String[] args){
Test test = new Builder(1,0).testEl3(5).testEl5(10).build();
}
์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํ์์ ์ผ๋ก ๋ค์ด๊ฐ์ผ ํ ์ธ์์ ๋๋จธ์ง๋ ์ ํ์ ์ผ๋ก ์ฌ์ฉํ์ฌ ์ธ์คํด์ค๋ฅผ ์์ฑํ ์ ์๋ค.
์น์์ ์ฌ์ฉ
์น์์๋ ํน์ ํด๋์ค์ ๋งน๋ชฉ์ ์ผ๋ก Setter๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋์ ๊ฐ์ด ๋ณํ๋์ง ์ ์ ์๊ณ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ด๋ฌํ ๋ฌธ์ ๋ฅผ Builder Pattern์ผ๋ก ํด๊ฒฐํ ์ ์๊ณ , ์คํ๋ง์ ๊ฒฝ์ฐ Lombok์ ํ์ฉํ๋ฉด ์ด๋
ธํ
์ด์
ํ๋๋ก Builder๋ฅผ ๊ตฌํํ ์ ์๋ค.
'Java > Java ์ด๋ก ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
OCP์ DIP (0) | 2022.03.12 |
---|---|
Java๋ก GUI ํ์๊ด๋ฆฌ ๋ง๋ค๊ธฐ(Swing) (0) | 2022.03.11 |
์ด๋ํฐ ํจํด (Adapter Pattern) (0) | 2022.03.07 |
์ฑ๊ธํด ํจํด (Singleton pattern) (0) | 2022.03.07 |
์๋ฐ ํ๋ก๊ทธ๋จ ๊ตฌ๋(JVM,JRE,JDK) (0) | 2022.03.06 |