๋จ์ ํ ์คํธ๋ฅผ ์ฝ๊ณ ํ์ตํ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ํ์ต ๊ณผ์ ์์ ์์ฑ๋์๊ธฐ ๋๋ฌธ์ ์๋ชป๋ ๋ด์ฉ์ด ์์ ์ ์์ต๋๋ค.
1. ๋จ์ ํ ์คํธ
๋จ์ผ ๋์ ๋จ์๋ฅผ ๊ฒ์ฆํ๊ณ ๋น ๋ฅด๊ฒ ์ํ๋๋ฉฐ, ๋ค๋ฅธ ํ ์คํธ์ ๋ณ๋๋ก ์ฒ๋ฆฌํ๋ ํ ์คํธ๋ฅผ ๋งํฉ๋๋ค. ํ๋์ ํด๋์ค๊ฐ ๋ค๋ฅธ ํด๋์ค ๋๋ ์ฌ๋ฌ ํด๋์ค์ ์์กดํ๋ฉด ์ด ๋ชจ๋ ์์กด์ฑ์ ํ ์คํธ ๋์ญ(test double)๋ก ๋์ฒดํ๋ฉฐ, ๋์์ ์ธ๋ถ ์ํฅ๊ณผ ๋ถ๋ฆฌํด์ ํ ์คํธ ๋์ ํด๋์ค์๋ง ์ง์คํ ์ ์๊ฒ ํฉ๋๋ค. ๋จ, ๋จ์๊ฐ ๋ฐ๋์ ํด๋์ค๋ก ๊ตญํ๋ ํ์๋ ์๋๋ฐ, ๊ณต์ ์์กด์ฑ์ด ์๋ ํ ์ฌ๋ฌ ํด๋์ค๋ฅผ ๋ฌถ์ด์ ๋จ์ํ ์คํธ๋ฅผ ํ ์๋ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. **์์ ์ฝ๋ ์กฐ๊ฐ์ด๋ ํ ํ์(๋ฉ์๋)์ ๋ํ ๊ฒ์ฆ์ผ ์๋ ์๊ณ , ํด๋์ค์ ๋ํ ํ ์คํธ์ผ ์๋ ์์ต๋๋ค.
- ์์ ์ฝ๋ ์กฐ๊ฐ(๋จ์) ๊ฒ์ฆ
- ๋น ๋ฅธ ์ํ
- ๊ฒฉ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๋ ์๋ํ๋ ํ ์คํธ
์ด๋ฅผ ํตํด ํฌ๊ฒ ๋ ๊ฐ์ง ์ด์ ์ ์ป์ ์ ์๋๋ฐ, ์ฒซ ๋ฒ์งธ๋ก ํ ์คํธ๊ฐ ์คํจํ๋ฉด ์ฝ๋๋ฒ ์ด์ค์ ์ด๋ ๋ถ๋ถ์ด ๊ณ ์ฅ ๋ฌ๋์ง ํ์คํ ์ ์ ์์ต๋๋ค. ํ๋์ ํ ์คํธ ๋์์ ํ ์คํธ ๋์ญ์ผ๋ก ๊ตฌ๋ถํ๊ธฐ ๋๋ฌธ์ ๋ช ํํ ์คํจ ์์ธ์ ์ ์ ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผํตํด ๋จ์ ํ ์คํธ์ ์ค์ ์ฝ๋๋ฅผ 1:1๋ก ๋์์์ผ ํ ์คํธ๋ฅผ ๋์ฑ ์ธ๋ฐํ๊ฒ ํ ์ ์์ต๋๋ค.
๋ ๋ฒ์งธ ์ฅ์ ์ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๋ถํ ํ ์ ์๋ ๊ฒ์ ๋๋ค. ๋ชจ๋ ํด๋์ค๊ฐ ๊ฐ๊ฐ ์ง์ ์ ์์กด์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด, ๋ํ ๊ทธ ์์กด์ฑ์ด ๋ค๋ฅธ ์์กด์ฑ์ ๊ฐ์ง๊ณ ์์ผ๋ฉด ๊ทธ๋ํ๊ฐ ๋ณต์กํด์ง๋๋ค. ์ด๋ ์ํ ์์กด์ฑ์ผ ์๋ ์์ผ๋ฉฐ, ๊ฒฐ๊ตญ์์๋ ์์น๋ก ๋์์ฌ ์๋ ์์ด ํ ์คํธ๋ฅผ ์ ํํ๊ฒ ํ ์ ์์ต๋๋ค. ์ด๋ ํ ์คํธ ๋์ญ์ ์ฌ์ฉํ๋ฉด ํด๋์ค์ ์ง์ ์ ์์กด์ฑ์ ๋์ฒดํ ์ ์๊ณ ์ฌ์ง์ด ์์กด์ฑ์ ์์กด์ฑ์ ๋ค๋ฃฐ ํ์๋ ์์ต๋๋ค.
์ฆ, ๊ฐ์ฒด๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋ถํดํด์ ๋จ์ ํ ์คํธ ์ค๋น ๋น์ฉ์ ๋ฎ์ถ ์ ์๋ ๊ฒ์ ๋๋ค. ๋์ญ์ ์ฐ๋ฉด ํด๋์ค์ ์ง์ ์ ์ธ ์์กด์ฑ์ ๋์ฒดํด ๊ทธ๋ํ๋ฅผ ๋๋ ์ ์์ผ๋ฉฐ, ์ด๋ ๋จ์ํ ์คํธ์์ ์ค๋นํด์ผ ํ ์์ ๋์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค. ๋ฌผ๋ก ์ํธ ์ฐ๊ฒฐ๋ ํด๋์ค์ ํฌ๊ณ ๋ณต์กํ ๊ทธ๋ํ๋ฅผ ํ ์คํธํ ๋ฐฉ๋ฒ์ ์ฐพ๋ ๋์ ๋จผ์ ์ด๋ฌํ ํด๋์ค ๊ทธ๋ํ๋ฅผ ๊ฐ์ง ์๋๋ฐ ์ง์คํด์ผ ํ๋๋ฐ, ๋๊ฐ ํด๋์ค ๊ทธ๋ํ๊ฐ ์ปค์ง ๊ฒ์ ๊ณง ์ค๊ณ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ํ ์คํธ ๋์ญ์ ๋๋๊ธฐ ์ํด์๋ SUT๋ฅผ ์ฌ์ฉํด์ผ ํ๋ฉฐ, SUT์๋ ์๋์ ๊ฐ์ ์ฐ๊ด ๊ฐ๋ /์ฉ์ด๋ค์ด ์กด์ฌํฉ๋๋ค. * MUT์ SUT๋ ๋์์ด๋ก ์ฌ์ฉ๋์ง๋ง ์ผ๋ฐ์ ์ผ๋ก MUT๋ ๋ฉ์๋๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ฐ ๋ฐํด SUT๋ ํด๋์ค ์ ์ฒด๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
SUT | ํ ์คํธ ๋์ ์์คํ (SUT, System Under Test) |
MUT | ํ ์คํธ์์ ํธ์ถํ SUT์ ๋ฉ์๋. |
ํ ์คํธ ๋์ญ | ์คํ๊ณผ ๊ด๋ จ ์์ด ๋ชจ๋ ์ข ๋ฅ์ ๊ฐ์ง ์์กด์ฑ์ ์ค๋ช ํ๋ ํฌ๊ด์ ์ฉ์ด |
๋ชฉ | ํ
์คํธ ๋์ ์์คํ
๊ณผ ํ๋ ฅ์ ๊ฐ์ ์ํธ ์์ฉ์ ๊ฒ์ฌํ ์ ์๋ ํน๋ณํ ํ
์คํธ ๋์ญ **ํ ์คํธ ๋์ญ์ ํ ์ข ๋ฅ |
2. ์์กด์ฑ์ ๊ดํ ๊ฐ๋ /์ฉ์ด
๊ณต์ ์์กด์ฑ์ ํ ์คํธ ๋์ ํด๋์ค ๊ฐ์ด ์๋๋ผ ํ ์คํธ ๊ฐ์๋ ๊ณต์ ๋ฉ๋๋ค. ํนํ ์ฑ๊ธํค์์ ๋ง์ด ๋ํ๋๋๋ฐ, ๊ทธ๋ฌ๋ ์ค์ฌ ์ฑ๊ธํค์ผ๋ก ๋ง๋ค๋๋ผ๋ ์ด๋ฅผ ๋งค๋ฒ ์๋ก ์์ฑํด์ ๋น๊ณต๊ฐ ์์กด์ฑ์ ์ ์งํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ค์ ํด๋์ค๋ ์ผ๋ฐ์ ์ผ๋ก ํ ๊ฐ ๋ฟ์ด์ง๋ง ๋ชจ๋ ์์กด์ฑ์ด SUT์ ์ฃผ์ ๋๋ฉด ๊ฐ ํ ์คํธ์์ ์ ์ธ์คํด์ค๋ฅผ ๋ง๋ค ์ ์์ผ๋ฏ๋ก ํ ์คํธ ์ ์ฒด์์ ๋จ์ผ ์ธ์คํด์ค๋ฅผ ์ ์งํ ํ์๊ฐ ์์ต๋๋ค. *๋ฐ๋ฉด ํ์ผ ์์คํ ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ ๊ฐ ๊ณต์ ๋๊ฑฐ๋ ํ ์คํธ ๋์ญ์ผ๋ก ๋์ฒด ๋ผ์ผ ํฉ๋๋ค.
๊ณต์ ์์กด์ฑ | ํ
์คํธ ๊ฐ์ ๊ณต์ ๋๊ณ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ ์๋จ์ ์ ๊ณตํ๋ ์์กด์ฑ ex) ์ ์ ๊ฐ๋ณ ํ๋, ๋ฐ์ดํฐ ๋ฒ ์ด์ค |
๋น๊ณต๊ฐ ์์กด์ฑ | ๊ณต์ ํ์ง ์๋ ์์กด์ฑ |
ํ๋ก์ธ์ค ์ธ๋ถ ์์กด์ฑ | ์ ํ๋ฆฌ์ผ์ด์
์คํ ํ๋ก์ธ์ค ์ธ๋ถ์์ ์คํ๋๋ ์์กด์ฑ. ์ด๋ ๋๋ถ๋ถ ๊ณต์ ์์กด์ฑ์ด์ง๋ง ๋ชจ๋ ๊ทธ๋ ์ง๋ ์๋ค. |
* ๋จ์ ํ ์คํธ๋ฅผ ๊ฒฉ๋ฆฌํ๋ ๊ฒ์ ํ ์คํธ ๋์ ํด๋์ค์์ ๊ณต์ ์์กด์ฑ๋ง ๊ฒฉ๋ฆฌํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋น๊ณต๊ฐ ์์กด์ฑ์ ๊ทธ๋๋ก ๋๋ค.
ํ๋ก์ธ์ค ์ธ๋ถ ์์กด์ฑ์ด๋ ์์ง ๋ฉ๋ชจ๋ฆฌ์ ์๋ ๋ฐ์ดํฐ, ์ฆ ํ๋ก์(proxy)์ ๋ํ ์์กด์ฑ์ ์ด์ผ๊ธฐํ๋๋ฐ, ์ด๋ ๋๋ถ๋ถ ๊ณต์ ์์กด์ฑ์ด์ง๋ง ๋ชจ๋ ๊ทธ๋ ์ง๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๋ก์ธ์ค ์ธ๋ถ์ด๋ฉด์ ๊ณต์ ์์กด์ฑ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ฐ ํ ์คํธ ์คํ ์ ๋์ปค ์ปจํ ์ด๋๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์์ํ๋ฉด ํ ์คํธ๊ฐ ๋ ์ด์ ๋์ผํ ์ธ์คํด์ค๋ก ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค ์ธ๋ถ์ด๋ฉด์ ๊ณต์ ํ์ง ์๋ ์์กด์ฑ์ด ๋ฉ๋๋ค. ์ด๋ ํ ์คํธ๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ผ๋ฏ๋ก, ์ฆ ๋ชจ๋ ํ ์คํธ๋ง๋ค ๋ณ๊ฐ๋ก ๋์ํ๊ฒ ๋๋ฏ๋ก ๊ฐ ํ ์คํธ์ ๊ฒฐ๊ณผ๊ฐ ๋ค๋ฅธ ํ ์คํธ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
์ด๋ฐ ๊ณต์ ์์กด์ฑ์ ํ ์คํธ ๊ฐ ๋์ฒด๋๋๋ฐ, ์ด๋ ํ ์คํธ ์คํ ์๋๋ฅผ ๋์ด๋ ๋ฐ ์์ต๋๋ค. ๊ณต์ ์์กด์ฑ์ ๊ฑฐ์ ์คํ ํ๋ก์ธ์ค ์ธ๋ถ์ ์๋ ๋ฐ ๋ฐํด, ๋น๊ณต๊ฐ ์์กด์ฑ์ ๋ณดํต ๊ทธ ๊ฒฝ๊ณ๋ฅผ ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ์ผ ์์คํ ๋ฑ์ ๊ณต์ ์์กด์ฑ์ ๋ํ ํธ์ถ์ ๋น๊ณต๊ฐ ์์กด์ฑ์ ๋ํ ํธ์ถ๋ณด๋ค ๋ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ฌํ ํธ์ถ์ ํฌํจํ๋ ๊ณต์ ์์กด์ฑ์ ๊ฐ์ง ํ ์คํธ๋ ๋จ์ ํ ์คํธ ์์ญ์์ ํตํฉ ํ ์คํธ ์์ญ์ผ๋ก ๋์ด๊ฐ๋๋ค.
ํ๋ฐ์ฑ ์์กด์ฑ์ ๋ฐํ์ ํ๊ฒฝ์ ์ค์ ๋ฐ ๊ตฌ์ฑ์ ์๊ตฌํ๊ฑฐ๋ ๋น๊ฒฐ์ ์ ๋์์ ํฌํจํฉ๋๋ค. ์ฆ, ์ถ๊ฐ ์ค์ ์ด ํ์ํ๊ฑฐ๋ ๊ฐ ํธ์ถ์ ๋ํด ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ํฌํจํฉ๋๋ค. ๊ณต์ ์์กด์ฑ๊ณผ ํ๋ฐ์ฑ ์์กด์ฑ์ ๊ฒน์น๋ ๋ถ๋ถ์ด ์กด์ฌํ๊ธฐ๋ ํ๋๋ฐ, ์๋ฅผ๋ค์ด ์๋ ๊ทธ๋ฆผ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ณต์ ์์กด์ฑ์ด์ ํ๋ฐ์ฑ ์์กด์ฑ์ ๋๋ค. ๋ฐ๋ฉด ํ์ผ ์์คํ ์ ๋จ์ ํ ์คํธ๊ฐ ์คํ ์ปจํ ์คํธ๋ฅผ ๋ฐฉํดํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ณต์ ์์กด์ฑ์ด์ง๋ง ํ๋ฐ์ฑ ์์กด์ฑ์ ์๋๋๋ค. ์ฆ, ๋จ์ํ ์คํธ๊ฐ ํ์ผ ์์คํ ์ ๋ด์ฉ์ ๋ฐ๊พธ์ด ๋ค์ ํ ์คํธ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐฉํดํ ์๋ ์๋ ๊ฒ์ ๋งํฉ๋๋ค. **๋์ ์์ฑ๊ธฐ๋ ํ๋ฐ์ฑ ์์กด์ฑ์ด์ง๋ง ๋ณ๋์ ์ธ์คํด์ค๋ฅผ ์ ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ณต์ ์์กด์ฑ์ ์๋๋๋ค.
ํ๋ฐ์ฑ ์์กด์ฑ์ด๋?
ํ๋ฐ์ฑ ์์กด์ฑ์ด๋ ๊ฐ๋ฐ์ ๋จธ์ ์ ๊ธฐ๋ณธ ์ค์น๋ ํ๊ฒฝ ์ธ์ ๋ฐํ์ ํ๊ฒฝ์ ์ค์ ๋ฐ ๊ตฌ์ฑ์ ์๊ตฌํ๊ฑฐ๋ ๋น๊ฒฐ์ ์ ๋์(nondeterministic behavior) ์ค ํ๋๊ฐ ํฌํจ๋ ๊ฒ์ ๋งํฉ๋๋ค. ์๋ฅผ๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ API ์๋น์ค๊ฐ ์์ต๋๋ค. ๋น๊ฒฐ์ ์ ๋์(nondeterministic behavior)์ด๋ ๋์ ์์ฑ๊ธฐ์ ๊ฐ์ด ๊ฐ ํธ์ถ์ ๋ํด ๋ค๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๊ธฐ ๋๋ฌธ์ ๋น๊ฒฐ์ ์ ์ด๋ผ๊ณ ํฉ๋๋ค. ๋จ, ์ด ๋ํ ๋ชฉ์ผ๋ก ๋์ฒด๋ฅผ ํด์ ๊ฒฐ์ ์ ๋์์ผ๋ก ๋ง๋ค ์ ์์ต๋๋ค.
3. ๋ฐ๋ ํ / ๊ณ ์ ํ
๋ฐ๋ ์คํ์ผ์ ํ ์คํธ ๋์ญ(๋ชฉ)์ผ๋ก ํ ์คํธ ๋์ ์ฝ๋ ์กฐ๊ฐ์ ๋ถ๋ฆฌํด์ ๊ฒฉ๋ฆฌ ์๊ตฌ ์ฌํญ์ ๋ค๊ฐ๊ฐ๋๋ค. ์ด๋ ๊ฐ๊ฐ์ ๋ชจ๋ ํด๋์ค๋ฅผ ๊ฒฉ๋ฆฌํด์ผ ํ๋ค๋ฉด ํ ์คํธ ๋์ ์ฝ๋ ์กฐ๊ฐ์ ๋จ์ผ ํด๋์ค๊ฑฐ๋ ํด๋น ํด๋์ค ๋ด์ ๋ฉ์๋์ ๋๋ค. ๋ฐ๋ฉด ๊ณ ์ ํ๋ ๋จ์ ํ ์คํธ๋ ์๋ก ๊ฒฉ๋ฆฌ๋ผ์ ์คํํฉ๋๋ค. ์ด๋ค ์์๋ก๋ ๊ฐ์ฅ ์ ํฉํ ๋ฐฉ์์ผ๋ก ์คํํ ์ ์์ผ๋ฉฐ ์๋ก์ ๊ฒฐ๊ณผ์ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
์ด ๋์ ๊ฒฉ๋ฆฌ ํน์ฑ์ ์ํด ๋๋ ์ง๊ฒ ๋์๋๋ฐ, ๋ฐ๋ํ๋ ํ ์คํธ ๋์ ์์คํ ์์ ํ๋ ฅ์๋ฅผ ๊ฒฉ๋ฆฌํ๋ ๊ฒ์ผ๋ก ๋ณด๋ ๋ฐ๋ฉด ๊ณ ์ ํ๋ ๋จ์ ํ ์คํธ๋ผ๋ฆฌ ๊ฒฉ๋ฆฌํ๋ ๊ฒ์ผ๋ก ๋ด ๋๋ค. ์ด๋ ๊ฒฐ๊ตญ ํ ์คํธํด์ผ ํ ๋จ์์ ์ฒ๋ฆฌ์ ์์กด์ฑ ์ทจ๊ธ์ ๋ํ ๋ฐฉ๋ฒ์ผ๋ก ๋์ด๊ฐ๋๋ฐ, ์ฆ ์ธ ๊ฐ์ง ์ฃผ์ ์ฃผ์ ์ ๋ํด ์๊ฒฌ ์ฐจ์ด๊ฐ ์์ต๋๋ค.
- ๊ฒฉ๋ฆฌ ์๊ตฌ ์ฌํญ
- ํ ์คํธ ๋์ ์ฝ๋ ์กฐ๊ฐ(๋จ์)์ ๊ตฌ์ฑ ์์
- ์์กด์ฑ ์ฒ๋ฆฌ
๊ฒฉ๋ฆฌ ์ฃผ์ฒด | ๋จ์ ํฌ๊ธฐ | ํ ์คํธ ๋์ญ ์ฌ์ฉ ๋์ | |
๋ฐ๋ํ | ๋จ์ | ๋จ์ผ ํด๋์ค | ๋ถ๋ณ ์์กด์ฑ ์ธ ๋ชจ๋ ์์กด์ฑ |
๊ณ ์ ํ | ๋จ์ ํ ์คํธ | ๋จ์ผ ํด๋์ค ๋๋ ํด๋์ค ์ธํธ | ๊ณต์ ์์กด์ฑ |
**๊ฐ๊ฐ์ ํ ์คํธ๋ฅผ ๊ฒฉ๋ฆฌํ๋ ๊ฒ์ ์ฌ๋ฌ ํด๋์ค๊ฐ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๊ณ ๊ณต์ ์ํ์ ๋๋ฌํ์ง ์๋ ํ ์ฌ๋ฌ ํด๋์ค๋ฅผ ํ ๋ฒ์ ํ ์คํธํด๋ ๊ด์ฐฎ๋ค๋ ๋ป์ ๋๋ค. ์ด๋ฅผ ํตํด ํ ์คํธ๊ฐ ์๋ก ์ํตํ๊ณ ์คํ ์ปจํ ์คํธ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
์ด ๋์ ์์กด์ฑ์ ๋ค๋ฃจ๋ ๋ฐฉ๋ฒ์๋ ์ฐจ์ด๊ฐ ์์๋๋ฐ ๋ฐ๋ํ๋ ํ ์คํธ์์ ์ผ๋ถ ์์กด์ฑ์ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์๋๋ก ํ๊ณ ์๋ค. ์ฆ, ๋ณํ์ง ์๋ ๊ฐ์ฒด , ์ฆ ๋ถ๋ณ ๊ฐ์ฒด๋ผ๋ฉด ์ด๋ฅผ ๊ตณ์ด ๊ต์ฒดํ์ง ์์๋ ๋๋ค. ์ด๋ฐ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ๊ฐ ๊ฐ์ฒด(value object) ๋๋ ๊ฐ(value)๋ผ๊ณ ํ๋ค. ์ค ํน์ง์ ๊ฐ๊ฐ์ ์ ์ฒด์ฑ์ด ์๋ค๋ ๊ฒ์ด๋ค. ์ฆ, ๋ด์ฉ์ ์ํด์๋ง ์๋ณ๋๋ค. ๊ทธ ๊ฒฐ๊ณผ ๋ ๊ฐ์ฒด๊ฐ ๋์ผํ ๋ด์ฉ์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ด๋ค ๊ฐ์ฒด๋ฅผ์ฌ์ฉํด๋ ๋๋ค. ์ด๋ฌํ ์ธ์คํด์ค๋ ์๋ก ๋ฐ๊ฟ ์ฌ์ฉํ ์ ์๋ค.
์ด ๋์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์๋ ์ฐจ์ด๊ฐ ์๋๋ฐ ๋ฐ๋ ์คํ์ผ์ ํํฅ์ TDD๋ฅผ, ๊ณ ์ ํ๋ ์ํฅ์ TDD๋ฅผ ์งํฅํ๋ค. ๋ฐ๋ ์คํ์ผ์ ๋ชฉ ๊ฐ์ฒด๋ฅผ ํตํด ์์ ๋ ๋ฒจ์์๋ถํฐ ํ ์คํธ๋ฅผ ํด๊ฐ๋ฉฐ ํ ๋ฒ์ ํ ํด๋์ค์ ์ง์คํ ์ ์๊ฒ ํ๋ค. ์ด๋ฅผ ํตํด ๋ชจ๋ ํ๋ ฅ์๋ฅผ ์ฐจ๋จํด ํด๋น ํ๋ ฅ์์ ๊ตฌํ์ ๋์ค์ผ๋ก ๋ฏธ๋ฃฐ ์ ์๋ค.
๋ฐ๋ฉด ๊ณ ์ ํ๋ ์ค์ ๊ฐ์ฒด๋ฅผ ๋ค๋ค์ผ ํ๋ฏ๋ก ์ง์นจ์ ๋๊ฐ์ด ๋์ง ์๋๋ค. ๋๋ฉ์ธ ๋ชจ๋ธ์ ์์์ผ๋ก ์ต์ข ์ฌ์ฉ์๊ฐ ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ ๋๊น์ง ๊ณ์ธต์ ๊ทธ ์์ ๋ ๋๋ค. ๋ฐ๋ ์คํ์ผ์ ๊ณ ์ ์คํ์ผ๋ณด๋ค ํ ์คํธ๊ฐ ๊ตฌํ์ ๋ ์์ฃผ ๊ฒฐํฉํ๋ฉฐ, ๋ชฉ ๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ ์ผ๋ก ๋๋ฌด ๋จ์ฉํ๋ ๊ฒ์ ๋ํ ๋ฌธ์ ๊ฐ ์ ๊ธฐ๋๋ค.
ํ๋ ฅ์ ๋ ์์กด์ฑ
ํ๋ ฅ์๋ ๊ณต์ ํ๊ฑฐ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์์กด์ฑ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ณต์ ์์กด์ฑ์ด๋ฏ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ๊ทผ ๊ถํ์ ์ ๊ณตํ๋ ํด๋์ค๋ ํ๋ ฅ์๊ฐ ๋๋ฉฐ, ๋ํ ์๊ฐ์ ๋ฐ๋ผ ์ํ๊ฐ ๋ณํ ์๋ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ํด๋์ค๋ ๋ ๊ฐ์ง ์ ํ์ ์์กด์ฑ์ผ๋ก ๋์ํ๋๋ฐ ํ๋ ฅ์์ ๊ฐ์ ๋๋ค. ์๋ฅผ๋ค์ด ์๋์ ๊ฒฝ์ฐ ์ธ ๊ฐ์ง ์์กด์ฑ์ด ์กด์ฌํ๋๋ฐ, store๋ ํ๋ ฅ์์ด๋ฉฐ, ๋๋จธ์ง ๋(Product, 5)์ ์๋๋๋ค.
customer.purchage(store, Product.Shampoo, 5);
๋ชจ๋ ํ๋ก์ธ์ค ์ธ๋ถ ์์กด์ฑ์ด ๊ณต์ ์์กด์ฑ์ ๋ฒ์ฃผ์ ์ํ์ง ์์ต๋๋ค. ํ๋ก์ธ์ค ์ธ๋ถ ์์กด์ฑ์ ๊ณต์ ํ๋ ค๋ฉด ๋จ์ ํ ์คํธ๊ฐ ์๋ก ํต์ ํ ์ ์๋ ์๋จ์ด ์์ด์ผ ํฉ๋๋ค. ์ด๋ ์์กด์ฑ ๋ด๋ถ ์ํ๋ฅผ ์์ ํ๋ฉด ๋ฐ์ํ๋๋ฐ, ํ๋ก์ธ์ค ์ธ๋ถ์ ๋ถ๋ณ ์์กด์ฑ์ด๋ผ๋ฉด ์ด๋ฅผ ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. ํ ์คํธ๋ ๋ด๋ถ์ ์ด๋ค ๊ฒ๋ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ์๋ก ์คํ ์ปจํ ์คํธ์ ์ํฅ์ ์ค ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ์ธ๋ถ API๋ ๋ณ๊ฒฝ ๊ธฐ๋ฅ์ ๋ ธ์ถํ์ง ์๋ ํ ๊ณต์ ์์กด์ฑ์ด ์๋๋๋ค. ์ด๋ ํ๋ฐ์ฑ์ด๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋์ง๋ง ํ ์คํธ๊ฐ ๋ฐํํ๋ ๋ฐ์ดํฐ์ ์ํฅ์ ๋ฏธ์น ์์๊ธฐ ๋๋ฌธ์ ๊ณต์ ๊ฐ ์๋๋๋ค. ์ด๋ฐ์์กด์ฑ์ ํ ์คํธ ๋ฒ์ฃผ์ ํฌํจํ์ง ์์ผ๋ฉฐ, ํ ์คํธ ๋์ญ์ผ๋ก ๊ต์ฒดํ๋ฉด ๋ฉ๋๋ค. **์ฌ์ง์ด ํ๋ก์ธ์ค ์ธ๋ถ ์์กด์ฑ์ด ์ถฉ๋ถํ ๋น ๋ฅด๊ณ ์ฐ๊ฒฐ์ด ์์ ์ ์ด๋ฉด ํ ์คํธ์ ๊ทธ๋๋ก ์ฌ์ฉํด๋ ๋ฉ๋๋ค.
์ค์ ํ๋ก์ ํธ์์ ํ๋ก์ธ์ค ์ธ๋ถ๊ฐ ์๋ ๊ณต์ ์์กด์ฑ์ ๊ฑฐ์ ์์ต๋๋ค. ์์กด์ฑ์ด ํ๋ก์ธ์ค ๋ด๋ถ์ ์์ผ๋ฉด ๊ฐ ํ ์คํธ์์ ๋ณ๋์ ์ธ์คํด์ค๋ฅผ ์ฝ๊ฒ ๊ณต๊ธํ ์ ์๊ธฐ ๋๋ฌธ์ ํ ์คํธ ๊ฐ ๊ณต์ ํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ๊ณต์ ๋์ง ์๋ ํ๋ก์ธ์ค ์ธ๋ถ ์์กด์ฑ์ ์ผ๋ฐ์ ์ผ๋ก ์ ํ ์ผ์ด ์์ผ๋ฉฐ, ์ด๋ฐ ์์กด์ฑ์ ๋๋ถ๋ถ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํ ์คํธ๋ก ์์ ๋ ์ ์์ต๋๋ค.
ํตํฉ ํ ์คํธ
๋ ๋ถํ๋ ํตํฉ ํ ์คํธ์์๋ ๊ฒฌํด์ ์ฐจ์ด๊ฐ ์๋๋ฐ ๋ฐ๋ ํ๋ ๊ฒฉ๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ์ด๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ๊ณ ์ ํ๋ ๋ค๋ฅธ ํ ์คํธ์ ๋ณ๋๋ก ์ฒ๋ฆฌํ๋ค.
๋จ์ ํ ์คํธ๋ ๋จ์ผ ๋์ ๋จ์๋ฅผ ๊ฒ์ฆํ๊ณ ๋น ๋ฅด๊ฒ ์ํ๋๋ฉฐ, ๋ค๋ฅธ ํ ์คํธ์ ๋ณ๋๋ก ์ฒ๋ฆฌ๋๋ค. ํตํฉ ํ ์คํธ๋ ์ด๋ฌํ ๊ธฐ์ค ์ค ํ๋ ์ด์์ ์ถฉ์กฑํ์ง ์๋ ํ ์คํธ๋ค.
1. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฒฝ์ฐ ๋ค๋ฅธ ํ ์คํธ์ ๋ถ๋ฆฌํด ์คํํ ์ ์๋ค. ์ด๋ค ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ํ ๋ณ๊ฒฝ์ด ์๊ธฐ๋ฉด ๋ณ๋ ฌ๋ก ์คํํ ๋ ๋์ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์กดํ๋ ๋ค๋ฅธ ๋ชจ๋ ํ ์คํธ์ ๊ฒฐ๊ณผ๊ฐ ๋ณ๊ฒฝ๋๋ค. ์ด ๊ฐ์ญ์ ํผํ๋ ค๋ฉด ใ ์ถ๊ฐ ์กฐ์น๋ฅผ ์ทจ์ ํด์ผ ํ๋ค. ํนํ ์ด๋ฐ ํ ์คํธ๋ ์์ฐจ์ ์ผ๋ก ์คํํด์ ๊ฐ ํ ์คํธ๊ฐ ๊ณต์ ์์กด์ฑ๊ณผ ํจ๊ป ์๋ํ๋ ค๊ณ ๊ธฐ๋ค๋ฆด ์ ์๋ค.
2. ์ฌ๊ธฐ์ ์ธ๋ถ ์์กด์ฑ์ ์ ๊ทผํ๋ฉด ํ ์คํธ๊ฐ ๋๋ ค์ง๋๋ฐ, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ํธ์ถ์ ์คํ ์๊ฐ์ ์๋ฐฑ ๋ฐ๋ฆฌ์ด๋ฅผ ์ถ๊ฐํ๋ค. ๋์ผํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์๋ ๊ฐ์ฒด ๊ฐ ํต์ ์ ๋ณ๋ ํ๋ก์ธ์ค ๊ฐ ํต์ ๋ณด๋ค ํจ์ฌ ์ ๋ ดํ๋ค. ํ ์คํธ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๋ด ๊ฐ์ฒด ์๋ฐฑ ๊ฐ์ ํจ๊ป ๋์ํ๋๋ผ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํธ์ถ๋ณด๋ค ๋น ๋ฅด๊ฒ ์คํ๋ ๊ฒ์ด๋ค.
3. ๋ ์ด์์ ๋์ ๋จ์๋ฅผ ๊ฒ์ฆํ ๋์ ํ ์คํธ๋ ํตํฉ ํ ์คํธ๋ค. ํ ์คํธ ์ค์ํธ์ ์คํ ์๋. ๋น์ทํ ๋จ๊ณ๋ฅผ ๊ฑฐ์น์ง๋ง ๋ค๋ฅธ ๋์ ๋จ์๋ฅผ ๊ฒ์ฆํ๋ ๋๋ฆฐ ํ ์คํธ๊ฐ ๋ ๊ฐ ์์ ๋ ํ๋๋ก ํฉ์น๋ฉด ์กฐ๊ธ ๋ ๋น ๋ฅด๊ฒ ๊ฒ์ฆํ ์ ์๋ค. ์ด๋ ์ด๋ฏธ ๋๋ ค์ ํตํฉ ํ ์คํธ์๊ธฐ ๋๋ฌธ์ ๊ฒฐ์ ์ ์ธ ํ ์คํธ๋ ์๋๋ค. ๋ํ ๋ค๋ฅธ ํ์ด ๊ฐ๋ฐํ ๋ชจ๋์ด ๋ ์ด์ ์์ ๋ ํตํฉ ํ ์คํธ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ๊ฒ์ฆํ ์ ์๋ค.
ํตํฉ ํ ์คํธ๋ ๊ณต์ ์์กด์ฑ, ํ๋ก์ธ์ค ์ธ๋ถ ์์กด์ฑ ๋ฟ ์๋๋ผ ์กฐ์ง ๋ด ๋ค๋ฅธ ํ์ด ๊ฐ๋ฐํ ์ฝ๋ ๋ฑ๊ณผ ํตํฉํด ์๋ํ๋์ง๋ ๊ฒ์ฆํ๋ ํ ์คํธ๋ค. ์ฌ๊ธฐ์๋ ์๋ ํฌ ์๋ ํ ์คํธ๊ฐ ์กด์ฌํ๋๋ฐ, ์ด๋ ์ฝ๋๊ฐ ํ๋ก์ธ์ค ์ธ๋ถ ์ข ์์ฑ๊ณผ ํจ๊ป ์ด๋ป๊ฒ ์๋ํ๋์ง๋ฅผ ๊ฒ์ฆํ๋ค. ์ด ๋์ ์ฐจ์ด์ ์ ์๋ ํฌ ์๋ ํ ์คํธ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์์กด์ฑ์ ๋ ๋ง์ด ํฌํจํ๋ค๋ ๊ฒ์ด์ง๋ง ๋์ ๊ฒฝ๊ณ๋ ๋ชจํธํ๋ค.
์๋ ํฌ ์๋๋ผ๋ ๋ช ์นญ์ ๋ชจ๋ ์ธ๋ถ ์ ํ๋ฆฌ์ผ์ด์ ์ ํฌํจํด ์์คํ ์ ์ต์ข ์ฌ์ฉ์์ ๊ด์ ์์ ๊ฒ์ฆํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ด๋ ์ ์ง ๋ณด์ ์ธก๋ฉด์์ ๊ฐ์ฅ ๋น์ฉ์ด ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋จ์ ํ ์คํธ์ ํตํฉ ํ ์คํธ๋ฅผ ํต๊ณผํ ํ ๋น๋ ํ๋ก์ธ์ค ํ๋ฐ์ ์คํํ๋ ๊ฒ์ด ์ข๋ค. ๋ํ ์ด๋ ๋น๋ ์๋ฒ์์๋ง ์คํํ ์๋ ์๋ค.
๋๊ธ