๋ฐ์ํ
๐ ์ค๋ TIL 3์ค ์์ฝ
- ํ ์คํธ ์ฝ๋๊ฐ ์ง์ ๋ถํ๋ฉด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฅ๋ ฅ์ด ๋จ์ด์ง๋ฉฐ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๋ ๋ฅ๋ ฅ๋ ๋จ์ด์ง๋ค.
- ํ ์คํธ ์ฝ๋๋ ์ต์์ ํํ์ผ๋ก ๋ง์ ๊ฒ์ ๋ํ๋ด์ผ ํ๋ค.
- ํ ์คํธ ํจ์ ํ๋๋ ๊ฐ๋ ํ๋๋ง ํ ์คํธํ๋ผ.
๐ TIL (Today I Learned) ๋ ์ง
2022.03.05
๐ ์ค๋ ์ฝ์ ๋ฒ์
9์ฅ. ๋จ์ ํ ์คํธ
๐ ์ฑ ์์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ
- TDD ๋ฒ์น ์ธ ๊ฐ์ง
- ์คํจํ๋ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ ๋๊น์ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๋๋ค.
- ์ปดํ์ผ์ ์คํจํ์ง ์์ผ๋ฉด์ ์คํ์ด ์คํจํ๋ ์ ๋๋ก๋ง ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ค.
- ํ์ฌ ์คํจํ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ ์ ๋๋ก๋ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
- ํ ์คํธ ์ฝ๋๊ฐ ์ง์ ๋ถํ ์๋ก ๋ณ๊ฒฝํ๊ธฐ ์ด๋ ค์์ง๋ค. ํ ์คํธ ์ฝ๋๊ฐ ๋ณต์กํ ์๋ก ์ค์ ์ฝ๋๋ฅผ ์ง๋ ์๊ฐ๋ณด๋ค ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ถ๊ฐํ๋ ์๊ฐ์ด ๋ ๊ฑธ๋ฆฌ๊ธฐ ์ญ์์ด๋ค. ์ค์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด ๊ธฐ์กด ํ ์คํธ ์ผ์ด์ค๊ฐ ์คํจํ๊ธฐ ์์ํ๋ฉด, ์ง์ ๋ถํ ์ฝ๋๋ก ์ธํด, ์คํจํ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ ์ ๋ ํต๊ณผ์ํค๊ธฐ ์ด๋ ค์์ง๋ค. ๊ทธ๋์ ํ ์คํธ ์ฝ๋๋ ๊ณ์ํด์ ๋์ด๋๋ ๋ถ๋ด์ด ๋ผ๋ฒ๋ฆฐ๋ค.
- ํ ์คํธ ์ฝ๋๋ ์ค์ ์ฝ๋ ๋ชป์ง ์๊ฒ ์ค์ํ๋ค. ํ ์คํธ ์ฝ๋๋ ์ด๋ฅ ์๋ฏผ์ด ์๋๋ค. ํ ์คํธ ์ฝ๋๋ ์ฌ๊ณ ์ ์ค๊ณ์ ์ฃผ์๊ฐ ํ์ํ๋ค. ์ค์ ์ฝ๋ ๋ชป์ง ์๊ฒ ๊นจ๋ํ๊ฒ ์ง์ผ ํ๋ค.
- ์ฝ๋์ ์ ์ฐ์ฑ, ์ ์ง๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ์ ์ ๊ณตํ๋ ๋ฒํ๋ชฉ์ด ๋ฐ๋ก ๋จ์ ํ ์คํธ๋ค. ์ด์ ๋ ๋จ์ํ๋ค. ํ ์คํธ ์ผ์ด์ค๊ฐ ์์ผ๋ฉด ๋ณ๊ฒฝ์ด ๋๋ ต์ง ์์ผ๋๊น! ํ ์คํธ ์ผ์ด์ค๊ฐ ์๋ค๋ฉด ๋ชจ๋ ๋ณ๊ฒฝ์ด ์ ์ ์ ์ธ ๋ฒ๊ทธ๋ค. ์ํคํ ์ฒ๊ฐ ์๋ฌด๋ฆฌ ์ ์ฐํ๋๋ผ๋, ์ค๊ณ๋ฅผ ์๋ฌด๋ฆฌ ์ ๋๋ด๋๋ผ๋, ํ ์คํธ ์ผ์ด์ค๊ฐ ์์ผ๋ฉด ๊ฐ๋ฐ์๋ ๋ณ๊ฒฝ์ ์ฃผ์ ํ๋ค. ๋ฒ๊ทธ๊ฐ ์จ์ด๋ค๊น ๋๋ ต๊ธฐ ๋๋ฌธ์ด๋ค.
- ํ ์คํธ ์ฝ๋๊ฐ ์ง์ ๋ถํ๋ฉด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฅ๋ ฅ์ด ๋จ์ด์ง๋ฉฐ ์ฝ๋ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๋ ๋ฅ๋ ฅ๋ ๋จ์ด์ง๋ค. ํ ์คํธ ์ฝ๋๊ฐ ์ง์ ๋ถํ ์๋ก ์ค์ ์ฝ๋๋ ์ง์ ๋ถํด์ง๋ค. ๊ฒฐ๊ตญ ํ ์คํธ ์ฝ๋๋ฅผ ์์ด๋ฒ๋ฆฌ๊ณ ์ค์ ์ฝ๋๋ ๋ง๊ฐ์ง๋ค.
- ํ ์คํธ ์ฝ๋์์ ๊ฐ๋ ์ฑ์ ๋์ด๋ ค๋ฉด ์ฌ๋ ์ฝ๋์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ช ๋ฃ์ฑ, ๋จ์์ฑ, ํ๋ถํ ํํ๋ ฅ์ด ํ์ํ๋ค. ํ ์คํธ ์ฝ๋๋ ์ต์์ ํํ์ผ๋ก ๋ง์ ๊ฒ์ ๋ํ๋ด์ผ ํ๋ค.
- BUILD - OPERATE - CHECK ํจํด
- BUILD : ํ ์คํธ ์๋ฃ๋ฅผ ๋ง๋ ๋ค.
- OPERATE : ํ ์คํธ ์๋ฃ๋ฅผ ์กฐ์ํ๋ค.
- CHECK : ์กฐ์ํ ๊ฒฐ๊ณผ๊ฐ ์ฌ๋ฐ๋ฅธ์ง ํ์ธํ๋ค.
- ๋๋ฉ์ธ์ ํนํ๋ ์ธ์ด(DSL)๋ก ํ ์คํธ ์ฝ๋๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํํ ์ฐ๋ ์์คํ ์กฐ์ API๋ฅผ ์ฌ์ฉํ๋ ๋์ API ์์๋ค ํจ์์ ์ ํธ๋ฆฌํฐ๋ฅผ ๊ตฌํํ ํ ๊ทธ ํจ์์ ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์ง๊ธฐ๋ ์ฝ๊ธฐ๋ ์ฌ์์ง๋ค. ์ด๋ ๊ฒ ๊ตฌํํ ํจ์์ ์ ํธ๋ฆฌํฐ๋ ํ ์คํธ ์ฝ๋์์ ์ฌ์ฉํ๋ ํน์ API๊ฐ ๋๋ค. ์ฆ, ํ ์คํธ๋ฅผ ๊ตฌํํ๋ ๋น์ฌ์์ ๋์ค์ ํ ์คํธ๋ฅผ ์ฝ์ด๋ณผ ๋ ์๋ฅผ ๋์์ฃผ๋ ํ ์คํธ ์ธ์ด๋ค.
- ์ด์ค ํ์ค : ์ค์ ํ๊ฒฝ์์๋ ์ ๋๋ก ์ ๋์ง๋ง ํ ์คํธ ํ๊ฒฝ์์๋ ์ ํ ๋ฌธ์ ์๋ ๋ฐฉ์์ด ์๋ค. ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ CPU ํจ์จ๊ณผ ๊ด๋ จ ์๋ ๊ฒฝ์ฐ๋ค. ์ฝ๋์ ๊นจ๋ํจ๊ณผ๋ ์ฒ ์ ํ ๋ฌด๊ดํ๋ค.
- ํ ์คํธ๋น assert ํ๋ : ์ด๊ฒ์ ๊ฒ ์ก๋คํ ๊ฐ๋ ์ ์ฐ์์ผ๋ก ํ ์คํธํ๋ ๊ธด ํจ์๋ ํผํ๋ค. ์ฌ๋ฌ ๊ฐ๋ ์ ํ ํจ์๋ก ๋ชฐ์๋ฃ์ผ๋ฉด ๋ ์๊ฐ ๊ฐ ์ ์ด ๊ฑฐ๊ธฐ์ ์กด์ฌํ๋ ์ด์ ์ ๊ฐ ์ ์ด ํ ์คํธํ๋ ๊ฐ๋ ์ ๋ชจ๋ ์ดํดํด์ผ ํ๋ค. ๊ฐ์ฅ ์ข์ ๊ท์น์ "๊ฐ๋ ๋น assert ๋ฌธ ์๋ฅผ ์ต์๋ก ์ค์ฌ๋ผ"์ "ํ ์คํธ ํจ์ ํ๋๋ ๊ฐ๋ ํ๋๋ง ํ ์คํธํ๋ผ"๋ผ ํ๊ฒ ๋ค.
- ๊นจ๋ํ ํ
์คํธ์ ๋ค์ฏ ์๊ธฐ ๊ท์น F.I.R.S.T
- FAST(๋น ๋ฅด๊ฒ) : ํ ์คํธ๋ ๋นจ๋ฆฌ ๋์์ผ ํ๋ค.
- Independent(๋ ๋ฆฝ์ ์ผ๋ก) : ๊ฐ ํ ์คํธ๋ ์๋ก ์์กดํ๋ฉด ์ ๋๋ค. ํ ํ ์คํธ๊ฐ ๋ค์ ํ ์คํธ๊ฐ ์คํ๋ ํ๊ฒฝ์ ์ค๋นํด์๋ ์๋๋ค.
- Repeatable(๋ฐ๋ณต๊ฐ๋ฅํ๊ฒ) : ํ ์คํธ๋ ์ด๋ค ํ๊ฒฝ์์๋ ๋ฐ๋ณต ๊ฐ๋ฅํด์ผ ํ๋ค. ํ ์คํธ๊ฐ ๋์๊ฐ์ง ์๋ ํ๊ฒฝ์ด ํ๋๋ผ๋ ์๋ค๋ฉด ํ ์คํธ๊ฐ ์คํจํ ์ด์ ๋ฅผ ๋๋ฌ๋ ๋ณ๋ช ์ด ์๊ธด๋ค.
- Self-Validating(์๊ฐ๊ฒ์ฆํ๋) : ํ ์คํธ๋ ๋ถ์ธ(bool) ๊ฐ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ด์ผ ํ๋ค. ์ฑ๊ณต ์๋๋ฉด ์คํจ๋ค. ํ ์คํธ๊ฐ ์ค์ค๋ก ์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ๊ฐ๋ ํ์ง ์๋ ๋ค๋ฉด ํ๋จ์ ์ฃผ๊ด์ ์ด ๋๋ฉฐ ์ง๋ฃจํ ์์์ ํ๊ฐ๊ฐ ํ์ํ๊ฒ ๋๋ค.
- Timely(์ ์์) : ํ ์คํธ๋ ์ ์์ ์์ฑํด์ผ ํ๋ค. ๋จ์ ํ ์คํธ๋ ํ ์คํธํ๋ ค๋ ์ค์ ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ง์ ์ ๊ตฌํํ๋ค.
- ํ ์คํธ API๋ฅผ ๊ตฌํํด ๋๋ฉ์ธ ํนํ ์ธ์ด(Domain Specific Language, DSL)๋ฅผ ๋ง๋ค์. ๊ทธ๋ฌ๋ฉด ๊ทธ๋งํผ ํ ์คํธ ์ฝ๋๋ฅผ ์ง๊ธฐ๊ฐ ์ฌ์์ง๋ค.
- ํ ์คํธ ์ฝ๋๊ฐ ๋ฐฉ์น๋์ด ๋ง๊ฐ์ง๋ฉด ์ค์ ์ฝ๋๋ ๋ง๊ฐ์ง๋ค. ํ ์คํธ ์ฝ๋๋ฅผ ๊นจ๋ํ๊ฒ ์ ์งํ์.
๐ ์ค๋ ์ฝ์ ์๊ฐ ๋ฐ ๋ ์ค๋ฅด๋ ์๊ฐ
- ๋จ์ ํ ์คํธ ์ฝ๋๋ฅผ ์ ๋๋ก ์์ฑํด์ ํ ์คํธ๋ฅผ ํด๋ณธ์ ์ด ์๋ค. ๊ทธ์ ์ฐ์ถ๋ฌผ๋ก ์์ฑํด๋ ๋จ์ ํ ์คํธ ์ผ์ด์ค ๋ฌธ์๋ง ๋ณด๊ณ ํ๋ฉด์์ ๋๋ฌ๋ณธ ํ ์คํธ๊ฐ ์ ๋ถ๋ค.
- ๋จ์ ํ ์คํธ๋ ์ค์ ์ฝ๋๋ฅผ ๊ตฌํํ๊ธฐ ์ง์ ์ ๊ตฌํํด์ผ ํ๋ค๋ ๊ฒ์ ์์๋ค. ๋ชฐ๋๋ค๋ฉด ์ค์ ์ฝ๋๋ฅผ ์ ๋ถ ์์ฑํ๊ณ ๋จ์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ์ ๊ฒ์ด๋ค.
- TDD(ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ) ๋ง๋ง ๋ง์ด ๋ค์ด๋ดค์ง ์ค์ ๋ก ํด๋ณธ์ ์ด ์๋ค. ํ์ฌ ์์๋๊ณ ์๋ ํ๋ก์ ํธ์์๋ ๊ผญ TDD๋ฅผ ์ ์ฉ์์ผ๋ด์ผ๊ฒ ๋ค.
๐ค ๊ถ๊ธํ ๋ด์ฉ ๋ฐ ์ ์ดํด๋์ง ์๋ ๋ด์ฉ
- TDD๋ฅผ ํด๋ณด์ง ์์์ TDD๋ฅผ ํ๊ฒ ๋๋ฉด ์ด๋ค ํจ๊ณผ๊ฐ ์์์ง๊ฐ ๊ฐ์ฅ ๊ถ๊ธํ๋ค. ๊ผญ ์คํ์ ์ฎ๊ฒจ๋ด์ผ์ง!
๐ ์ค๋ ์ฝ์ ๋ค๋ฅธ ์ฌ๋์ TIL
- devilzcough๋์ TIL (https://nomadcoders.co/community/thread/3326)
- roghado๋์ TIL (https://nomadcoders.co/community/thread/3325)
๋ฐ์ํ
'ํ๋ก๊ทธ๋๋ฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] OpenJDK 11 ์ค์นํ๊ธฐ(JDK Builds from Oracle) (0) | 2022.03.14 |
---|---|
[TIL] ํด๋ฆฐ์ฝ๋(Clean Code) - 10์ฅ. ํด๋์ค (0) | 2022.03.09 |
[TIL] ํด๋ฆฐ์ฝ๋(Clean Code) - 7์ฅ. ์ค๋ฅ ์ฒ๋ฆฌ (0) | 2022.03.05 |
[TIL] ํด๋ฆฐ์ฝ๋(Clean Code) - 6์ฅ. ๊ฐ์ฒด์ ์๋ฃ ๊ตฌ์กฐ (0) | 2022.03.01 |
[TIL] ํด๋ฆฐ์ฝ๋(Clean Code) - 5์ฅ. ํ์ ๋ง์ถ๊ธฐ (0) | 2022.02.28 |