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) : ์ ์ด ์ญ์ ๊ธฐ๋ฒ์ ์์กด์ฑ ๊ด๋ฆฌ์ ์ ์ฉํ ๋งค์ปค๋์ฆ
- โ์ฒ์๋ถํฐ ์ฌ๋ฐ๋ฅด๊ฒโ ์์คํ ์ ๋ง๋ค ์ ์๋ค๋ ๋ฏฟ์์ ๋ฏธ์ ์ด๋ค. ์ค๋ ์ฃผ์ด์ง ์ฌ์ฉ์ ์คํ ๋ฆฌ์ ๋ง์ถฐ ์์คํ ์ ๊ตฌํํ๊ณ , ๋ด์ผ์ ์๋ก์ด ์คํ ๋ฆฌ์ ๋ง์ถฐ ์์คํ ์ ์กฐ์ ํ๊ณ ํ์ฅํ๋ฉด ๋๋ค.
- TDD์ ๋ฆฌํฉํฐ๋ง์ ์ฝ๋ ์์ค์์ ์์คํ ์ ์กฐ์ ํ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ค
- ๋ชจ๋์ ๋๋๊ณ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ์ง์ฝ์ ์ธ ๊ด๋ฆฌ์ ์์ฌ ๊ฒฐ์ ์ด ๊ฐ๋ฅํด์ง๋ค
- ๋ช ๋ฐฑํ ๊ฐ์น๊ฐ ์์๋์ ํ์ค์ ํ๋ช ํ๊ฒ ์ฌ์ฉํ๋ผ => ํ์ค์ ์ง์ฐฉํ๊ฒ๋๋ฉด ๊ณ ๊ฐ ๊ฐ์น๊ฐ ๋ท์ ์ผ๋ก ๋ฐ๋ฆด์ ์๋ค
12. ์ฐฝ๋ฐ์ฑ
- ๋ชจ๋ ํ ์คํธ๋ฅผ ์คํํ๋ผ : ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ง์ด ์์ฑํ ์๋ก ๊ฐ๋ฐ์๋ DIP์ ๊ฐ์ ์์น์ ์ ์ฉํ๊ณ ์์กด์ฑ ์ฃผ์ , ์ธํฐํ์ด์ค, ์ถ์ํ ๋ฑ๊ณผ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถค์ผ๋ก์, ์ค๊ณ ํ์ง์ด ๋์์ง๋ค.
- ์ค๋ณต์ ์์ ๊ณ ์ฌ์ฌ์ฉ์ฑ์ ๋์ฌ๋ผ
- ์ฝ๋๋ ๊ฐ๋ฐ์์ ์๋๋ฅผ ๋ถ๋ช ํ ํํํด์ผ ํ๋ค.
์ข์ ์ด๋ฆ์ ์ ํํ๋ค.
ํจ์์ ํด๋์ค ํฌ๊ธฐ๋ฅผ ๊ฐ๋ฅํ ์ค์ธ๋ค.
ํ์ค ๋ช
์นญ์ ์ฌ์ฉํ๋ค. ex) ํด๋์ค ์ด๋ฆ์ ํจํด ์ด๋ฆ ๋ฃ๊ธฐ
๋จ์ ํ
์คํธ ์ผ์ด์ค๋ฅผ ๊ผผ๊ผผํ ์์ฑํ๋ค.
- ํด๋์ค์ ๋งค์๋ ์๋ฅผ ์ต์๋ก ์ค์ฌ๋ผ
13. ๋์์ฑ
- ๋์์ฑ : ๊ฒฐํฉ์ ์์ ๋ ์ ๋ต (โ๋ฌด์โ๊ณผ โ์ธ์ โ๋ฅผ ๋ถ๋ฆฌ)
- ํ์ํ ์ด์ : ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ก ์๋ต ์๊ฐ๊ณผ ์์ ์ฒ๋ฆฌ๋ ๊ฐ์
'๐Book' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํด๋ฆฐ ์ํคํ ์ฒ ์์ฝ (0) | 2024.09.23 |
---|