์์ฑ์ : ์๊ทธ๋ฆผ
ํฉํ ๋ฆฌ ๋์์ธ ํจํด์ด๋ ๊ฐ์ฒด ์์ฑ ์ฒ๋ฆฌ๋ฅผ ๋ณ๋์ ํด๋์ค(ํฉํ ๋ฆฌ)์๊ฒ ๋งก๊ธฐ๋ ๊ฒ์ด๋ค. ์ฆ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ A a = new A();
์ด๋ฐ ์์ผ๋ก ํ์ง ์๊ณ , Factory.getInstance("A");
์ฒ๋ผ ํฉํ ๋ฆฌ์๊ฒ ๊ฐ์ฒด ์์ฑ์ ๋ถํํ๋ ๋ฐฉ์์ด๋ค. ํฉํ ๋ฆฌ ๋์์ธ ํจํด์ ์ ์ฉํ๋ฉด ์ถํ ๊ฐ์ฒด ์์ฑ์ ๋ณ๊ฒฝ ์ฌํญ์ด ์๊ฒผ์ ๋ ์์ ์ด ์ฉ์ดํ๋ค.
Factory ํด๋์ค๋ฅผ ํตํด Product ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ์ฝ๋๋ฅผ ๊ตฌํํด๋ณด์.
interface Product {
public void sell();
}
class Pencil implements Product {
@Override
public void sell() {
System.out.println("sell Pencil !!!");
}
}
class Note implements Product {
@Override
public void sell() {
System.out.println("sell Note !!!");
}
}
Product pencil = new Pencil();
pencil.sell();
ํฉํ ๋ฆฌ ๋์์ธ ํจํด์ ์ ์ฉํ๊ธฐ ์ํด์๋ ๋จผ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ Factory ํด๋์ค๋ฅผ ์์ฑํด์ผ ํ๋ค.
์ด ๋, Factory ํด๋์ค์ ๊ฐ์ฒด ์์ฑ ๋ฉ์๋๋ static์ผ๋ก ์ ์ธํ๋ ๊ฒ์ด ์ข๋ค. ์ธ๋ถ์์๋ Factory ํด๋์ค ๋ด๋ถ์ ์ ํ ๊ด์ฌ์ด ์๊ณ , ๋ฌธ์์ด์ ํตํด ์์ฑํ ๊ฐ์ฒด์ ๊ทธ ์ธํฐํ์ด์ค์๋ง ๊ด์ฌ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
class ProductFactory {
public static Product getProduct(String className) {
Product p = null;
switch (className) {
case "Pencil": p = new Pencil(); break;
case "Note": p = new Note(); break;
}
return p;
}
}
Factory ํด๋์ค๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค.
Product pencil = ProductFactory.getProduct("Pencil");
pencil.sell();
/*
// getProduct ๋ฉ์๋๋ฅผ static์ผ๋ก ์ ์ธํ์ง ์์์ ๋
ProductFactory factory = new ProductFactory();
Product pencil = factory.getTransportation("A");
*/
Factory Java ์ ์ฒด ๊ตฌํ
-
๊ณ์ธต ๊ฐ ์์กด๋๊ฐ ๋ฎ์์ง๋ค.
๋ง์ผ A ํด๋์ค ํ์ผ์ด ๋ณ๊ฒฝ/์ญ์ ๋์์ ๋, ๊ฐ์ฒด๋ฅผ ์ง์ ์์ฑ(
new A()
)ํ์ ๋๋ ๊ฐ์ฒด ์์ฑ ์ฝ๋๋ฅผ ๋ค ๊ณ ์ณ์ผ ํ๋ค. ๋ฐ๋ฉด ํฉํ ๋ฆฌ ๋์์ธ ํจํด์ ์ฐ๋ฉด, Factory ์ฝ๋๋ง ๊ณ ์น๋ฉด ๋๋ค.์ฆ ํด๋์ค์ ๋ณ๊ฒฝ์ฌํญ์ด ์๊ฒผ์ ๋, ๊ฐ์ฒด๋ฅผ ์์ฑํด ์ฌ์ฉํ๋ main ๋ฉ์๋ ์ชฝ์์๋ ์ํฅ์ ๋ฐ์ง ์๋๋ค. ๋์ interface๋ ๋ฐ๋์ ์๊ณ ์์ด์ผ ํ๋ค. Factory๋ฅผ ํตํด return ๋์ด ์ค๋ ์ค์ ๊ฐ์ฒด ๋ ์์๊ฒ๋ ๊ด์ฌ์ด ์๊ณ , interface์๋ง ๊ด์ฌ์ด ์์ผ๋ฉฐ ๋น์ฆ๋์ค ๋ก์ง์ ๋ฐ๋ผ์ interface์ ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ฉด ๋๋ค.
-
์ธ๋ถ์ ์ํต ๊ตฌ์กฐ๊ฐ ์๊ธด๋ค.
๋ฌธ์์ด์ ํตํด ๊ฐ์ฒด ์์ฑ์ ์์ฒญํ๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์์ ๋ฌธ์์ด์ ์ฝ์ด์ ๊ทธ ๋ฌธ์์ด๋ก ๊ฐ์ฒด ์์ฑ์ ํธ์ถํ๋ ๋ฑ์ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค. ๋ฐ๋ผ์ ์ธ๋ถ ์ํต ๊ตฌ์กฐ๊ฐ ์๊ธฐ๋ฉฐ ํ๋์ฝ๋ฉ ํ๋ ๊ฒ์ด ๋ง์ด ์ค์ด๋ค ์ ์๋ค.