๐พ [CS] ์ข์ ์ฝ๋(Clean Code)์ ์ค์์ฑ.
ํด๋ฆฐ ์ฝ๋(Clean Code)๋ ์ฝ๊ธฐ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฌ์ฐ๋ฉฐ ์ ์ง ๋ณด์ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์๋ฏธํฉ๋๋ค.
์ํํธ์จ์ด ๊ฐ๋ฐ์์ ํด๋ฆฐ ์ฝ๋๋ ๋จ์ํ ๊ธฐ๋ฅํ๋ ์ฝ๋๋ฅผ ๋์ด์, ์ผ๊ด์ฑ, ๊ฐ๋
์ฑ, ๋ช
ํ์ฑ, ๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฒฐ์ฑ์ ๊ฐ์ถ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
ํด๋ฆฐ ์ฝ๋๋ ๊ทธ ์์ฒด๋ก ์ง๊ด์ ์ด์ด์ผ ํ๋ฉฐ, ๊ฐ๋ฐ์๊ฐ ์ฝ๋์ ๋์์ ์ฝ๊ฒ ํ์
ํ ์ ์๊ฒ ๋์์ค๋๋ค.
1๏ธโฃ ํด๋ฆฐ ์ฝ๋์ ํน์ง.
1. ๋ช ํํ ๋ชฉ์ ๊ณผ ์ด๋ฆ.
- ํด๋์ค, ๋ฉ์๋, ๋ณ์ ์ด๋ฆ์ด ๊ทธ ๋ชฉ์ ์ ๋ช ํํ๊ฒ ๋๋ฌ๋ด์ผ ํฉ๋๋ค.
- ์ด๋ฆ๋ง ๋ณด๊ณ ๋ ํด๋น ์ฝ๋๊ฐ ๋ฌด์์ ํ๋์ง ์ฝ๊ฒ ํ์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
2. ๋จ์ํจ(Simplicity)
- ์ฝ๋๊ฐ ๋ถํ์ํ๊ฒ ๋ณต์กํ์ง ์์์ผ ํ๋ฉฐ, ๊ฐ์ฅ ๋จ์ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๊ณ ํด์ผ ํฉ๋๋ค.
- ๋จ์ํ ์ฝ๋๋ ์ดํดํ๊ธฐ ์ฝ๊ณ , ์ค๋ฅ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ์ค์ด๋ญ๋๋ค.
3. ์ผ๊ด์ฑ(Consistency)
- ์ฝ๋ ์คํ์ผ๊ณผ ๊ตฌ์กฐ๋ ์ผ๊ด์ฑ์ด ์์ด์ผ ํฉ๋๋ค.
- ์ด๋ก ์ธํด ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ด ์๋ก์ด ๊ท์น์ ํ์ตํ ํ์ ์์ด ์ผ๊ด๋ ํ์์ ๋ฐ๋ผ๊ฐ ์ ์์ต๋๋ค.
4. ์์ ํจ์(Small Function)
- ํจ์๋ ๋ฉ์๋๋ ํ๋์ ์์ ๋ง์ ์ํํ๊ณ , ๊ทธ ์์ ์ ๋ช ํํ๊ฒ ๋ํ๋ด์ผ ํฉ๋๋ค.
- ํจ์๋ ์๊ณ ๊ฐ๊ฒฐํด์ผ ํ๋ฉฐ, ๋๋ฌด ๋ง์ ์ผ์ ํ๊ฑฐ๋ ๋๋ฌด ๋ง์ ์ฑ ์์ ๊ฐ์ ธ์๋ ์๋ฉ๋๋ค.
5. ์์กด์ฑ ์ต์ํ(Low Coupling)
- ๋ชจ๋ ๊ฐ์ ์์กด์ฑ์ ์ต์ํํ์ฌ, ํ ๋ถ๋ถ์ด ๋ณ๊ฒฝ๋๋๋ผ๋ ๋ค๋ฅธ ๋ถ๋ถ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํด์ผ ํฉ๋๋ค.
- ์ด๋ก ์ธํด ์ ์ง ๋ณด์์ ํ์ฅ์ด ์ฌ์์ง๋๋ค.
6. ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ(DRY: Donโt Repeat Yourself)
- ๋์ผํ ์ฝ๋๊ฐ ์ฌ๋ฌ ๊ณณ์์ ๋ฐ๋ณต๋์ง ์๋๋ก ํด์ผ ํฉ๋๋ค.
- ์ค๋ณต ์ฝ๋๋ ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ๋์ด๊ณ ์ ์ง ๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ญ๋๋ค.
7. ์๋ฌ ์ฒ๋ฆฌ ๋ฐ ์์ธ ์ฒ๋ฆฌ ๋ช ํ์ฑ.
- ํด๋ฆฐ ์ฝ๋๋ ์์์น ๋ชปํ ์ํฉ์ ๋ํ ์ฒ๋ฆฌ๊ฐ ๋ช ํํ๊ฒ ์ด๋ฃจ์ด์ ธ์ผ ํฉ๋๋ค.
- ์๋ฌ๋ ์์ธ๊ฐ ๋ฐ์ํ์ ๋ ๊ทธ ํ๋ฆ์ด ํ ๋์ ์ดํด๋ ์ ์๋๋ก ์์ฑ๋์ด์ผ ํฉ๋๋ค.
8. ์ฃผ์์ ์ต์ํํ๋, ํ์ํ ๊ฒฝ์ฐ์๋ ์ค๋ช ์ ์ผ๋ก
- ํด๋ฆฐ ์ฝ๋๋ ๊ทธ ์์ฒด๋ก ์ถฉ๋ถํ ์ค๋ช ์ ์ด๊ธฐ ๋๋ฌธ์ ์ฃผ์์ด ๋ง์ด ํ์ํ์ง ์์ต๋๋ค.
- ๋์ , ์ฃผ์์ ์ฝ๋๊ฐ ์๋ ๋ณต์กํ ๋น์ฆ๋์ค ๋ก์ง์ด๋ ์๋์ ๋ํ ์ค๋ช ์ผ๋ก ์ฌ์ฉ๋์ด์ผ ํฉ๋๋ค.
2๏ธโฃ ํด๋ฆฐ ์ฝ๋๋ฅผ ์งํฅํ๋ ์์น.
1. SOLID ์์น.
- ๊ฐ์ฒด์งํฅ ์ค๊ณ์ 5์์น(๋จ์ผ ์ฑ ์ ์์น, ๊ฐ๋ฐฉ-ํ์ ์์น, ๋ฆฌ์ค์ฝํ ์นํ ์์น, ์ธํฐํ์ด์ค ๋ถ๋ฆฌ ์์น, ์์กด์ฑ ์ญ์ ์์น)์ ์ง์ณ, ๋ ๋์ ๊ตฌ์กฐ์ ํ์ฅ์ฑ์ ๊ฐ์ถ ์ฝ๋๋ฅผ ์์ฑํฉ๋๋ค.
๐โโ๏ธ SOLID ์์น
2. KISS ์์น(Keep It Simple, Stupid)
- ์ฝ๋๋ ๊ฐ๋ฅํ ํ ๊ฐ๋จํ๊ณ ๋ณต์กํ์ง ์๊ธฐ ์ ์ง๋์ด์ผ ํ๋ค๋ ์์น์ ๋๋ค.
3. YAGNI ์์น(You Ainโt Gonna Need It)
- ํ์ํ์ง ์์ ๊ธฐ๋ฅ์ ๋ฏธ๋ฆฌ ๊ตฌํํ์ง ์๊ณ , ํ์ํ ๋๋ง ์ถ๊ฐํ๋ ์์น์ ๋๋ค.
- ์ฝ๋๊ฐ ์ง๋์น๊ฒ ๋ณต์กํด์ง๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
4. DRY ์์น(Donโt Repeat Yourself)
- ์ค๋ณต์ ํผํ๊ณ , ๊ฐ์ ๋ก์ง์ ๋ฐ๋ณตํ์ง ์๋๋ก ์ฝ๋๋ฅผ ์ค๊ณํ๋ ์์น์ ๋๋ค.
3๏ธโฃ ํด๋ฆฐ ์ฝ๋์ ์ค์์ฑ
- ์ ์ง ๋ณด์์ฑ : ์๊ฐ์ด ์ง๋๋ ์ดํดํ๊ธฐ ์ฝ๊ณ ์์ ํ๊ธฐ ์ฌ์ด ์ฝ๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์๋ช ์ ์ฐ์ฅํฉ๋๋ค.
- ๋ฒ๊ทธ ๊ฐ์ : ๋ช ํํ๊ณ ๊ฐ๊ฒฐํ ์ฝ๋๋ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ์ค์ ๋๋ค.
- ํ์ : ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํ์ ํ ๋, ํด๋ฆฐ ์ฝ๋๋ ์์ฌ์ํต์ ์ํํ๊ฒ ํ๋ฉฐ ์ฝ๋ ๋ฆฌ๋ทฐ ๊ณผ์ ๋ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ํ์ฅ์ฑ : ํด๋ฆฐ ์ฝ๋๋ ํ์ฅ๊ณผ ๋ณํ์ ์ ์ฐํ๊ฒ ๋์ฒํ ์ ์์ด ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋ฐ ์ฉ์ดํฉ๋๋ค.
ํด๋ฆฐ ์ฝ๋๋ ๋จ์ํ ์ฝ๋ ์คํ์ผ์ด ์๋๋ผ, ์ํํธ์จ์ด์ ํ์ง์ ๋์ด๋ ๋ฐ ํ์์ ์ธ ์ฒ ํ๊ณผ ์์น์ ๋๋ค.
4๏ธโฃ Java ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ํด๋ฆฐ ์ฝ๋๊ฐ ์ค์ํ ์ด์ .
Java ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ํด๋ฆฐ ์ฝ๋๊ฐ ์ค์ํ ์ด์ ๋ ์ฌ๋ฌ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
์ด๋ฅผ ํตํด ๊ฐ๋ฐ์์ ์์ฐ์ฑ๊ณผ ์ ์ง ๋ณด์์ฑ์ด ํฌ๊ฒ ํฅ์๋๋ฉฐ, ์์คํ
์ ์์ ์ฑ๊ณผ ํ์ฅ์ฑ๋ ๊ฐ์ ๋ฉ๋๋ค.
1. ์ดํด์ ๊ฐ๋ ์ฑ ํฅ์.
- ํด๋ฆฐ ์ฝ๋๋ ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ด ์ฝ๊ฒ ์ดํดํ ์ ์๋๋ก ์์ฑ๋ฉ๋๋ค.
- Java์ ๊ฐ์ ๊ฐ์ฒด์งํฅ ์ธ์ด์์๋ ํด๋์ค, ๋ฉ์๋, ๋ณ์ ์ด๋ฆ์ด ์ง๊ด์ ์ด๊ณ ๋ชฉ์ ์ ๋ง๊ฒ ๋ช ๋ช ๋์ด์ผ ํฉ๋๋ค.
- ์ด๋ฅผ ํตํด ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ๋ถ์ํ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ํ๋ ๋ฐ ๋๋ ์๊ฐ์ด ์ค์ด๋ญ๋๋ค.
2. ์ ์ง ๋ณด์ ์ฉ์ด.
- ํด๋ฆฐ ์ฝ๋๋ ๋ช ํํ๊ณ ์ผ๊ด์ฑ ์๊ฒ ์์ฑ๋์ด, ์ ์ง ๋ณด์ ์ ๋ณต์กํ ๋ก์ง์ ์ฝ๊ฒ ํ์ ํ ์ ์์ต๋๋ค.
- ๋ถํ์ํ ์ฝ๋๋ ์ค๋ณต ์ฝ๋๋ฅผ ์ ๊ฑฐํ๊ณ , ๋ชจ๋ํ๋ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๋๋ผ๋ ํน์ ๋ถ๋ถ๋ง ์์ ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ ์ง ๋ณด์๊ฐ ์์ํด ์ง๋๋ค.
3. ๋ฒ๊ทธ ๋ฐ์ ํ๋ฅ ๊ฐ์.
- ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ ๋ณต์กํ ์ฝ๋๋ ์ข ์ข ๋ฒ๊ทธ๋ฅผ ์จ๊น๋๋ค.
- ํด๋ฆฐ ์ฝ๋๋ ๋ช ํํ๊ณ ์ผ๊ด์ฑ์ด ์์ด, ๊ฐ๋ฐ์๋ค์ด ์ค์๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
- ๋ํ, ์ ์์ฑ๋ ํ ์คํธ ์ฝ๋์ ๊ฒฐํฉํ๋ฉด ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ํ๋ฅ ์ด ๋์ฑ ๋ฎ์์ง๋๋ค.
4. ํ์ฅ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ.
- ํด๋ฆฐ ์ฝ๋๋ ์์น์ ๋ง๊ฒ ๋ชจ๋ํ๋๊ณ , ๋จ์ผ ์ฑ ์ ์์น(Single Responsibility Principle), ๊ฐ๋ฐฉ-ํ์ ์์น(Open/Closed Principle) ๋ฑ๊ณผ ๊ฐ์ ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์น๋ค์ ๋ฐ๋ฆ ๋๋ค.
- ์ด๋ฅผ ํตํด ์ฝ๋์ ํ์ฅ์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ ธ, ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ์ฝ๊ฒ ํ์ฅํ ์ ์์ต๋๋ค.
5. ํ์ ๊ฐ์ .
- ์ฌ๋ฌ ๋ช ์ ๊ฐ๋ฐ์๊ฐ ์ฐธ์ฌํ๋ ๋ฐฑ์๋ ํ๋ก์ ํธ์์๋ ์ฝ๋ฉ ์ค์นด์ผ์ ์ผ๊ด์ฑ์ด ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ํด๋ฆฐ ์ฝ๋ ์์น์ ๋ฐ๋ฅด๋ฉด, ํ์ ๊ฐ์ ์ฝ๋๋ฅผ ๊ณต์ ํ๊ณ ํ์ ํ ๋ ๋ ์ํํ ์์ฌ์ํต์ด ๊ฐ๋ฅํด์ง๋๋ค.
- ์ฝ๋ ๋ฆฌ๋ทฐ๋ ๋ณด๋ค ์ฝ๊ฒ ์งํํ ์ ์์ต๋๋ค.
6. ํ ์คํธ ์ฉ์ด์ฑ.
- ํด๋ฆฐ ์ฝ๋๋ ํ ์คํธ๋ฅผ ์์ฑํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
- ๋ฉ์๋๊ฐ ๊ฐ๊ฒฐํ๊ณ ๋ช ํํ๋ฉด ๋จ์ ํ ์คํธ(Unit Test)๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๋ ์ฌ์์ง๊ณ , ์ด๋ฅผ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ์ ๋์ผ ์ ์์ต๋๋ค.
- ํ ์คํธ ๊ฐ๋ฅ์ฑ์ด ๋์ ์ฝ๋๋ ํ์ง ๊ด๋ฆฌ์ ๋งค์ฐ ์ ๋ฆฌํฉ๋๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก, ํด๋ฆฐ ์ฝ๋๋ ์ฅ๊ธฐ์ ์ผ๋ก ๋ฐฑ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ, ํ์ฅ์ฑ, ์ ์ง ๋ณด์์ฑ์ ๋์ด๋ฉฐ, ํ์๋ค ๊ฐ์ ํ์ ์ ์ด์งํ๊ณ ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ ์ค์ฌ ๊ฐ๋ฐ ํจ์จ์ฑ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค.