Clean Code - ๋ก๋ฒํธ C.๋งํด
์๋ ์ ๋ช ํ ์ฑ ์ด๊ธฐ๋ ํ๊ณ , ์ธ์ ๊ฐ ์ฝ์ด๋ด์ผ์ง ํ๊ณ ๋ฌตํ๋๋ ์ฑ ์ ์๋ ํ๋ ๊ฒ์ ๋ชฉํ๋ก ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
9. ๋จ์ ํ ์คํธ
- TDD : ์ค์ ์ฝ๋๋ฅผ ์ง๊ธฐ ์ ์ ๋จ์ ํ ์คํธ ์ง๋ ๋ฐฉ์
- TDD ๋ฒ์น
1. ์คํจํ๋ ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ ๋๊น์ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๋๋ค.
2. ์ปดํ์ผ์ ์คํจํ์ง ์์ผ๋ฉด์ ์คํ์ด ์คํจํ๋ ์ ๋๋ก๋ง ๋จ์ ํ ์คํธ๋ฅผ ์์ฑํ๋ค.
3. ํ์ฌ ์คํจํ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ ์ ๋๋ก๋ง ์ค์ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
- ํ ์คํธ ์ฝ๋๋ ์ค์ ์ฝ๋ ๋ชป์ง ์๊ฒ ๊นจ๋ํ๊ฒ ์ง์ผ ํ๋ค.
- ์ฝ๋์ ์ ์ฐ์ฑ, ์ ์ง๋ณด์์ฑ, ์ฌ์ฌ์ฉ์ฑ์ ์ ๊ณตํ๋ ๋ฒํ๋ชฉ์ด ๋ฐ๋ก ๋จ์ ํ ์คํธ์ด๋ค.
- ํ ์คํธ ์ผ์ด์ค๊ฐ ์์ผ๋ฉด ๋ณ๊ฒฝ์ด ์ฌ์์ง๋ค.
- ๋จ์ผ assert ๋ฌธ ๊ท์น ๊ถ์ฅ (ํจ์๋ง๋ค assert๋ฌธ์ ๋จ ํ๋๋ง ์ฌ์ฉํ๊ธฐ) => ์ ์์๋ก ์ข๋ค.
- ํ ์คํธ ํจ์ ํ๋๋ ๊ฐ๋ ํ๋๋ง ํ ์คํธํ๋ผ
- F.I.R.S.T : ๊นจ๋ํ ํ ์คํธ๋ฅผ ์ํ ๊ท์น
- ๋น ๋ฅด๊ฒ(Fast) : ํ ์คํธ๋ ๋นจ๋ฆฌ ๋์์ผ ํ๋ค.
- ๋ ๋ฆฝ์ ์ผ๋ก(Independent) : ๊ฐ ํ ์คํธ๋ ์๋ก ์์กดํ๋ฉด ์๋๋ค.
- ๋ฐ๋ณต๊ฐ๋ฅํ๊ฒ (Repeatable) : ํ ์คํธ๋ ์ด๋ค ํ๊ฒฝ์์๋ ๋ฐ๋ณต ๊ฐ๋ฅํด์ผ ํ๋ค.
- ์๊ฐ๊ฒ์ฆํ๋ (Self-Vaildating) : ํ ์คํธ๋ boolean ๊ฐ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ด์ผ ํ๋ค.
- ์ ์์ (Timely) : ํ ์คํธ์ฝ๋๋ ์ค์ ์ฝ๋ ๊ตฌํ์ ์ ๊ตฌํํด์ผํ๋ค.
10. ํด๋์ค
- ํด๋์ค๋ ์์์ผ ํ๋ค. (๋งก์ ์ฑ ์)
- ํด๋์ค ์ด๋ฆ์ ํด๋น ํด๋์ค ์ฑ ์์ ๊ธฐ์ ํด์ผ ํ๋ค. (๊ฐ๋จ๋ช ๋ฃํ๊ฒ)
- ๋จ์ผ ์ฑ ์ ์์น SRP(Single Responsibility Principle) : ํด๋์ค๋ ๋ณ๊ฒฝํ ์ด์ ๊ฐ ํ๋์ฌ์ผ ํ๋ค.
- ํด๋์ค๋ ์ธ์คํด์ค ๋ณ์ ์๊ฐ ์์์ผ ํ๋ค. (์์ง๋๊ฐ ๋์์ผ ํ๋ค) => ์ธ์คํด์ค ๋ณ์๊ฐ ๋ง๋ค = ์๋ก์ด ํด๋์ค๋ก ์ชผ๊ฐ์ผ ํ๋ค.
- OCP (Open-Closed Principle) : ํด๋์ค๋ ํ์ฅ์ ๊ฐ๋ฐฉ์ ์ด๊ณ ์์ ์ ํ์์ ์ด์ด์ผ ํ๋ค
- DIP (Dependency Inversion Principle) : ํด๋์ค๋ ์์ธํ ๊ตฌํ์ด ์๋๋ผ ์ถ์ํ์ ์์กดํด์ผ ํ๋ค. => ์์ธํ ๊ตฌํ์ ์์กดํ๋ ์ฝ๋๋ ํ ์คํธ๊ฐ ์ด๋ ต๋ค.
11. ์์คํ
- ์์คํ ์ ์๊ณผ ์์คํ ์ฌ์ฉ์ ๋ถ๋ฆฌํ๋ผ
- ์ํํธ์จ์ด ์์คํ ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ณ ์์กด์ฑ์ ์๋ก ์ฐ๊ฒฐํ๋ '์ค๋น ๊ณผ์ '๊ณผ ์ค๋น๊ณผ์ ์ดํ์์ด์ด์ง๋ '๋ฐํ์ ๋ก์ง'์ ๋ถ๋ฆฌํด์ผ ํ๋ค.
- ์ค์ ๋ ผ๋ฆฌ๋ ์ผ๋ฐ ์คํ ๋ ผ๋ฆฌ์ ๋ถ๋ฆฌํด์ผ ๋ชจ๋์ฑ์ด ๋์์ง๋ค.
- ์์กด์ฑ ์ฃผ์ (DI) : ์ ์ด ์ญ์ ๊ธฐ๋ฒ์ ์์กด์ฑ ๊ด๋ฆฌ์ ์ ์ฉํ ๋งค์ปค๋์ฆ