์ด๋ฒ์๋ Clean Code ๊ด๋ จ ๊ฐ์๋ฅผ ์๊ฐํ๋ค. ๋จผ์ Clean Code๊ฐ ๋ฌด์์ธ์ง์ ๋ํด ์์๋ณด๋๋ก ํ์.
Clean Code๋?
Clean Code์ ๋ํด Robert C.Martin์ ์๋์ ๊ฐ์ด ์๊ฐํ๊ณ ์๋ค.
clean code๋ ์ดํดํ๊ธฐ ์ฝ๊ณ , ๋ณ๊ฒฝํ๊ธฐ ์ฌ์ด ์ฝ๋ by Robert C.Martin, Clean Code
Clean Code์ ํ์ค์ด๋ ์๊ฒฉํ ์ ์๋ ์กด์ฌํ์ง ์๋๋ค. ํ์ง๋ง ๊ณตํต๋ ์๊ฒฌ์ด ์กด์ฌํ๋ค.
- ์ฌ๋์ด ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฝ๋ค
- ๋จ์ํ ํ ๊ฐ์ง ์ญํ ์ ํ๊ณ , ๋ช ํํ ์ด๋ฆ(ํํ)์ ๊ฐ๊ณ ์๋ค.
- ์ค๋ณต์ด ์๋ค
- ํ ์คํธ ์ผ์ด์ค๊ฐ ์๋ค.
๊ทธ๋ ๋ค๋ฉด Clean Code๋ ์ ์ค์ํ ๊น?
์ผ๋ฐ์ ์ผ๋ก SoftWare๋ ํ ๋ฒ ๊ฐ๋ฐ๋๊ณ , ์ค๋ ๊ธฐ๊ฐ๋์ ์ ์ง๋ณด์๋๋ค. ์ด๋ ๊ธฐ์กด ์ฝ๋์ ์ถ๊ฐ ์์ ํ๋ ์๊ฐ์ด ์๋์ ์ผ๋ก ๋ง๋ค. ๋๋ถ๋ถ์ ์๊ฐ์ ๊ธฐ์กด ์ฝ๋๋ฅผ ์ฝ๊ณ , ์ดํดํ๋๋ฐ ์ฌ์ฉํ๋ค๋ ๋ป์ด๋ค.
๋ง์ผ ์ฝ๋์ ํ์ง์ด ๋ฎ์์ง๋ฉด ์ฝ๋๋ฅผ ์ฝ๊ณ ์ดํดํ๋๋ฐ ๋ ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๊ณ , ์์ ํ๋๋ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ด๋ค. ํ์ฌ๋ก ๋๊ณ ๋ณด๋ฉด ๊ฐ์ธ๊ณผ ์กฐ์ง ๋ชจ๋์๊ฒ ์ปค๋ค๋ ๋นํจ์จ์ด ๋ฐ์ํ๋ ๊ฒ์ด๋ค.
Clean Code๊ฐ ๋ฌด์์ธ์ง์ ๋ํด ์์๋ณด์๋ค. ์ด์ Clean Code๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ณด๋๋ก ํ์.
Clean Code๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ
1 . Clean Name
์ฐ๋ฆฌ๋ ๊ฐ๋ฐ์ ์ฝ 75%์ ์๊ฐ์ ์ฝ๋๋ฅผ ์ฝ๊ณ ์ดํดํ๋๋ฐ ์ฌ์ฉํ๋ค. ๋ณ์, ์์, ํจ์, ํด๋์ค ๋ฑ SW์ ์ฃผ์ ์์๋ ์ด๋ฆ์ ๊ฐ๊ณ ์๋ค. ์ข์ ์ด๋ฆ์ ์ฌ์ฉํ๋ฉด๋ด๋ถ๋ฅผ ๋ค์ฌ๋ค๋ณด์ง ์์๋ ๋์๊ณผ ๋ชฉ์ ์ ์ฝ๊ฒ ์ดํดํ ์ ์๊ฒ ํ๋ค. ๋์๊ฐ ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ ์ธ์ง์ ๋ถํ๋ฅผ ์ต์ํ ํ ์ ์๋ค. Clean Name์ด๋ ์๋์ ๊ฐ๋ค.
๐ก Variables / Constants : ์ด๋ค ๋ฐ์ดํฐ๊ฐ ๋ด๊ฒจ ์๋์ง ๋ช ํํ ์ค๋ช ํ๋ ์ด๋ฆ
Functions / Methods : ์ด๋ค ๋์์ ํ๋์ง ๋ช ํํ ์ค๋ช ํ๋ ์ด๋ฆ
Classes : ์ด๋ค ์ข ๋ฅ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋์ง ๋ช ํํ ์ค๋ช ํ๋ ์ด๋ฆ
์์ ๊ฐ์ด Clean Name์ ์ง๋ ค๋ฉด ๊ท์น์ ์ ํ๊ณ ์ผ๊ด์ฑ ์๊ฒ ์ฝ๋๋ฅผ ์ง๋ ๊ฒ์ด ์ข๋ค. ์๋ ์์์ ๊ฐ์ด ๋ง์ด๋ค. ์ด๋ฐ ๊ท์น์ ํ์๊ณผ ์์ํ๋ ๊ฒ์ด ์ข๋ค. ๋๋ ์ธ์ด๋ณ Naming Standard๋ฅผ ์ฐธ๊ณ ํ๋ ๊ฒ์ด ์ข๋ค. ๋ํ์ ์ธ ์๋ก Java๋ Oracle, Google ๋ฑ์์ Style Guide๋ฅผ ์ ์ํ์ฌ ๋ฐฐํฌํ๊ณ ์๋ค.
๐ก ex) ์ฐ๋ฆฌ ํ์ ์ ๋ณด๋ฅผ ์กฐํํ ๋ get ๋์ฌ๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
→User์ ๋ณด๋ฅผ ์กฐํํ๋ ํจ์๋ฅผ ์ฐพ๊ธฐ ์ํด getUser()ํจ์๋ฅผ ์ฐพ์๋ค.
์ฝ๋ ๋ฆฌ๋ทฐ์์๋ Naming ๋ฑ์ด ์ฌ์ ์ ์ ํ ๊ท์น์ ์ ์งํค๊ณ ์๋์ง ๋ฐ๋์ ํ์ธํด์ผ ํ๋ค.
2 . Clean Method
Method์ Function์ SW์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๋ชจ๋์ด๋ค. ์ฐ์ Clean Method๋ ํธ์ถํ๋ ์ฌ๋์ด ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ , ์ ์ง๋ณด์ ํ๋ ์ฌ๋์ด ์ดํด/๋ณ๊ฒฝ/ํ ์คํธ ํ๊ธฐ ์ฌ์์ผ ํ๋ค. Clean Method์ ํน์ง์ ์๋์ ๊ฐ๋ค.
- ๊ฐ๋ฅํ ํ ์ถฉ๋ถํ ์์์ผ ํ๋ค.
- ํ ๊ฐ์ง๋ฅผ ํด์ผํ๋ค.
- ํ ์คํธ ๊ฐ๋ฅํด์ผ ํ๋ค.
- ์ค๋ณต์ด ์์ด์ผ ํ๋ค.
๋ Parameter ์ ๋ํ ์์น๋ค๋ ์๋ค.
- Method๋ฅผ ํธ์ถํ๋ ์ฌ๋์ ์ธ์ง์ ๋ถํ๋ฅผ ์ต์๋ก ๋ง๋ค์ด ์ฃผ์ด์ผํ๋ค.
- Method๋ฅผ ํธ์ถํ ๋ ๋ง๋ค ๋ด๋ถ ์ฝ๋๋ฅผ ๋ณด๊ฑฐ๋ API ๋ฌธ์๋ฅผ ๋ณด์ง ์๊ฒ ํด์ผํ๋ค.
- Parameter์ ๊ฐ์๋ ๊ฐ๋ฅํ ํ ์ ์ด์ผ ํ๋ค. →0~2๊ฐ๊น์ง๋ ๋ณดํต →3๊ฐ๋ ๊ฐ์ ๊ฐ๋ฅ์ฑ ๊ฒํ ํ์, 4๊ฐ๋ ๊ฐ์ ํ์
Parameter๊ฐ ๋๋ฌด ๋ง์ ๊ฒฝ์ฐ, ์ด๋ Method๊ฐ ๋๋ฌด ๋ง์ ์ญํ ์ ํ๊ณ ์๋ค๋ ๋ป์ผ ์ ์๋ค. ์ด๋๋ Method๋ฅผ ๋ถํ ํ๋ฉด ๋๋ค. ๋๋ Parameter Data๋ฅผ ์ ์ฅํ๋ Object๋ฅผ ํ์ฉํ๋๋ก ํ์.
๐ก ์ฐธ๊ณ
Cyclomatic Complexity
→ Method ๋ด๋ถ์ ๋ณต์ก๋๋ฅผ ์ฆ์ ํ๋ ์งํ
→ Method ๋ด๋ถ์ ์กฐ๊ฑด๋ฌธ ์ค์ฒฉ์ด ๋ณต์กํ ์๋ก ๋์์ง๋ค.
→ CC(Cyclomatic Complexity)๊ฐ ๋์์๋ก ํ ์คํธ๊ฐ ์ด๋ ต๊ณ , ์์ ์ด ์ด๋ ต๋ค.
3 . Clean Comment
Comment๋ Code์ ๋ํ ์ฌ๋์ด ์ฝ์ ์ ์๋ ๋ถ๊ฐ์ค๋ช ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋์ด Code๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๊ฒ ํ๊ธฐ ์ํด ์ฃผ์์ ์์ฑํ๋ค. ํ์ง๋ง Comment๋ก ๋ถ๊ฐ ์ค๋ช ์ด ํ์ํ๋ค๋ฉด Code๊ฐ ์ถฉ๋ถํ ์๋ฏธ์์ง ๋ชปํ๋ค๋ ๋ป์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ ํ ๋ Comment๋ ์์ ์ด ๋๊ธฐ๋ ํ๊ณ , ๋์ง ์๊ธฐ๋ ํ๋ค. ์ฆ Comment์ ์ ๋ณด๋ ์๋ชป๋๊ฑฐ๋ ์ค๋๋ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ์ฆ ์ฝ๋ ์์ ์ด๋ ฅ์ Comment๋ก ๋จ๊ฒจ์ฃผ๋ ๊ฒ์ด ์ข๋ค.
4. Clean Formatting
Code Formatting์ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ดํด๋๋ฅผ ๋์ฌ์ฃผ๋ ์ผ๋ จ์ ์์ ์ด๋ค. ์์ง์ Formatting ์์น๊ณผ ์ํ์ Formatting ์์น์ผ๋ก ๋ถ๋ฅ๋๋ค.
๐ก ์์ง์ (Vertical) Formatting
์ฝ๋์ ์์์ ์๋๋ก ์งํ๋๋ ํ๋ฆ๊ณผ ๊ด๋ จ๋ ์ฝ๋ ์์ฑ ๊ท์น
์ฝ๋ ๋ผ์ธ๊ฐ์ ๊ฐ๊ฒฉ, ๋ฐ์ ํ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ ์ฝ๋ ๊ฐ ๊ทธ๋ฃนํ ๋ฑ์ด ํฌํจ๋๋ค
๐ก ์ํ์ (Horizontal) Formatting
ํ๋์ ์ฝ๋ ํ์์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์งํ๋๋ ํ๋ฆ๊ณผ ๊ด๋ จ๋ ์ฝ๋ ์์ฑ ๊ท์น
๋ค์ฌ์ฐ๊ธฐ, ์ฝ๋ ๊ฐ ๊ฐ๊ฒฉ, ์ฝ๋ ํ์ ๋์ด ๋ฑ์ด ํฌํจ๋๋ค.
5 . Clean Control Structure
Control Structure์ด๋ ์กฐ๊ฑด, ๋ฃจํ, ํ๋ฆ์ ์ ์ดํ๋ ์ ์ธ๋ฌธ์ ๋งํ๋ค. Control Structure๋ ์ฝ๋ ๋ณต์ก๋์ ๊ฐ์ฅ ํฐ ์ํฅ์ ์ฃผ๋ ์์์ด๋ค. ์ค์ฒฉ๋ Control Structure๋ ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ํ ์คํธ ์ฉ์ด์ฑ์ ๋ฎ์ถ๊ณ , ์ฝ๋๋ฅผ ๋ณต์กํ๊ฒ ํ๋ค.
์ด์ ๊ฐ์ ์์ค ์ฝ๋์ ๋ณต์ก๋๋ฅผ ๋ํ๋ด๋ ์งํ๋ก Cyclomatic Complexity๊ฐ ์๋ค. ๋ณต์ก๋๊ฐ ๋ฎ์์๋ก ํ๋ก๊ทธ๋จ์ด ๊ตฌ์กฐ์ ์ผ๋ก ์์ ๋์๋ค๋ ์๋ฏธ์ด๋ฉฐ, ๋ณต์ก๋๊ฐ ๋์์๋ก ํ๋ก๊ทธ๋จ์ด ๋น ๊ตฌ์กฐ์ ์ด๋ฉฐ ๋ถ์์ ํ๋ค๋ ๋ป์ด๋ค. ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ node, edge๋ก ํํํ ๊ทธ๋ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ณ์ฐํ๋ค.
๊ณ์ฐ๋ฐฉ๋ฒ์ ์๋ 2๊ฐ์ง๊ฐ ์๋ค.
๐ก ๊ณ์ฐ๋ฐฉ๋ฒ 1
๋ณต์ก๋ V(G) = edge์ ์ - node์ ์ + 2
๐ก ๊ณ์ฐ๋ฐฉ๋ฒ 2
๋ณต์ก๋ V(G) = ๋ถ๊ธฐ๋ฌธ์ ์ + 1
๐์ฝ๋ํ๋ ์ Java ์น ๊ฐ๋ฐ ์ฒดํ๋จ ํ๋์ผ๋ก ์ ๊ณต๋ฐ์ ๊ฐ์์ ๋๋ค.
๐์ฝ๋ํ๋ ์์์ "SW ์ ์ง๋ณด์์ฑ ํฅ์์ ์ํ Clean Code" ๊ฐ์๋ฅผ ์๊ฐ ํ ์์ฑํ ๊ธ์ ๋๋ค.
๐์ฝ๋ํ๋ ์ ๋ฐ๋ก๊ฐ๊ธฐ ๋งํฌ : https://www.codepresso.kr/
๋๊ธ