1. ํจ์จ์ ์ด๊ณ ์ฒด๊ณ์ ์ธ ์ํํธ์จ์ด ํ ์คํธ
- ๋ฒ๊ทธ ์ฐพ๊ธฐ → ์ํํธ์จ์ด ํ ์คํธ์ ์ ๋ถ
- ๋ฒ๊ทธ๋ ๊ฒฝ๊ณ๊ฐ์ ์ข์ํ๋ค.
- ์ต์ ํ์ํ ๊ฐ์ด 10์ผ ๊ฒฝ์ฐ, 10์ ๊ฒฝ๊ณ๊ฐ(9~11)
- ์ ํ ์ฝ๋์ ํ๋์ ๋น ๋ฅด๊ฒ ๊ธฐ์ ํ๋ ๊ฐ๋จํ ํ ์คํธ๋ฅผ ๋ณด์ ํ๋ ๊ฒ์ ํ ์คํธ ์ค์ํธ์ ์ฝ๊ฐ์ ์ค๋ณต์ด ์๋๋ผ๋ ํญ์ ๋์ด ๋๋ค.
- ์ํํธ์จ์ด๋ฅผ ์ฌ๋ฐ๋ก ํ
์คํธํ๋ ค๋ฉด ๊ทธ๋ ๊ฒ ์ ํ๋ ๊ฒ๋ณด๋ค ์ผ์ด ๋ ๋ง์์ง๋ง, ๊ทธ๋ผ์๋ ์ ๊ฐ์น ์๋ ์ผ์ธ๊ฐ?
- ์์ฉ ๋ฒ์ ์์ ๋ฐ์ํ๋ ๋ฒ๊ทธ์ ๋น์ฉ์ ์๋ฐฉํ๋ ๋น์ฉ๋ณด๋ค ํจ์ฌ ๋ ํฌ๋ค
- ๋ฒ๊ทธ๋ฅผ ์ฐพ๊ณ , ํด๊ฒฐ, ๊ฐ์ ํ๋ ๊ณผ์ ์ด ์คํ๋ ค ์๊ฐ์ ๋ง์ด ์๋ชจํ๋ค.
- ์ฐ์ต์ด ๊ด๊ฑด → ํ ์คํธ ์ผ์ด์ค ์์ฑ์ ์ต์ํด์ง๋ฉด ๋ ๋นจ๋ฆฌ ์์ฑํ ์ ์๋ค.
- ํจ์จ์ → ์ฌ๋ฐ๋ฅธ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋ฐ ์ง์ค
- ์ฒด๊ณ์ → ์ด๋ค ์ฝ๋ ์กฐ๊ฐ์ ๋ํด ์ด๋ ๊ฐ๋ฐ์๋ผ๋ ๊ฐ์ ํ ์คํธ ์ค์ํธ๋ฅผ ๋ง๋ค์ด๋ธ๋ค๋ ๊ฒ
- ํ ์คํธ ์ ๋ฌด์ ์ด๋ ค์ด ์ ์ JUnit ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ ์๋ ํ ์คํธ ์ผ์ด์ค๊ฐ ๋ฒ๊ทธ๋ฅผ ๋๋ฌ๋ด๋๋ก ์ ๋๋ก ์ค๊ณํ๋ ์ผ
- “๊ฒ์ฆ์ ์์คํ ์ด ์ ๋๋ก ๋์ด ์๋๊ฐ์ ๊ดํ ๊ฒ, ์ ํจ์ฑ ๊ฒ์ฌ๋ ์ฌ๋ฐ๋ฅธ ์์คํ ์ ๊ฐ์ง๋ ๋ฐฉ๋ฒ์ ๊ดํ ๊ฒ”
- ํด๋์ค ์ค๊ณ ๋ฐฉ์์(์ํคํ ์ณ) ๋จ์ ํ ์คํธ๋ฅผ ์ผ๋ง๋ ์ฝ๊ฒ ์์ฑํ ์ ์๋๊ฐ์ ํฐ ์ํฅ์ ๋ฏธ์น๋ค.
๐ก ๋จ์ ํ ์คํธ๋ ์์คํ ์์ ์์ ๋จ์๋ฅผ ํธ์ถํ๋ ์๋ํ๋ ์ฝ๋ ์กฐ๊ฐ, ์์ ๋จ์๋ ํ ๋ฉ์๋, ํ ํด๋์ค ๋๋ ํจ๊ป ๋์ํ๋ ์ฌ๋ฌ ํด๋์ค์ ์ด๋ฅผ ์ ์๊ณ , ๊ฒ์ฆ ๊ฐ๋ฅํ ๋จ ํ๋์ ๋ ผ๋ฆฌ์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๋ค. (๋ก์ด ์ค์๋ก๋ธ, 2009)
์์ฝ
- ์ฒด๊ณ์ ์ด๊ณ ํจ์จ์ ์ธ ์ํํธ์จ์ด ํ ์คํธ๋ฅผ ํตํด ์ฝ๋ ๊ตฌ์๊ตฌ์์ ์คํํ๊ณ ์์ฑ๋ ์๋ ์ผ์ด์ค๋ฅผ ์ค๊ณํ์.
- ์๋ฒฝํ ํ ์คํธ๋ ๋ถ๊ฐ๋ฅ, ํ ์คํธ๊ฐ ์ผ๋ง๋ ํ์ํ ์ง์ ๋ํด ์ ์ถฉ์์ ๋ง๋ จํ์.
2. ๋ช ์ธ ๊ธฐ๋ฐ ํ ์คํธ
๐ก ํ์ต ๋ด์ฉ
- ๋ช ์ธ ๊ธฐ๋ฐ ํ ์คํธ ๊ธฐ๋ฒ์ ์ ์ฉํ์ฌ ํ ์คํธ ์ผ์ด์ค ์์ฑํ๋ ๋ฐฉ๋ฒ
- ํ๋ก๊ทธ๋จ ๊ฒฝ๊ณ์ ๋ํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์๋ณํ๊ณ ์์ฑํ๋ ๋ฐฉ๋ฒ
- ๊ฒฝ๊ณ ํ ์คํธ: ํ๋ก๊ทธ๋๋จธ๊ฐ ๊ฒฝ๊ณ ๊ทผ์ฒ์์ ๋ฐ์ํ๋ ๋ฒ๊ทธ๋ฅผ ๋ง๋ค ํ๋ฅ ์ ๋ค๋ฅธ ์ ๋ ฅ๊ฐ์ ๋นํด ๋ ํฌ๋ค.
2.2 ๊ฐ๋ตํ ์ดํด๋ณด๋ ๋ช ์ธ ๊ธฐ๋ฐ ํ ์คํธ
- ์๊ตฌ์ฌํญ ์ดํด
- ํ๋ก๊ทธ๋จ์ด ๋ฌด์์ ์ํํด์ผ ํ๋์ง, ๋ง์์ผ ํ๋์ง, ํน์ ์ผ์ด์ค, ๋ณ์ ํ์ , ์ ๋ ฅ ๋๋ฉ์ธ ๋ฑ
- ํ๋ก๊ทธ๋จ ํ์
- ํ๋ก๊ทธ๋จ ๊ฐ์ง๊ณ ๋๊ธฐ
- ๊ตฌํ ์๋ณ
- ์ ๋ ฅ ๋ณ์ ํ์ , ๋ฒ์, ๋ณ์ ๊ฐ ์ํธ์์ฉ, ์์กด์ฑ, ์ถ๋ ฅ๊ฐ ๋ฑ
- ๊ฒฝ๊ณ ๋ถ์
- ํ ์คํธ ์ผ์ด์ค ๊ณ ์
- ํ ์คํธ ์๋ํ
- ๊ฐํ
์์ฝ
- ์๊ตฌ์ฌํญ์ ํ ์คํธ๋ฅผ ๋ง๋๋ ๋ฐ ๊ฐ์ฅ ์ค์ํ ์ฐธ๊ณ ์๋ฃ๋ค.
- ๋ช ์ธ ํ ์คํธ๋ฅผ ์ํ 7๋จ๊ณ ์ ๊ทผ๋ฒ์ ์ ์ํ๋ค.
- ๋ฒ๊ทธ๋ ๊ฒฝ๊ณ๋ฅผ ์ข์ํ์ง๋ง, ๊ฒฝ๊ณ ์๋ณํ๋ ์ผ์ ๊ฐ์ฅ ์ด๋ ค์ธ ์ ์๋ค.
- ๋จ์ํ ํ๋ก๊ทธ๋จ๋ ํ ์คํธ ์ผ์ด์ค์ ์๊ฐ ๋งค์ฐ ๋์ด๋ ์ ์์ผ๋ ์ ํ๋จํ๊ณ ๊ฒฐ์ ํ์.
3. ๊ตฌ์กฐ์ ํ ์คํธ์ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง
๐ก ํ์ต ๋ด์ฉ
- ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ ์คํธ ์ผ์ด์ค๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
- ๊ตฌ์กฐ์ ํ ์คํธ์ ๋ช ์ธ ๊ธฐ๋ฐ ํ ์คํธ์ ๊ฒฐํฉ
- ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ํ์ฉ๋ฒ & ์ผ๋ถ ๊ฐ๋ฐ์๋ ์ซ์ดํ๋ ์ด์
3.2 ๊ตฌ์กฐ์ ํ ์คํธ ๊ฐ๋ตํ ์ดํด๋ณด๊ธฐ
- ๊ตฌ์กฐ์ ํ ์คํธ: ์์ค ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ ์คํธ๋ฅผ ๋์ถํ๋ ๊ฒ
- ๊ตฌ์กฐ์ ํ ์คํธ ๊ธฐ๋ฒ์ ์ดํดํ๋ค๋ ๊ฒ์ ์ปค๋ฒ๋ฆฌ์ง ๊ธฐ์ค์ ์ดํดํ๋ค๋ ๋ป
- ๋ช ์ธ ๊ธฐ๋ฐ ํ ์คํธ๋ฅผ ์ํ
- ๊ตฌํ ์ฌํญ์ ์ฝ๊ณ , ์ฃผ์ ๊ฒฐ์ ์ฌํญ ์ดํด
- ์์ฑํ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ฝ๋ ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ก ์ํํ์.
- ํ
์คํธ๊ฐ ์ํ๋์ง ์์ ์ฝ๋์ ๋ํด …
- ์ ์ํ๋์ง ์์๋์ง, ํ ์คํธํ ๊ฐ์น๊ฐ ์๋์ง, ํ์ํ๋ค๋ฉด ํ ์คํธ ์ผ์ด์ค๋ฅผ ๊ตฌํํ์.
- ๊ฐ์ฅ ์ค์ํ ์ ์, ๊ตฌ์กฐ์ ํ ์คํธ๋ ์ด์ ์ ๋ช ์ธ ๊ธฐ๋ฐ ํ ์คํธ๋ก ๊ณ ์ํ ํ ์คํธ ์ค์ํธ๋ฅผ ๋ณด๊ฐ
- 100% ์ปค๋ฒ๋ฆฌ์ง๊ฐ ์์คํ ์ ์ ๋๋ก ํ ์คํธํ๋ค๋ ๊ฒ์ ์๋ฏธํ์ง๋ ์์ง๋ง, ์ปค๋ฒ๋ฆฌ์ง๊ฐ ๋ฎ๋ค๋ ๊ฒ์ ์์คํ ์ด ์ ๋๋ก ํ ์คํธ๋์ง ์์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
3.10.6 ๋ฌด์์ (ํ ์คํธ) ์ํํ์ง ๋ง์์ผ ํ ๊น?
- catch ๋ธ๋ก, equals&hashCode, getter/setter, ์์ฑ์ ๋ฑ
- ๋ชจ๋ ์ฝ๋๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ฆ๋ช ๋ ๋๊น์ง ์ํ๋์ด์ผ ํ๋ค.
์์ฝ
- ๊ตฌ์กฐ์ ํ ์คํธ์ ์ ๋ฐ์ ๊ฐ๋ ์ ์ฝ๋์ ์ด๋ค ๋ถ๋ถ์ด ์์ง ์ํ๋์ง ์์๋์ง๋ฅผ ๋ถ์ ๋ฐ ์ํํ ์ง ์ดํด๋ณด๋ ๊ฒ
4. ๊ณ์ฝ ์ค๊ณ
๐ก ํ์ต ๋ด์ฉ
- ์ฌ์ ์กฐ๊ฑด, ์ฌํ ์กฐ๊ฑด, ๋ถ๋ณ์์ ์ค๊ณํ๋ ๋ฐฉ๋ฒ
- ๊ณ์ฝ๊ณผ ์ ํจ์ฑ ๊ฒ์ฌ์ ์ฐจ์ด์ ์ ๋ํ ์ดํด
- ํด๋์ค์ ๋ํด ๋ช
ํํ ๊ณ์ฝ์ ์ ์ํ๋ ๊ฒ?
- ํด๋์ค๊ฐ ์ฌ์ ์กฐ๊ฑด์ผ๋ก ๋ฌด์์ ์๊ตฌํ๋์ง, ์ฌํ ์กฐ๊ฑด์ผ๋ก ๋ฌด์์ ์ ๊ณตํ๋์ง, ๋ถ๋ณ์์ ํด๋์ค์ ๋ํด ํญ์ ๋ฌด์์ ์ ์งํ๋๋ก ํ๋์ง๋ฅผ ๋ช ํํ๊ฒ ์ค๋ฆฝ
- ์ฌ์ ์กฐ๊ฑด: ๋ฉ์๋๊ฐ ๋ฐ์๋ค์ธ ์ ๋ ฅ๊ฐ์ด ์๊ตฌ์ฌํญ์ ์ค์ํ๋๋ก ๋ณด์ฅ
- ์ฌํ ์กฐ๊ฑด: ๋ฉ์๋๊ฐ ๋ค๋ฅธ ๋ฉ์๋์ ์ฝ์ํ ๊ฒ์ ๋ฐํํ๋๋ก ๋ณด์ฅ
- ๋ฌธ์์ ์ฌ์ , ์ฌํ ์กฐ๊ฑด์ ๋ช ํํ ๊ธฐ์ ํ๋ ์ผ ์ญ์ ์ค์ํ๊ณ ๋งค์ฐ ๊ถ์ฅ๋๋ค.
/**
* ์ธ๊ธ ๊ณ์ฐ ...
* @param value ์ธ๊ธ ๊ณ์ฐ์ ์ํ ๊ฐ, ๊ฐ์ ์์์ฌ์ผ ํ๋ค.
* @return ๊ณ์ฐํ ์ธ๊ธ, ์ธ๊ธ์ ํญ์ ์์์ฌ์ผ ํ๋ค.
*/
4.5.4 ์์ธ vs ๋ถ๋๋ฌ์ด ๋ฐํ๊ฐ
- ํด๋ผ์ด์ธํธ์ ์ถ์ ๋จ์ํ๊ฒ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์์ธ๋ฅผ ๋์ง์ง ๋ง๊ณ ๋ฉ์๋ ๋ฐํ๊ฐ์ ‘๋ถ๋๋ฝ๊ฒ’ ๋ง๋๋ ๊ฒ
- ์ผ์ด๋์๋ ์ ๋๋ ๋์์ด ๋ฐ์ํ ๋ ํด๋ผ์ด์ธํธ๊ฐ ๊ทธ๊ฒ์ ์ด๋ป๊ฒ ๋ค๋ฃจ์ด์ผ ํ ์ง ๋ชจ๋ฅธ๋ค๋ฉด ์์ธ
- ํด๋ผ์ด์ธํธ๊ฐ ๊ณ์ ์์ ํ ์ ์๋๋ก ํ๋ค๋ฉด ๋ถ๋๋ฌ์ด ๊ฐ ๋ฐํ (substring)
์์ฝ
- ๊ณ์ฝ์ ์ค๊ณํ๋ ์ผ์ ํด๋์ค์ ๋ฉ์๋์ ์ฌ์ ์กฐ๊ฑด, ์ฌํ ์กฐ๊ฑด, ๋ถ๋ณ์์ ๋ช ์์ ์ผ๋ก ์ ์ํ๋ ๊ฒ
- ์ ํจ์ฑ ๊ฒ์ฌ์ ๊ณ์ฝ ๊ฒ์ฌ๋ ์๋ก ๋ค๋ฅธ ๋ชฉํ๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ ๋ค ์ํํด์ผ ํ๋ค.
- ๊ณ์ฝ์ ๋ณ๊ฒฝํ ๋๋ง๋ค ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์ํฅ์ ํ์ ํด์ผ ํ๋ค.
5. ์์ฑ ๊ธฐ๋ฐ ํ ์คํธ
๐ก ํ์ต ๋ด์ฉ
- ์์ฑ ๊ธฐ๋ฐ ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
- ์์ฑ ๊ธฐ๋ฐ ํ ์คํธ ๋๋ ์์ ๊ธฐ๋ฐ ํ ์คํธ๋ฅผ ์ธ์ ์์ฑํด์ผ ํ๋์ง
- ํ ์คํธ๋ฅผ ์ํด ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ ๊ฒ ์ข์ง ์์ ์๊ฐ์ผ๊น? → ํธ๋ ์ด๋ ์คํ
- ์ ์๋ ์ข ์ข ํ ์คํธ๋ฅผ ์ฝ๊ฒ ํด์ฃผ๋ ๊ฒ์ ๋ฌด์์ด๋ ์ข์ํ๋ค.
6. ํ ์คํธ ๋๋ธ๊ณผ ๋ชจ์ ๊ฐ์ฒด
๐ก ํ์ต ๋ด์ฉ
- ์คํ , ํ์ดํฌ, ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ํ ์คํธ๋ฅผ ๋จ์ํํ๋ ๋ฐฉ๋ฒ
- ๋ชจ์ ๊ฐ์ฒด๊ฐ ๋ฌด์์ธ์ง, ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ธ์ ์ฌ์ฉํด์ผ ํ๋์ง, ์ธ์ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋์ง์ ๋ํ ์ดํด
- ๋ชจ์ํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ๋ชจ์ํ๋ ๋ฐฉ๋ฒ
- ๋ค๋ฅธ ํด๋์ค์ ์์กดํ๋ ํด๋์ค๋ฅผ ํ ์คํธํ ๋ ์์กด์ฑ์ ์ฌ์ฉํ์ง ์๋ ๋ฐฉ๋ฒ์ ์์๋ด์ผ ํ๋๋ฐ, ์ด๋ ํ ์คํธ ๋๋ธ์ด ๋์์ด ๋๋ค.
- A ํด๋์ค๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ ๊ฐ์ ธ์ค๊ธฐ ์ํด IssuedInvoices์ ์์กดํ๋ ๊ฐ์ ํ๋ ์ฝ๋ฉ๋ ๋ชฉ๋ก์ ๋ฐํํ๋ IssuedInvoices๋ฅผ ๊ตฌํํ ์ ์๋ค.
- ์ฆ, A ์ฃผ๋ณ์ ํ๊ฒฝ์ ์ ์ดํจ์ผ๋ก์จ ๋ณต์กํ ์ข ์์ฑ์ ์ฒ๋ฆฌํ์ง ์๊ณ A์ ๋์ ๋ฐฉ์์ ๋ํ๋ผ ์ ์๋ค.
- ๋ค๋ฅธ ๊ฐ์ฒด์ ๋์์ ์๋ฎฌ๋ ์ด์
ํ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์ฅ์
- ๋ ํฐ ์ ์ด๊ถ์ ๊ฐ์ง๋ค. (๊ฐ์ง ๊ฐ์ฒด์๊ฒ ๋ฌด์์ ํด์ผ ํ ์ง ์ฝ๊ฒ ์๋ ค์ค ์ ์๋ค.)
- ์๋ฎฌ๋ ์ด์ ์ ๋น ๋ฅด๋ค.
- ํด๋์ค ๊ฐ ์ํธ์์ฉ์ ๋ฐ์ํ ์ ์๋ค. (ํ ์คํธ ์ฉ์ด์ฑ)
6.1 ๋๋ฏธ, ํ์ดํฌ, ์คํ , ๋ชจ์ ๊ฐ์ฒด, ์คํ์ด
6.1.1 ๋๋ฏธ ๊ฐ์ฒด
- ๋๋ฏธ๋ ํ ์คํธ ๋์ ํด๋์ค์ ์ ๋ฌ๋์ง๋ง ์ ๋ ์ฌ์ฉ๋์ง ์๋ ๊ฐ์ฒด
- ๋น์ฆ๋์ค ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๋ฌํด์ผ ํ ์ธ์๊ฐ ์ฌ๋ฌ ๊ฐ ์์ง๋ง, ํ ์คํธ๋ ์ด๋ค ์ค ๋ช ๊ฐ๋ง ์ํํ ๋
/* Customer๊ฐ ์ด๋ค Adress๋ฅผ ๊ฐ์ง๋ ์ง ์๊ดํ์ง ์์ ์ ์๋ค.
* ์ด๋ด ๊ฒฝ์ฐ ํ
์คํธ๋ ๋๋ฏธ Adress ๊ฐ์ฒด๋ฅผ ์ค์ ํด์ Customer ํด๋์ค์ ๋๊ธธ ์ ์๋ค.
**/
public class Customer {
private Long id;
private Address adress;
private Email email;
}
6.1.2 ํ์ดํฌ ๊ฐ์ฒด
- ํ์ดํฌ ๊ฐ์ฒด๋ ์๋ฎฌ๋ ์ด์ ํ๋ ค๋ ํด๋์ค๊ฐ์ด ์ค์ ๋ก ๋์ํ๋ ๊ตฌํ์ฒด๋ฅผ ๊ฐ์ง๋ค.
- ํ์ง๋ง ๋๊ฐ์ด ๋์ํ๋ ๊ฒ์ด ์๋ ํจ์ฌ ๋จ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋์ํ๋ค.
6.1.3 ์คํ
- ์คํ ์ ํ ์คํธ ๊ณผ์ ์์ ์ํ๋ ํธ์ถ์ ๋ํด ํ๋ ์ฝ๋ฉ๋ ์๋ต์ ์ ๊ณตํ๋ค.
- ํ์ดํฌ ๊ฐ์ฒด์๋ ๋ฌ๋ฆฌ ์คํ ์ ์ค์ ๋์ํ๋ ๊ตฌํ์ฒด๊ฐ ์๋ค.
6.1.4 ๋ชจ์ ๊ฐ์ฒด
- ๋ชจ์ ๊ฐ์ฒด๋ ๋ฉ์๋์ ์๋ต์ ์ค์ ํ ์ ์๋ค๋ ์ ์์ ์คํ ๊ฐ์ ์ญํ ์ ํ๋ค.
- ํ์ง๋ง ๋ชจ์ ๊ฐ์ฒด๋ ๋ชจ๋ ์ํธ์์ฉ์ ์ ์ฅํด์ ๋์ค์ ๋จ์ธ๋ฌธ์ ํ์ฉํ ์ ์๋๋ก ํด์ค๋ค.
- ๋ชจํน ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ‘๋ฉ์๋๋ ์ด๋ค ํน์ ๋งค๊ฐ๋ณ์๋ก ํธ์ถ๋์ง ์๋๋ค’ ๋๋ ๋ฉ์๋๋ ๋งค๊ฐ๋ณ์ A๋ก ๋ ๋ฒ ํธ์ถ๋๊ณ ๋งค๊ฐ๋ณ์ B๋ก ํ ๋ฒ ํธ์ถ๋๋ค์ ๊ฐ์ ๋ชจ๋ ์ข ๋ฅ์ ์ํธ์์ฉ์ ๋จ์ธํ ์ ์๋ค.
6.1.5 ์คํ์ด
- ์คํ์ด๋ ์์กด์ฑ์ ๊ฐ์ํ๋ค, ์ค์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ธ์ ๊ทธ ํ๋์ ๊ด์ฐฐํ๋ค.
- ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ์ค์ ๊ตฌํํ๋ ๊ฒ ํจ์ฌ ๋ ์ฝ๊ณ , ํ ์คํธ ๋์ ๋ฉ์๋๊ฐ ์์กด ๋์๊ณผ ์ด๋ป๊ฒ ์ํธ์์ฉํ๋์ง ๋จ์ธํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค.
6.2 ๋ชจ์ ๊ฐ์ฒด ํ๋ ์์ํฌ (๋ชจํคํ , Mockito)
- ๋ชจํคํ ๋ ๋งค์ฐ ๊ฐ๋จํ๊ธฐ ๋๋ฌธ์ ๋ค์ ์ธ ๊ฐ์ง ๋ฉ์๋๋ง ์์๋ ์ถฉ๋ถํ๋ค.
- mock(<class>): ์ฃผ์ด์ง ํด๋์ค๋ก ๋ชจ์ ๊ฐ์ฒด ๋๋ ์คํ ์์ฑ
- when(<mock>.<method>).thenReturn(<value>): ๋ฉ์๋์ ๋์์ ์ ์ํ๋ ์ฐ์๋ ๋ฉ์๋ ํธ์ถ
- verify(<mock>).<method>: ๋ชจ์ ๊ฐ์ฒด์์ ์ํธ์์ฉ์ด ์์๋ ๋ฐฉ์๋๋ก ์ผ์ด๋ฌ๋์ง ๊ฒ์ฆ
6.3 ํ์ ์์์ ๋ชจ์ ๊ฐ์ฒด
- ์ธ์ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ผ ํ๊ณ , ์ธ์ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋๊ฐ?
- ๋๊ตฐ๊ฐ๋ ์ฌ์ฉํด์ผ ํ๊ณ , ๋๊ตฐ๊ฐ๋ ๋ชจ์๋ฅผ ํ๋ฉด ์ ๋๋ค๊ณ ๋ฏฟ๋ ์ฌ๋๋ค๋ ์๋ค.
6.3.1 ๋ชจ์ ๊ฐ์ฒด์ ๋จ์
- ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ํ ์คํธ ์ค์ํธ๊ฐ ์ฝ๋๊ฐ ์๋ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ํ ์คํธํ๋๋ก ๋ง๋ ๋ค๊ณ ๋ฏฟ๋๋ค.
- ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฐ์ค๋ฝ๊ฒ ํ
์คํธ๋ฅผ ๋ ํ์ค์ ์ผ๋ก ๋ง๋ ๋ค.
- A → B ์์กด, B์ sum() ๋ฉ์๋๋ ํญ์ ์์ ์ซ์๋ฅผ ๋ฐํํ๊ณ , ์ด๋ฅผ ๋ชจ์ ๊ฐ์ฒด๋ก ์์ฑ ํ๊ณ ,
์ผ๋ง ํ B์ sum() ๋ฉ์๋๋ ์์ ์ซ์๋ฅผ ๋ฐํํ๋๋ก ๋น์ฆ๋์ค ๋ณ๊ฒฝ๋์๋ค.
B์ ๋จ์ ํ ์คํธ์ ๋ํด์๋ง ์์ ํ๊ณ , A๊ฐ ์ ๊ท ์ฌํ ์กฐ๊ฑด์ ์ ์ฒ๋ฆฌํ๋์ง ๊ฒ์ฌํ๋ ์ผ์ ๊น๋จน๊ธฐ ์ฌ์ด๋ฐ, ๋ ๋์ ์ ์ A์ ํ ์คํธ๋ ์ฌ์ ํ ํต๊ณผํ๋ค.. - ๋ชจ์ ๊ฐ์ฒด๊ฐ ํด๋์ค์ ์ค์ ๊ณ์ฝ์ ํํํ์ง ์์ ์ ์๋ค๋ ์ ์์ ๋ชจ์ ๊ฐ์ฒด์ ๋ํ ์ ์ด๊ถ์ ์๊ธฐ ์ฝ๋ค.
- ๋ฐ๋ผ์ ๋ชจ์ ๊ฐ์ฒด๊ฐ ๋๊ท๋ชจ๋ก ์ ๋์ํ๊ฒ ํ๋ ค๋ฉด ๊ณ์ฝ์ ์ ๊ฒฝ ์จ์ ์ค๊ณํด์ผ ํ๋ค.
- A → B ์์กด, B์ sum() ๋ฉ์๋๋ ํญ์ ์์ ์ซ์๋ฅผ ๋ฐํํ๊ณ , ์ด๋ฅผ ๋ชจ์ ๊ฐ์ฒด๋ก ์์ฑ ํ๊ณ ,
- ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ํ
์คํธ๋ ์์ฐ์ค๋ฝ๊ฒ ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ง ์๋ ํ
์คํธ ์ฝ๋์ ๊ฒฐํฉํ๊ฒ ๋๋ค.
- ํ ์คํธ ๋ฉ์๋๋ ์ ํ ์ฝ๋์ ๋ํด ๋๋ฌด ๋ง์ด ์๊ณ ์๋ค.
- ์ด๋, ํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ํ๋ค ์ ์๋๋ฐ ์ค์ ํด๋์ค์ ๋์์ ๋ณ๊ฒฝํ๋ฉด ํ ์คํธ ์ญ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ ์กด์ฌํจ
- ๋ฐ๋ผ์, ๋ชจ์ ๊ฐ์ฒด๋ ํ ์คํธ๋ฅผ ๋จ์ํ๊ฒ ํด์ฃผ์ง๋ง ํ ์คํธ์ ์ ํ ์ฝ๋์ ๊ฒฐํฉ๋๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
6.3.2 ๋ชจ์ํด์ผ ํ๋ ๋์๊ณผ ํ์ง ๋ง์์ผ ํ๋ ๋์
์ค์ฉ์ ์ผ๋ก ์์กด์ฑ์ด ๋ค์๊ณผ ๊ฐ์ ์ข ๋ฅ์ผ ๋ ๋ชจ์ ๊ฐ์ฒด๋ ์คํ ์ ์ฌ์ฉํ๋ค.
- ์์กด์ฑ์ด ๋๋ฌด ๋๋ฆฐ ๊ฒฝ์ฐ
- ์์กด์ฑ์ด ์ธ๋ถ ์ธํ๋ผ์ ํต์ ํ๋ ๊ฒฝ์ฐ
- ์์กด์ฑ์ ์๋ฎฌ๋ ์ด์ ํ๊ธฐ ํ๋ ๊ฒฝ์ฐ
๋ฐ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ชจ์ ๊ฐ์ฒด๋ ์คํ ์ ๊บผ๋ฆฌ๊ฒ ๋๋ค.
- ์ํฐํฐ(Entity)
- ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ ํธ๋ฆฌํฐ ๋ฉ์๋
- ์ถฉ๋ถํ ๋จ์ํ ์์กด์ฑ
6.3.5 ๋ชจ์์ ๊ดํ ์ธ๋ถ ์๊ฒฌ (๊ตฌ๊ธ ์์ง๋์ด๋ ์ด๋ ๊ฒ ์ผํ๋ค)
- ํ ์คํธ ๋๋ธ์ ์ฌ์ฉํ๋ ค๋ฉด ์์คํ ์ด ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ๊ฐ์ง๋๋ก ์ค๊ณํด์ผ ํ๋ค.
- ์ค์ ๊ตฌํ์ ์ถฉ์คํ๊ฒ ํ ์คํธ ๋๋ธ์ ๊ตฌ์ถํ๋ ์ผ์ ์ด๋ ค์ฐ๋ ๊ฐ๋ฅํ ํ ๊ทธ๋ ๊ฒ ํด์ผ ํ๋ค.
- ๊ณ ๋ฆฝ์ฑ๋ณด๋ค ํ์ค์ฑ์ด ๋ซ๋ค. (๊ฐ๋ฅํ๋ค๋ฉด) ํ์ดํฌ, ์คํ , ๋ชจ์ ๊ฐ์ฒด๋ณด๋ค ์ค์ ๊ตฌํ์ ์ ํํ์.
- ๋ชจ์๋ฅผ ๋๋ฌด ๋ง์ด ์ฌ์ฉํ๋ฉด ์ํํด์ง ์ ์๋ค.
- ํ ์คํธ ๋ถ๋ถ๋ช (์ดํดํ๊ธฐ ์ด๋ ค์), ๊นจ์ง๊ธฐ ์ฝ๊ณ , ๋ ํจ๊ณผ์ (๊ฒฐํจ ํ์ง ๋ฅ๋ ฅ์ด ๊ฐ์) ๋๋ฌธ
- ๋๋ฌด ๊ตฌ์ฒดํ๋ ์ํธ์์ฉ ํ ์คํธ๋ ํผํ์. ์ธ์ ๋ฐ ๊ธฐ๋ฅ ํ ์คํธ์ ์ด์ ์ ๋์
์์ฝ
- ํ ์คํธ ๋๋ธ์ ๋๋ฆฌ๊ฑฐ๋ ๋ณต์กํ๊ฑฐ๋ ์ธ๋ถ ๊ตฌ์ฑ์์์ ์์กดํ๊ณ ์์ด ์ ์ดํ๊ฑฐ๋ ๋์์ ๊ด์ฐฐํ๊ธฐ ํ๋ ํด๋์ค๋ฅผ ํ ์คํธํ๋ ๋ฐ ๋์์ด ๋๋ค.
- ๋ชจ์ ๊ฐ์ฒด๋ ํ ์คํธ์ ๋์์ด ๋๋ ๋จ์ ๋ ์๋ค. (์ค์ ๊ตฌํ๊ณผ ๋ค๋ฅผ ์ ์์) → ํ ์คํธ๋ ์ฑ๊ณต, ์์คํ ์ ์คํจ
- ๋ชจ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ํ ์คํธ๋ ๊ทธ๋ ์ง ์์ ํ ์คํธ์ ๋นํด ์ ํ ์ฝ๋์ ๋ ๋ง์ด ๊ฒฐํฉ๋๋ค.
7. ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ์ํ ์ค๊ณ
๐ก ํ์ต ๋ด์ฉ
- ์ํคํ ์ฒ, ์ค๊ณ, ๊ตฌํ ์์ค์์ ํ ์คํธํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์ค๊ณํ๋ ๋ฐฉ๋ฒ
- ์ก๊ฐํ ์ํคํ ์ฒ, ์์กด์ฑ ์ฃผ์ , ๊ด์ฐฐ ๊ฐ๋ฅ์ฑ ๋ฐ ์ ์ด ๊ฐ๋ฅ์ฑ์ ๋ํ ์ดํด
- ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ํจ์ ์ ํํผํ๋ ๋ฐฉ๋ฒ
- ํญ์ ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ์๊ฐํ๊ณ , ์ฒ์๋ถํฐ ์ค๊ณํด์ผ ํ๋ค.
- ํ ์คํธ ๊ฐ๋ฅ์ฑ์ ์ํ ์ค๊ณ๊ฐ ๋ ธ๋ ฅ์ ๋ค์ผ ๋งํ ๊ฐ์น๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์ค๋ํ๋ ๊ฒ์ด ์ด ์ฅ์ ๋ชฉํ
7.1 ๋๋ฉ์ธ ์ฝ๋์์ ์ธํ๋ผ ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๊ธฐ
- ์ก๊ฐํ ์ํคํ ์ฒ(ํฅ์ฌ๊ณ ๋ )์ ๊ธฐ๋ฐ์ผ๋ก ์ธํ๋ผ๋ฅผ ๋น์ฆ๋์ค ์ฝ๋๋ก๋ถํฐ ๋ถ๋ฆฌํ๋ ๊ฒ์ ์์๋ฅผ ์ค๋ช ํ๊ณ ์์
- ๋๋ฉ์ธ ํด๋์ค์์ ์ธํ๋ผ์ ๊ตฌํ์ฒด(์ด๋ํฐ)๋ฅผ ์จ๊ธฐ๊ณ , ์ถ์ํ(ํฌํธ)์ ์์กดํจ์ผ๋ก์จ ํฌํธ๋ฅผ ์คํ , ๋ชจ์ ๊ฐ์ฒด๋ก ๋ง๋ค์ด์ ๋๋ฉ์ธ ๋ก์ง์ ๋์์ ์ฝ๊ฒ ์ํํ ์ ์์
7.2 ์์กด์ฑ ์ฃผ์ ๊ณผ ์ ์ด ๊ฐ๋ฅ์ฑ
- ์ ํต์ ์ธ ๋ฐฉ์์ ์ฝ๋๋ ์์กด์ฑ์ ์ง์ ์์ฑํ๋๋ฐ, ์ด๋ ํด๋์ค ๋ด๋ถ๋ฅผ ์ ์ดํ์ง ๋ชปํ๋๋ก ํ๊ณ , ๋ชจ์ ๊ฐ์ฒด๋ก ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ์ง ๋ชปํ๋๋ก ๋ง๋ ๋ค.
- ์์กด์ฑ์ ์ฃผ์
ํ ์ ์๋๋ก ํ๋ฉด ์ฌ๋ฌ ๋ฉด์์ ์ฝ๋๋ฅผ ๊ฐ์ ํ ์ ์๋ค.
- ํ ์คํธ ๋์ค ์์กด์ฑ์ ๋ชจ์ ๊ฐ์ฒด, ์คํ ์ผ๋ก ์์ฑ์ด ๊ฐ๋ฅํ๊ณ ํ ์คํธ ๋จ๊ณ์์ ์์ฐ์ฑ์ ์ฆ๋ํ๋ค.
- ์์กด์ฑ์ ๋ ๋ช ํํ๊ฒ ํด์ค๋ค.
- ๊ด์ฌ์ฌ ๋ถ๋ฆฌ์ ์ข๋ค.
- ํด๋์ค๊ฐ ๋ ํ์ฅ์ฑ์ ๊ฐ์ง๊ฒ ๋๋ค. (๋คํ์ฑ ๋ฑ)
- ์์กด์ฑ ์ญ์ ์์น!!
- (๋น์ฆ๋์ค ํด๋์ค ๊ฐ์) ๊ณ ์์ค ๋ชจ๋์ ์ ์์ค ๋ชจ๋์ ์์กดํด์๋ ์ ๋๊ณ , ์ด ๋ ๋ชจ๋ (์ธํฐํ์ด์ค ๊ฐ์) ์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
- ์ถ์ํ๋ ์ธ๋ถ์ฌํญ์ ์์กดํ๋ฉด ์ ๋๋ค. ์ธ๋ถ์ฌํญ(๊ตฌํ์ฒด)์ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค.
- << ๋๋ฉ์ธ - ํฌํธ ← ์ด๋ํฐ >> ์๊ฐ
7.4 ์์กด์ฑ ์ ๋ฌ ๋ฐฉ๋ฒ: ํด๋์ค ์์ฑ์์ ๋ฉ์๋ ๋งค๊ฐ๋ณ์
// ์์ฑ์๋ฅผ ํตํด ์์กด์ฑ ์ ๋ฌ
public class ChristmasDiscount {
private final Clock clock;
public ChristmasDiscount(Clock clock) {
this.clock = clock;
}
public double applyDiscount(Double rawAmount) {
LocalDate today = clock.now();
...
}
}
// ๋งค๊ฐ๋ณ์์ ์์กด์ฑ ์ ๋ฌ
public class ChristmasDiscount {
public double applyDiscount(Double rawAmount, LocalDate today) {
...
}
}
- ์์กด์ฑ์ ์ฌ์ฉํ์ง ์๊ณ ๋ฉ์๋ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ง์ ์ํ๋ ๊ฐ์ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ์ ์ฅ๋จ์ ?
- (+) ๊ตฌํ๊ณผ ํ ์คํธ ์ธก๋ฉด์์ ๊ฐ์ฅ ๊ฐ๋จํ ํด๊ฒฐ์ฑ ์ผ ์ ์๋ค.
- (-) ์ด ํด๋์ค๋ฅผ ํธ์ถํ๋ ๋ชจ๋ ๊ณณ์์ ์ธ์๋ฅผ ์ ๊ณตํด์ผ ํ๋ค
- ํด๋์ค, ํ ์คํธ์ ๋ณต์ก๋ ์ฆ๊ฐ + ํด๋ผ์ด์ธํธ ๋จ์ ํธ์ถ
- ํด๋์ค, ํ ์คํธ์ ๋ณต์ก๋ ๊ฐ์ + ํด๋ผ์ด์ธํธ ๋ณต์ก๋ ์ฝ๊ฐ ์ฆ๊ฐ
7.5 ํ์ ์์์ ํ ์คํธ ๊ฐ๋ฅ์ฑ ์ค๊ณ
- private ๋ฉ์๋๋ ์ค๋ก์ง public ๋ฉ์๋๋ฅผ ํตํด์๋ง ํ ์คํธํด์ผ ํ๋ค.
- ์๊ฐ ์๋๋ผ๋ฉด private ๋ฉ์๋์ ์์ง๋๊ฐ ๋จ์ด์ง๊ณ ๋ณต์กํ๊ธฐ ๋๋ฌธ์ธ๋ฐ, ํ ์คํธ๊ฐ ์ฐ๋ฆฌ์๊ฒ ๋ฌด์ธ๊ฐ๋ฅผ ์๋ ค์ฃผ๋ ์ข์ ์์ (๋ฉ์๋ ๋ถ๋ฆฌ ๋ฑ)
์์ฝ
- ํ ์คํธ ๋ถ๊ฐ๋ฅํ ์ฝ๋๋ ์ฐ๋ฆฌ ์ถ์ ํ๋ค๊ฒ ํ๋ค. ํ ์คํธํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ํ์.
- ๋๋ฉ์ธ ์ฝ๋์์ ์ธํ๋ผ๋ฅผ ๋ถ๋ฆฌํ์.
- ์ ๋ขฐํ ์ ์๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์๋ ์ ๋์ง๋ง, ์ค์ฉ์ ์ผ๋ก๋ ํ ์คํธ์ ๋์์ด ๋๋๋ก ์ ํ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์ ์ ์ผ๋ก ์ฐฌ์ฑํ๋ค.
8. ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ (TDD)
๐ก ํ์ต ๋ด์ฉ
- ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ์ ๋ํ ์ดํด
- TDD๋ก ์์ฐ์ฑ์ ๋์ด๋ ๋ฐฉ๋ฒ
- TDD๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋๋ ๊ฒฝ์ฐ
8.3 ํ์ ์์์ TDD
- ํ์๋ TDD๊ฐ ์ฃผ๋ ๋ฆฌ๋ฌ์ ๊ฐ์ฌํ๋ค.
- ๋ค์์ผ๋ก ๊ฐ๋ฐํ ๊ฐ์ฅ ๊ฐ๋จํ ๊ธฐ๋ฅ์ ์ฐพ๊ณ , ํ ์คํธ๋ฅผ ์์ฑํ๊ณ , ํ์ํ ๋งํผ ๊ตฌํํ๋ฉฐ, ์์ ๋ด์ฉ์ ๊ณ ์ฐฐํ๋ ์ผ๋ก ์ธํด ๊ฐ๋ฐ ์๋์ ๋ฐ๋ผ ์กฐ์ ๊ฐ๋ฅ
8.3.2 ํญ์ TDD๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น? (X)
- ์ค๊ณ, ์ํคํ ์ฒ, ํน์ ์๊ตฌ์ฌํญ์ ๋ํ ๊ตฌํ ๋ฐฉ๋ฒ์ด ๋ช ํํ์ง ์์ ๋ TDD๋ฅผ ์ฌ์ฉ
- ๋ณต์กํ ๋ฌธ์ ๋ฅผ ๋ค๋ฃจ๊ฑฐ๋ ๊ทธ ๋ฌธ์ ์ ์ ๋ฌธ์ฑ์ด ๋ถ์กฑํ ๋ TDD๋ฅผ ์ฌ์ฉ
- ๊ฐ๋ฐ ๊ณผ์ ์์ ๋ฐฐ์ธ๋งํ ๊ฒ ์์ผ๋ฉด TDD๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค. (๋ฐ๋ก ์ฝ๋ฉ)
- TDD๋ ์ค๊ณ ๊ด์ ์์๋ฟ๋ง ์๋๋ผ ๊ตฌํ ๊ด์ ์์ ์์ฑ์ค์ธ ์ฝ๋๋ฅผ ๋ฐฐ์ธ ์ ์๋๋ก ํด์ค๋ค.
9. ๋๊ท๋ชจ ํ ์คํธ ์์ฑ
๐ก ํ์ต ๋ด์ฉ
- ๋๊ท๋ชจ ํ ์คํธ๋ฅผ ์ธ์ ์์ฑํด์ผ ํ๋์ง
- ์ ๋ขฐ์ฑ ์๋ ํตํฉ ํ ์คํธ์ ์์คํ ํ ์คํธ๋ฅผ ๊ณ ์ํ๋ ๋ฐฉ๋ฒ
9.1 ๋๊ท๋ชจ ํ ์คํธ ์ฌ์ฉ ์๊ธฐ
- ๊ฐ ๊ฐ๋ณ ํด๋์ค์ ๋ํ ํ ์คํธ๋ ์ํํ์ผ๋, ์ ์ฒด ๋์์ด ์ฌ๋ฌ ํด๋์ค๋ก ๊ตฌ์ฑ๋์ด ์์ด ํจ๊ป ๊ตฌ๋๋ ๋ ์ด๋ ํ ์ผ์ด ์ผ์ด๋๋์ง ํ์ธํ๊ณ ์ถ์ ๊ฒฝ์ฐ
- ํ ์คํธํ๋ ค๋ ํด๋์ค๊ฐ ๊ฑฐ๋ํ ํ๋ฌ๊ทธ ์ค ํ๋ ์ด ์ํคํ ์ฒ์ ๊ตฌ์ฑ์์์ผ ๋
9.2 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ SQL ํ ์คํธ
9.2.1 SQL ์ฟผ๋ฆฌ์์ ํ ์คํธํด์ผ ํ๋ ๊ฒ
- ์ฒซ ๋ฒ์งธ → ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ฏธ๋ฆฌ ์ค์ ํ ํ ํ
์คํธ (SELECT ํ
์คํธ)
- ํ ์คํธ๋ ์คํจํ ์ ์์
9.2.3 SQL ํ ์คํธ๋ฅผ ์ํ ์ธํ๋ผ ์ค์
- ํตํฉ ํ
์คํธ๋ฅผ ์ํ ๋ถ๋ชจ ํด๋์ค ์์ฑํ๊ธฐ (SQLIntegrationTestBase)
- ์ฐ๊ฒฐ ์์ฑ + ์ ๋ฆฌ + Close
- ์ด๋ฌํ ์ฅ์ ์, ์ถํ ๋ณํ๊ฐ ์ผ์ด๋ ๋ ๋ชจ๋ ํ๊ณณ์์ ์ผ์ด๋๊ฒ ๋๋ค๋ ๊ฒ
- ์ฌํ์ฉํ๋ ์ฝ๋
9.2.4 ๋ชจ๋ฒ ์ฌ๋ก
- ํ
์คํธ ๋ฐ์ดํฐ ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ์ (10์ฅ)
- ํ ์คํธ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ฃผ๋ ๋์ฐ๋ฏธ ํด๋์ค
- ๋จ์ธ API๋ฅผ ์ ๋ง๋ค์ด์ ์ฌํ์ฉํ์
- ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ต์ํํ์
- ์คํค๋ง์ ๋ณํ๋ฅผ ๊ณ ๋ คํ์
9.4 ๋๊ท๋ชจ ํ ์คํธ์ ๋ํ ๋ง์ง๋ง ๋ ผ์
9.4.1 ํ ์คํธ๋ฅผ ์ด๋ ์์ค์ผ๋ก ํด์ผ ํ ๊น?
- ๋ชจ๋ ๊ฒ์ ๋จ์ ์์ค์์ ์ํํ๊ณ , ๋๊ท๋ชจ ํ ์คํธ์์๋ ๊ฐ์ฅ ์ค์ํ ํ์๋ฅผ ์ํํ์.
9.4.2 ๋น์ฉ/์ด๋ ๋ถ์์ ์ํํ์
- ์ด ํ ์คํธ๋ฅผ ์์ฑํ๋ ๋ฐ ๋น์ฉ์ด ์ผ๋ง๋ ๋ค๊น?
- ์คํํ๋ ๋ฐ ๋๋ ๋น์ฉ์?
- ์ด ํ ์คํธ๋ก ์ป์ ์ ์๋ ์ด๋์ ๋ฌด์์ธ๊ฐ? ์ด๋ค ๋ฒ๊ทธ๋ฅผ ์ก์ ์ ์์๊น?
9.4.4 ์ ํฉํ ์ฝ๋ ์ธํ๋ผ๊ฐ ํต์ฌ์ด๋ค
- ํตํฉ ํ ์คํธ, ์์คํ ํ ์คํธ๋ ๋ ๋ค ๋ฐฐํ์ ์ ์ ํ ์ธํ๋ผ๊ฐ ํ์ํ๋ค.
- ํ ์คํธ ์ธํ๋ผ์ ํฌ์ํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค. (ํ๊ฒฝ ์ค์ , ์ด๊ธฐํ, ๊ฒ์, ๋จ์ธ ๋ฑ์ ์์ )
์์ฝ
- ํ ์คํธ ์์ฑ → ๋น์ฉ < ์ด๋
- ๋จ์ ํ ์คํธ๊ฐ ํญ์ ๋จ์ํ๊ณ , ๋น์ฉ์ด ์ ๋ ดํ๋ค - ๋จ์ ํ ์คํธ์ ๋ํ ํ์ → ์ ์ฒด ์์คํ ํ์
10. ํ ์คํธ ์ฝ๋ ํ์ง
๐ก ํ์ต ๋ด์ฉ
- ์ฐ์ํ๊ณ ์ ์ง ๋ณด์ํ๊ธฐ ์ฌ์ด ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ์์น๊ณผ ๋ชจ๋ฒ ์ฌ๋ก
- ํ ์คํธ ์ฝ๋์ ์ดํด์ ๋ฐ์ ์ ์ ํดํ๋ ํ ์คํธ ๋์๋ฅผ ์์ ๋ ๋ฐฉ๋ฒ
10.1 ํ ์คํธ ์ฝ๋์ ์ ์ง ๋ณด์์ฑ์ ์ํ ์์น
10.1.1 ํ ์คํธ๋ ๋นจ๋ผ์ผ ํ๋ค.
- ํ ์คํธ ์ฝ๋๋ฅผ ํตํด ์ป๋ ํผ๋๋ฐฑ์ ๋น ๋ฅผ์๋ก ์ข๋ค.
- ํ
์คํธ๊ฐ ๋๋ฆฌ๋ค๋ฉด ๋ค์ ์ํฉ์ ๊ณ ๋ คํด ๋ณด์.
- ๋ชจ์ ๊ฐ์ฒด๋ ์คํ ์ ์ด์ฉํด์ ํ ์คํธ์ ์ผ๋ถ ๋๋ฆฐ ๊ตฌ์ฑ์์๋ฅผ ๋์ฒดํ๋ค.
- ์ ํ ์ฝ๋๋ฅผ ์ฌ์ค๊ณํด์ ๋๋ฆฐ ์ฝ๋๋ฅผ ๋น ๋ฅธ ์ฝ๋์ ๋ถ๋ฆฌํ์ฌ ํ ์คํธํ ์ ์๋๋ก ํ๋ค.
- ๋๋ฆฐ ํ ์คํธ๋ฅผ ์์ฃผ ์คํํ์ง ์๋ ๋ค๋ฅธ ํ ์คํธ ์ค์ํธ๋ก ์ฎ๊ธด๋ค. → ๋๋ฆฐ ํ ์คํธ๋ ๋ฐ๋ก ์คํ
10.1.2 ํ ์คํธ๋ ์์ง๋ ฅ ์๊ณ ๋ ๋ฆฝ์ ์ด๋ฉฐ ๊ฒฉ๋ฆฌ๋์ด์ผ ํ๋ค
- ํ๋์ ํ ์คํธ ๋ฉ์๋๊ฐ ํ๋์ ๊ธฐ๋ฅ์ด๋ ์์คํ ์ ํ์๋ฅผ ํ ์คํธํ๋ ๊ฒ์ด ์ด์์ ์ด๋ค.
- ํ
์คํธ๊ฐ ์์ ์ด ๋ง๋ ์ง์ ๋ถํ ์ฌํญ์ ์ ๋ฆฌํ๋๋ก ํ์.
- ๋์คํฌ์ ์์ฑ๋ ํ์ผ ์ญ์ ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๋ ฅํ ๊ฐ ์ญ์ ๋ฑ ์ด๊ธฐํ ์ํ
10.1.4 ํ ์คํธ๋ ๋ฐ๋ณต ๊ฐ๋ฅํด์ผ ํ๋ฉฐ ๋ถ์์ ํ์ง ์์์ผ ํ๋ค
- ๋ฐ๋ณต ๊ฐ๋ฅํ ํ ์คํธ๋ ์คํ ํ์์ ์๊ด์์ด ๊ฒฐ๊ณผ๊ฐ ๋์ผํ๋ค.
- ํ
์คํธ๋ ์ฌ๋ฌ ์ด์ ๋ก ๋ถ์์ ํด์ง๋ค.
- ์ธ๋ถ ์์์ด๋ ๊ณต์ ์์์ ์์กดํ๋ ๊ฒฝ์ฐ (ex. ํ์ผ ๊ฒฝ๋ก, ๋ฐ์ดํฐ๋ฒ ์ด์ค)
- ๋ถ์ ํํ ํ์์์
- ๋ค๋ฅธ ํ ์คํธ ๋ฉ์๋์ ์์์น ๋ชปํ ์ํธ์์ฉ์ด ์ผ์ด๋ ๊ฒฝ์ฐ
- Luo ์ธ ์ฐ๊ตฌ์ง(2014)์ด ๋ฐํ๋ธ ๋ถ์์ ํ ํ
์คํธ์ ์์ธ
- ๋น๋๊ธฐ์ ๋๊ธฐ, ๋์์ฑ, ํ ์คํธ ์์ ์์กด์ฑ
- ๋๋ถ๋ถ์ ๋ถ์์ ํ ํ ์คํธ๋ ์์ฑํ ๋๋ถํฐ ๋ถ์์ ํ๋ค.
- ๋ถ์์ ํ ํ ์คํธ๊ฐ ํ๋ซํผ ํน์ฑ์ผ๋ก ์ธํด ๋ฐ์ํ๋ ์ผ์ ๋๋ฌผ๋ค (๋ค๋ฅธ ์ด์์ฒด์ ๋ฑ)
- ๋ถ์์ ์ฑ์ ์ข ์ข ์ธ๋ถ ์์์ ๋ํ ์์กด์ฑ์ผ๋ก ์ธํด ๋ฐ์ํ๋ฉฐ, ๊ฐ ํ ์คํธ๊ฐ ๋๋๊ณ ์คํ๋๋ ์ฌ์ด์ ๊ณต์ ๋๋ ์ํ๋ฅผ ์ ๋ฆฌํ์ฌ ํด๊ฒฐํ ์ ์๋ค.
10.1.6 ํ ์คํธ๋ ํ์๊ฐ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ ๊นจ์ ธ์ผ ํ๋ค
- ํ ์คํธ๋ฅผ ํตํด ์์๋ ํ์๊ฐ ๊นจ์ก์์ ์ ์ ์๋ค.
10.1.8 ํ ์คํธ๋ ์์ฑํ๊ธฐ ์ฌ์์ผ ํ๋ค
- ํตํฉ ๋ฐ ์์คํ ํ ์คํธ์์๋ ์ธ๋ถ ์ธํ๋ผ๋ฅผ ์ค์ ํ๊ณ ์ ๋ฆฌํ๋ ํ ์คํธ๋ ํ์ํ๋ค.
- ํญ์ ํ ์คํธ๋ฅผ ์์ฑํ๊ธฐ ์ฝ๊ฒ ํ๊ณ , ๊ฐ๋ฐ์์๊ฒ ๊ทธ๋ ๊ฒ ํ ์ ์๋ ๋ชจ๋ ๋๊ตฌ๋ฅผ ์ ๊ณตํ์.
- ์ฐ์ํ ํ ์คํธ ์ธํ๋ผ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ์๊ฐ์ ํฌ์ํ๋ ๊ฒ์ ํ์์ด๋ฉฐ ์ฅ๊ธฐ์ ์ผ๋ก ์ฑ๊ณผ๋ฅผ ๋ณด๊ฒ ๋๋ค.
10.1.9 ํ ์คํธ๋ ์ฝ๊ธฐ ์ฌ์์ผ ํ๋ค
- ์ฝ๋ ๊ฐ๋ ์ฑ, ์ ํ ์ฝ๋์ ์ฌ์ฉํ๋ ๋ฐฉ์ ๊ด๋ จํด์๋ ํ ์คํธ ์ฝ๋์๋ ์ ์ฉ๋๋ค.
- ํ
์คํธ๋ฅผ ์ฝ๊ธฐ ์ฝ๊ฒ ํ๊ธฐ ์ํ ๋ ๊ฐ์ง ์์น
- ๋ชจ๋ ์ ๋ณด(์ ๋ ฅ, ๋จ์ธ๋ฌธ)๊ฐ ์ถฉ๋ถํ ๋ช ํํ์ง ํ์ธํ๊ณ ,
- ๋ณต์กํ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์์ฑํ ๋๋ง๋ค ํ ์คํธ ๋ฐ์ดํฐ ์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ค.
10.2 ํ ์คํธ ๋์
10.2.4 ๋๋ฌด ๋ฒ์ฉ์ ์ธ ํฝ์ค์ฒ
- ํ ์คํธ์ ํฝ์ค์ฒ๊ฐ ๊ฐ๋ฅํ ํ ๊ตฌ์ฒด์ ์ด๊ณ ์์ง๋์ด ์๋์ง ํ์ธํ๋ ์ผ์ ํ ์คํธ์ ๋ณธ์ง์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋๋ค. (ํ ์คํธ๊ฐ ์คํจํ ๋ ๊ด๋ จ์ฑ์ด ์ปค์ผ ํ๋ค.)
- (ํ ์คํธ ๋ฐ์ดํฐ์ ๊ตฌ์ฑ์ ์ค์ฌ์ ๋) ๋น๋ ํจํด์ ์ฌ์ฉํ๋ฉด ๋ฒ์ฉ ํฝ์ค์ฒ ์์ฑ์ ํผํ ์ ์๋ค.
11. ๋ง๋ฌด๋ฆฌ
- ์๋ก์ด ์ฝ๋๋ฅผ ์์ฑํ ๊ถํ์ด ์๋ค๋ฉด ๋จ์ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋๋ก ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ๋ค.
- ๋ ๊ฑฐ์ ํด๋์ค์ ์๋ก์ด ๋์์ ์ถ๊ฐํด์ผ ํ๋ค๋ฉด?
- ์๋ก์ด ํด๋์ค๋ฅผ ๋ง๋ค๊ณ , ์๋ก์ด ๋์์ ์ถ๊ฐํ ํ ๋จ์ ํ ์คํธ ์์ฑ
- ๋ ๊ฑฐ์ ํด๋์ค์์ ์ ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํด์ ๋ฉ์๋ ํธ์ถ
- ๊ฒฐ๊ณผ์ ์ผ๋ก ํ ์คํธ๊ฐ ๋ถ๊ฐ๋ฅํ ํด๋์ค์ ํ ์คํธ๋ฅผ ์์ฑํ์ง ์์๋ ๋๋ค.
- ์ํํธ์จ์ด ๋ชจ๋ํฐ๋ง์ ์ถฉ๋ถํ ํฌ์ํ์. (๋ฌด์์ ๋ก๊ทธ๋ก ๋จ๊ฒจ์ผ ํ ์ง, ํ์ ๊ทธ๋ผ์ด๋ ๋ฃฐ์ ์ ๋ฆฝํ์.)
'๋์ ๋ฆฌ๋ทฐ > IT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
"์ค๋ฌด๋ก ํตํ๋ ํด๋ฆฐ ์ฝ๋" ๋์ ๋ฆฌ๋ทฐ (1) | 2024.08.26 |
---|---|
์ผํธ ๋ฐฑ์ Tidy First? ๋์ ๋ฆฌ๋ทฐ (2) | 2024.05.25 |
์๋ฐ์ JUnit์ ํ์ฉํ ์ค์ฉ์ฃผ์ ๋จ์ ํ ์คํธ ๋ฆฌ๋ทฐ (0) | 2022.04.16 |
[IT] ๊ฐ์ฒด์งํฅ์ ์ฌ์ค๊ณผ ์คํด (0) | 2021.01.31 |
๋๊ธ