-
Notifications
You must be signed in to change notification settings - Fork 1
๐ [1๋ถ ๋ฆฌ๋ทฐ] TestโDriven Development : By Example
Choi Da-in edited this page Apr 23, 2024
·
2 revisions
- ์ด์ธ๋ช
- ๋นจ๊ฐ, ์ด๋ก, ๊ทธ๋ฆฌ๊ณ ๋ฆฌํฉํ ๋ง. ๋ฌด์์ด๋ ๋จผ์ ์์ํ๊ณ , ์ํ์ฐฉ์ค๋ฅผ ๊ฑฐ์น๋ฉฐ ๊ฐ์ ํด๋๊ฐ๋ ๊ณผ์ ์ด ์ด๋ฉด์ ๋ง์ฃผ์น ์ ์๋ ๋ง์ ๋ฌธ์ ์ ํด๊ฒฐ๊ณผ์ ๊ณผ ๋น์ทํ์ง ์์๊น ํ๋ ์๊ฐ์ด ๋ ๋ค.
- ์ ๋คํ
- TDD๋ฅผ ๋ด๊ฐ ์ตํ๋๊ฐ? ๋ผ๊ณ ํ๋ฉด ์๋ ๊ฒ ๊ฐ์๋๋ฐ, ์ฑ ์์ TDD ์๋ จ๋ฒ์ ์๊ฐํด์ค์ ๋ฐ๋ผํด๋ณด๊ณ ์ถ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ์ด์ ๊น์ง 1) ๊ฐ๋จํ๊ณ ์ฌ์ด ๋ฌธ์ ๋ก ์๋ ํ๋ ์ฐ์ต์ ํ๋ค๋ฉด 2) ์์ ์ดํ๋ฆฌ์ผ์ด์ ํ๋๋ฅผ TDD๋ก ์์ฑํด๋ณด๋ ๊ฒ ๋ ์ฌ๋ฐ์ ๊ฒ ๊ฐ์์! 2) ๊ณผ์ ์ ๊ฑฐ์ณ์ผ TDD๊ฐ ์ ์ข์ ์ง ์๋ฟ์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค.
- ์ต๋ค์ธ
- ํ๊ตญ์ดํ ์ธํฐ๋ทฐ์์ ์๋์ ๊ฐ์ ๋ง์ด ๋์๋๋ฐ ์ถฉ๊ฒฉ์ด์๋ค.
๋ด๊ฐ ์์ง ๊ธฐ์ ์ด ๋ถ์กฑํด์ ํ ์คํธ๋ฅผ ์์ฑํ์ง ๋ชปํ๋ ๊ฒ์ผ ๋ฟ ๋ชจ๋ ๊ฒ์ ํ ์คํธํ ์ ์๋ค๋ ๊ฒ์ ๊ณต๋ถํ ๊ฒ์ด ๋ง์์ ๋๊ผ๋ค.
์ต๊ทผ์ ๋ง๋ธ๋ธ๋กํธ(Mandelbrot) ๋ธ๋ผ์ฐ์ ๋ฅผ ํ๋ก๊ทธ๋๋ฐํ๋๋ฐ, ํฝ์ ํ๋์ ๋ํด์๋ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์๋ค๊ณ ์๊ฐํ์ต๋๋ค. ์ด์ ๋ ๊ทธ๋ฐ ํ ์คํธ๋ฅผ ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ผ๋ฉฐ (์๋ต)
- ํ๊ตญ์ดํ ์ธํฐ๋ทฐ์์ ์๋์ ๊ฐ์ ๋ง์ด ๋์๋๋ฐ ์ถฉ๊ฒฉ์ด์๋ค.
- ํ์ง์
- ํ ์คํธ์ฝ๋ ์์ด ๊ฐ๋ฐ์ ํ๋ฉฐ ๋๊ผ๋ ๋ฌธ์ ๋ค์ด TDD๋ฅผ ํตํด ์ด๋์ ๋ ํด๊ฒฐ ๋ ์ ์์ ๊ฒ ๊ฐ๋ค๋ ํ์ ์ ์ฌ์ด์ฃผ๋ ๋๋ ํํธ์์ต๋๋ค. ์ฒ์ ์ฑ๋ฆฐ์ง๋ฅผ ํ ๋ ํ ์คํธ์ฝ๋์ ์นํด์ง๊ธฐ ์ํด ํ๋ ๊ณผ์ ๋ค์ด ์ด ์ฑ ์ ๊ณผ์ ์ ๋ ๋ชฐ์ ํ๊ฒ ๋ง๋ค์ด ์ฃผ๊ณ ์๋ค๋ ์๊ฐ๋ ๋ค์์ต๋๋ค.
- ์ด์ธ๋ช
- TDD๋ ์กฐ์ข ํด๋๊ฐ๋ ๊ณผ์ ์ด๋ค!
- ์ ๋คํ
- OOP๋ฅผ ๊ณต๋ถํ๋ ๋๋์ด์๋ค์.. ๋ฆฌํฉํ ๋ง ๊ณผ์ ์์ ๋ฌ๋ผ์ง ์ธํฐํ์ด์ค๋ฅผ ๋ฐ์ํด์ ์ด๋ป๊ฒ ํ ์คํธ ์ฝ๋๋ฅผ ์์ ํด๋๊ฐ๋์ง ์์๋ณผ ์ ์์์ต๋๋ค!
- ์์ ์ฝ๋๊ฐ ์๋ฐ๋ผ์ ์ดํด๊ฐ ์ด๋ ต๋ค์ ใ ใ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ ์ฝ๋๋ฅผ ๊ฐ์ด ๊ตฌํํด๋ณด๋ฉด์ ๊ณต๋ถํด๋ณด๋ ๊ฑด ์ด๋จ๊น์!
- ์ต๋ค์ธ
- 61p ์ผ๊ฐ์ธก๋ ์ ๋ต์ด๋ผ๋ ์ต์ํ์ง๋ง ์ถ์์ ์ด์๋ ๋ฐฉ์์ ๋ช ์ํด์ฃผ์ด์, ์์ผ๋ก ์์์ ์ผ๋ก ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ๋ค.
- 11์ฅ ๊น์ง์ ์์ ์์ ์์ ๊ด๊ณ์ ํด๋์ค๋ฅผ ๋ง๋ค์๋ค๊ฐ ์ ๊ฑฐ๋๋ ๊ณผ์ ์์, ์ํคํ ์ฒ ์ฃผ๋ ๊ฐ๋ฐ(architecture-driven develop)๊ณผ ์ ๋ฐ๋๋ผ๋ ๋ง์ ์ค๊ฐํ๋ค. ํ ์คํธ๋ฅผ ์์ฑํ๊ณ ํต๊ณผ์ํค๋ ๊ณผ์ ์์ ์ํคํ ์ฒ๋ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ๋ผ์ค๋ ๊ฒ์ด ์ธ์์ ์ด๋ค.
- ์ผํธ ๋ฐฑ์ ๊ธ๋ฐ์ง ํฌ์ธํธ๋ค์ด ๋๋ฌด ์ฌ๋ฏธ์๋ค.๐คฃ
ํ์ผ๋ก ๋์๊ฐ์, "์ผํธ๊ฐ ์ค๊ณ ์ด์ฉ๊ตฌ ํ๋ ๊ฒ์ ๋ชจ์กฐ๋ฆฌ ์ค์ํ์ง ์๋ค๊ณ ํ๋ค."๊ณ ์ ํ ์ง ๋ชจ๋ฅด๊ฒ ๋ค. ๋ฉ์ถฐ๋ผ.
- ํ์ง์
- ์์๊ฐ ์๋ฐ๋ผ ์กฐ๊ธ ์ด์ํ์ง๋ง ์ ์์ ์ฝ๋๋ฅผ ์์ฐจ์ ์ผ๋ก ๋ฐ๋ผํ๋ฉด์ TDD์ ๋ํ ๊ฐ์ด ์กํ๊ฐ์ต๋๋ค.
- ์ด์ธ๋ช
- ์ ์๊ฐ ์์ฑํ ๋ฉํํฌ๊ฐ ์ดํดํ๊ธฐ ์ด๋ ค์ ๋ค. TDD๋ฅผ ์ํ ๊ธฐ๋ฅ์ ์๋ ๊ฒ ๊ฐ์์ง๋ง ์๋ก์ด ํจ๋ฌ๋ค์์ ์ตํ ๋๋์ด์๋ค.
- ์๋ฌธ์ ์ธ์ด์ ์ฐ๋ฆฌ๊ฐ ๊ตฌํํ๋ ์ธ์ด์ ์ฐจ์ด๋ก ์ธํ ์ถ๊ฐ์ ์ธ ๊ณต๋ถ๊ฐ ๋ ํ์ํ ๊ฒ ๊ฐ๋ค.
- ํ ์คํธ ์ฝ๋๋ฅผ ๋ง์น๊ณ ๊ทธ๊ฒ ๋์๊ฐ๋ฉด TDD๋ ์ฑ๊ณตํ๊ฑธ๊น? ๐คญ
- ํ์ง์
- 14์ฅ: ๋ฆฌํฉํ ๋ง ๊ณผ์ ์ ํ ์คํธ์ฝ๋๋ฅผ ํตํด ์ค์๋ฅผ ๋ฐ๊ฒฌํ๊ณ , ๊ทธ๊ฒ์ ๋ฐ๋ก ๊ณ ์น๋ ๊ฒ์ด ์๋๋ผ ๊ด๋ จ๋ ๋ ๋ค๋ฅธ ํ ์คํธ์ฝ๋๋ฅผ ์ถ๊ฐํ์ฌ ๊ทธ๊ฒ์ to do list์ฒ๋ผ ํ์ฉํ ๊ณผ์ ์ด ์ธ์๊น์๋ค.
- 15์ฅ: ์์ ์ ํ๋์ฉ ํด๊ฒฐํ๋ ๊ณผ์ ์์ ์ฐ์ ์ผ๋ฐํ๋ฅผ ์ํค๊ณ ์ปดํ์ผ๋ฌ์ ์๋ฌ๋ฉ์์ง์ ๋ฐ๋ผ ์ ์ง์ ์ผ๋ก ์ ์ฒด ์์ญ์ ์์ ํด ๋๊ฐ๋ ๋ฐฉ์์ด ๋์๋๋ฐ, ์ด์ ์ฅ์ ๋ด์ฉ๊ณ ๋๋ถ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ์์ด ์ฌ๋ฌ๊ฐ์ง๋ผ๋ ๊ฒ์ ์ฒด๊ฐํ๋ค.
- 16์ฅ: ๊ทธ๋์์ ์ ์๊ฐ TDD๋ฅผ ์งํํ๋ ๊ณผ์ ์ ์ง์คํด์ ๋ฐ๋ผํ์๋๋ฐ, ์ด ์ฅ์์๋ ๊ฒฝ์ ์ ์ผ๋ก TDD๋ฅผ ์งํํ๊ณ ์๋์ง์ ์ ๋๋ก ์งํ๋๊ณ ์๋์ง์ ๋ํด ์๊ฐํด๋ณผ ์ ์๋ ๋ด์ฉ์ ๋ค๋ฃจ์๋ค.
- 17์ฅ: ๊ทธ๋์ ํด์๋ ๊ณผ์ ๋ค์ด ์์ฝ๋์ด์์๋๋ฐ ์ ์๊ฐ ๊ฐ ์ฅ์์ ์ด๋ค ์๋ฏธ๋ฅผ ์ ๋ฌํ๊ณ ์ํ๋์ง, ๋ญ ๋ฐฐ์ฐ๊ณ ๋ญ ๋์ณค๋์ง ์๊ฐํ ์ ์์๋ค. ๋ TDD์ ๋ถ์ฐ๋ฌผ๋ก ๋์จ ํ ์คํธ์ฝ๋๊ฐ ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ฑํ ์คํธ ๋ฑ ์ ์ง๋ณด์ ๊ทธ ์ด์์ ๊ธฐ๋ฅ๊น์ง ํด์ค๊ฒ์ด๋ผ๊ณ ์์ํ์ง๋ง๋ผ๋ ๋ง์ด ๊ฐ์ฅ ์๋ฟ์๋ค.
- ์ต๋ค์ธ
- 12์ฅ: ๋ค์ค ํตํ ์ฐ์ฐ์ ๊ตฌํํ ๋ ๋๋ ๋จธ๋ฆฌ์ ์ ์๊ฐ ์ฒ์ ๋งํ ์ฐธ์กฐ ํตํ ๋ฐฉ๋ฒ์ ๋ ์ฌ๋ ธ๋๋ฐ, ์ด๊ฒ ์ด๋ ค์ด ๋ฐฉ์์ด๋ผ๋ฉฐ ์๋ก์ด ๋ฐฉ๋ฒ์ ์ ์ํ ๊ฒ์ด ์ธ์๊น์ ์ฑํฐ์๋ค.
- 13์ฅ: ์ ์ตํ๋ค. ์ฌ๋ฌ ํด๋์ค ๊ฐ์ฒด๋ค์ ๋ํด ๋์ผํ ์ฐ์ฐ์ ๊ตฌํํ ๋, ๊ฐ ํด๋์ค๋ณ๋ก ๋์ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋์ , ๋คํ์ฑ์ ์ฌ์ฉํ์ฌ ๊ฐ ํด๋์ค ๋ด๋ถ์ ์ผ๋ก ๊ตฌํ์ ๋ง์ถฐ์ฃผ์ด ์ฝ๋๋ฅผ ์ค์ธ ๋ถ๋ถ์ด ์ ์ตํ๋ค. ์ค๋ฌด์์ ์ถฉ๋ถํ ์ ์ฉํด๋ณผ ์ ์์ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฆ IDE์์๋ ํจ์๋ค ํธ๋ํน์ด ์ ๋์ด์ ์ ํ ๋๋ผ์ง ๋ชปํ๋๋ฐ, ํค์๋ ๋งค๊ฐ ๋ณ์๋ฅผ ์ง์ํ๋ ์ธ์ด(python ๋ฑ)๊ฐ ์๋ ์์น ๋งค๊ฐ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ์ธ์ด๋ ๊ทธ ์๋๋ฅผ ์ ๋ฌํ๊ธฐ ์ด๋ ค์ธ ์ ์๋ค๋ ๊ฒ์ ์์ผ ๋๊ผ๋ค.
- 14์ฅ: ํตํ์ ๋ํ ํ์จ์ ์ ์ฅํ๋ ๊ฐ์ฒด๋ฅผ ํ์คํธ ํ ๋, JUnit ํ ์คํธ ์ฝ๋์์ ๊ฐ์ฒด์ ํ๋กํผํฐ ๊ฐ ๋์ผ์ฑ์ ํ์ธํด์ฃผ์ง ์์ equals๋ฅผ ๋ณ๋๋ก ๊ตฌํํ๋๋ฐ, Vite๋ Jest์์๋ toMatchObject๋ฑ์ ์ ๊ณตํ์ฌ ์ฝ๊ฒ ์์ฑ๊ฐ๋ฅํ ๊ฒ ๊ฐ๋ค. ํ์จ์ ๊ดํ ํด์ํ ์ด๋ธ์ ๊ตฌํํ๋ ๋ถ๋ถ์ด ์ ๊ธฐํ๋ค.
- 15์ฅ: Composite Pattern ์ด๋ผ๋ ๋ง์ด ๋์๋ค. ๊ฐ๋ฐ์์๋ ์์ฃผ ๋ฃ๋ ๋ง์ธ๋ฐ Composite, Factory ๋ฑ ์์ฃผ ์ฌ์ฉ๋๋ ๋์์ธ ํจํด์ ์์๋ณด์์ผ ํ ๋ฏ ํ๋ค.
- 16์ฅ: ๋ฌธ์๋ก์ ํ ์คํธ์ฝ๋์ ์ค์์ฑ์ ๊ดํ ๋ด์ฉ์ด ๋์๋ค. ํ ์คํธ์ฝ๋๋ ๊ธฐ๋ฅ์ ๋น ์ง์์ด ํ ์คํธํ๊ณ ๊ฒ์ฆํด์ผํ์ง๋ง, ๋๋ถ์ด ํ ์คํธ์ฝ๋๋ฅผ ํตํด ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ์ฝ๋์ ๋ํด ์ ์ดํดํ ์ ์๋๋ก ์์ฑ๋์ด์ผํ๋ค. ์์ ์ ํด๋์ค๊ฐ ๋ง์์ง๊ณ ๊ฐ ํด๋์ค์ ๋์ผํ ๋ฉ์๋๊ฐ ๊ตฌํ๋๊ณ ์๋๋ฐ ์ฑ ์ ์ฝ๋๋ง๋ด์๋ ๊ทธ ํ๋ฆ์ ์ดํดํ๊ธฐ ์ด๋ ค์ด ๊ฒ ๊ฐ๋ค. ์คํฐ๋์์ ์ง์ ์์ฑํด๋ณด์์ผ๊ฒ ๋ค.
- 17์ฅ: ์ง๊ธ๊น์ง ์งํํ Money ์์ ์ ํ๊ณ ์ด๋ค. Money์์ ์์ ์์ง ์์ฑ๋์ง ์์ ๋ถ๋ถ๋ ์ ๋ฆฌํ๋๋ฐ, ์ถ๊ฐ๋ก ์งํํด๋ณด๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ๋ค. JUnit์ ์คํ ๋ก๊ทธ๋ฅผ ํตํด ํ
์คํธ์ฝ๋๋ฅผ ์์ฑํ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ๋ถ์ํ ๋ถ๋ถ๋ ์ฌ๋ฏธ์์๋ค. ํ
์คํธ์ฝ๋์ ์ค์ ์ฝ๋์ ๋น์จ์ด ์ ์ฌํ ์ ๋ ์ฌ๋ฏธ์๋ ๊ฒฐ๊ณผ์ธ ๊ฒ ๊ฐ๋ค. ์ฐ๋ฆฌ๊ฐ Typescript๋ก ๋ฒ์ญํ ์ต์ข
์ฝ๋์์๋ ํต๊ณ๋ฅผ ๋ด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ํฅ์์ํค๋ ๋๋ค๋ฅธ ๋ฐฉ๋ฒ์ ํ ์คํธ์ ์๋ ๊ทธ๋๋ก ๋๋ฉด์ ํ๋ก๊ทธ๋จ์ ๋ก์ง์ ๋จ์ํํ๋ ๊ฒ์ด๋ค.
- ํ ์คํธ๋ฅผ ํ์คํ ๋์๊ฐ๊ฒ ๋ง๋๋ ์ธ ๊ฐ์ง ์ ๊ทผ๋ฒ: ๊ฐ์ง๋ก ๊ตฌํํ๊ธฐ, ์ผ๊ฐ์ธต๋๋ฒ, ๋ช ๋ฐฑํ๊ฒ ๊ตฌํํ๊ธฐ.
- ์ค๊ณ๋ฅผ ์ฃผ๋ํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก ํ ์คํธ ์ฝ๋์ ์ค์ ์ฝ๋ ์ฌ์ด์ ์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ.
- ๊ธธ์ด ๋ฏธ๋๋ฌ์ฐ๋ฉด ์๋๋ฅผ ์ค์ด๊ณ ์ํฉ์ด ์ข์ผ๋ฉด ์๋๋ฅผ ๋์ด๋ ์์ผ๋ก ํ ์คํธ ์ฌ์ด์ ๊ฐ๊ฒฉ์ ์กฐ์ ํ ์ ์๋ ๋ฅ๋ ฅ.