
๋์์ธ ํจํด์ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฒ์ฆ๋ ๋ฐฉ๋ฒ
์ฝ๋ ์ฌ์ฌ์ฉ์ฑ: ๋์ผํ ํจํด์ ์ฌ๋ฌ ๊ณณ์์ ์ ์ฉํ ์ ์์ด ์ฝ๋ ์ค๋ณต์ ์ค์ด๊ณ , ์์ฐ์ฑ์ ๋์
์ ์ง๋ณด์์ฑ: ๊ตฌ์กฐํ๋ ์ฝ๋๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐ -> ์ ์ง๋ณด์๊ฐ ์ฌ์์ง๊ณ ์๋ก์ด ์๊ตฌ์ฌํญ์ด ์๊ฒผ์ ๋ ์ฝ๋ ๋ณ๊ฒฝ์ด ๊ฐํธ
ํ์ฅ์ฑ: ๊ฐ์ฒด๋ ๋ชจ๋์ ํ์ฅํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ฉ์ดํ์ฌ, ์์คํ ์ด ์ปค์ ธ๋ ์ ์ฐ์ฑ์ ์ ์ง ๊ฐ๋ฅ
ํจ์จ์ ์ธ ํ์ : ํ ๋ด์์ ๋์์ธ ํจํด์ ๊ณต์ ํ๋ฉด, ์๋ก์ ์ฝ๋๋ฅผ ์ดํดํ๊ณ ํ์ ํ๋ ๋ฐ์ ๋์
๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฐฉ์๊ณผ ๊ด๋ จ๋ ํจํด
ํ๋์ ํด๋์ค์ ์ค์ง ํ๋์ ์ธ์คํด์ค๋ง ๊ฐ์ง๋ ํจํด
์ ์ญ ์ ๊ทผ: ํ๋์ ์ธ์คํด์ค๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ญ์์ ๊ณต์ ํด, ์ค์ ๊ด๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์.
๋ฉ๋ชจ๋ฆฌ ์ ์ฝ: ๊ฐ์ฒด๋ฅผ ํ ๋ฒ๋ง ์์ฑํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ด๊ณ , ๋ถํ์ํ ์ค๋ณต ์์ฑ์ด ์์.
์ผ๊ด์ฑ ์ ์ง: ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฉํด ์ํ์ ์ผ๊ด์ฑ์ ๋ณด์ฅํ ์ ์์.
ํ ์คํธ ์ด๋ ค์ (TDD ๋ฌธ์ ): ์ฑ๊ธํค์ ์ ์ญ ์ํ๋ฅผ ๊ณต์ ํด ํ ์คํธ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ์ํ๋๊ธฐ ์ด๋ ค์. ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD)์์ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์.
์์กด์ฑ ์ฆ๊ฐ: ํด๋์ค๊ฐ ์ฑ๊ธํค์ ์ง์ ์์กดํ๋ฉด ๊ฒฐํฉ๋๊ฐ ๋์์ ธ ์ฝ๋์ ์ ์ฐ์ฑ์ด ๋จ์ด์ง.
์์กด์ฑ ์ฃผ์ ์ผ๋ก ํด๊ฒฐ: ์์กด์ฑ ์ฃผ์ ์ ํตํด ์ฑ๊ธํค ๊ฐ์ฒด๋ฅผ ์ฃผ์ ๋ฐ์ผ๋ฉด, ๋ชจ์ ๊ฐ์ฒด(Mock)๋ฅผ ์ฌ์ฉํด ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ๋์ด๊ณ , ๊ฒฐํฉ๋๋ฅผ ์ค์ผ ์ ์์.
TDD : ํ ์คํธ๋ฅผ ๋จผ์ ์์ฑํ๊ณ ์ด๋ฅผ ํต๊ณผํ๋ ์ฝ๋๋ฅผ ๊ตฌํํ๋ ๋ฐฉ์
์์กด์ฑ ์ฃผ์ : ๊ฐ์ฒด๋ฅผ ์ธ๋ถ์์ ์ฃผ์ ๋ฐ์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ณ ํ ์คํธ๋ฅผ ์ฉ์ดํ๊ฒ ํ๋ ๊ธฐ๋ฒ
๊ฐ์ฒด ์์ฑ์ ์ฑ ์์ ์๋ธํด๋์ค์ ์์ํ๋ ํจํด
์์ ํด๋์ค๋ ๊ฐ์ฒด ์์ฑ ๋ฐฉ๋ฒ์ ์ ํ์ ์์ผ๋ฉฐ, ํ์ ํด๋์ค๊ฐ ๊ตฌ์ฒด์ ์ธ ๊ฐ์ฒด๋ฅผ ์์ฑํจ.
์ ์ฐ์ฑ: ๊ฐ์ฒด ์์ฑ ๋ก์ง์ ํ์ ํด๋์ค์์ ๋ณ๊ฒฝํ ์ ์์ด ์ ์ฐํ ์ค๊ณ๊ฐ ๊ฐ๋ฅํจ.
ํ์ฅ์ฑ: ์๋ก์ด ๊ฐ์ฒด๊ฐ ์ถ๊ฐ๋๋๋ผ๋ ์์ ํด๋์ค๋ฅผ ์์ ํ์ง ์์ผ๋ฏ๋ก, ์ฝ๋์ ํ์ฅ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ด ๋์์ง.
์ฝ๋ ์บก์ํ: ๊ฐ์ฒด ์์ฑ ๊ณผ์ ์ ๋ถ๋ฆฌํด ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ์์ฑ ๋ก์ง์ ์ ํ์ ์๊ฒ ํ์ฌ ์ฝ๋๊ฐ ๊ฐ๊ฒฐํด์ง.
๋จ์ : ์๋ธํด๋์ค๊ฐ ๋ง์์ง๋ฉด ์ฝ๋ ๊ตฌ์กฐ๊ฐ ๋ณต์กํด์ง๊ณ , ๊ด๋ฆฌ๊ฐ ์ด๋ ค์์ง ์ ์์.
public abstract class CoffeeFactory {
abstract Coffee createCoffee(String type);
}
public class EspressoFactory extends CoffeeFactory {
@Override
Coffee createCoffee(String type) {
switch(type) {
case "espresso":
return new Espresso();
case "latte":
return new Latte();
}
return null;
}
}
์์ฑํ๋ ๊ฐ์ฒด๋ฅผ ๋ณ๋๋ก ๋๋ค.
๊ฐ์ฒด์ ๋์ด์ค๋ ๊ฐ์ ๋ฐ๋ผ์, ๋ค๋ฅธ ์ปคํผ๋ฅผ ๋ง๋ค์ด ๋ธ๋ค.