โป ์ด ๊ธ์ ์ฝ๋ํ๋ ์ ์ฒดํ๋จ ํ๋์ ํ๋ฉด์ ๋ง๋ค์ด์ก์ต๋๋ค.
โป SW ์ ์ง๋ณด์์ฑ ํฅ์์ ์ํ Clean Code ๊ฐ์์
๋๋ค.
โป ์ฝ๋ํ๋ ์ ๋ฐ๋ก๊ฐ๊ธฐ
Clean Code ๊ณผ์ ์ ๋ชฉํ
- ์ ์ง๋ณด์์ฑ ๋์ SW์ ์ค์์ฑ์ ์ธ์ํ๋ค
- ์ ์ง๋ณด์์ฑ ๋์ SW๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ ๊ณ ๋ฏผ๊ฑฐ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค
- ์ ์ง๋ณด์์ฑ์ ๋จ์ด๋จ๋ฆฌ๋ Bad Smell์ ๋ํ ๊ฐ์ ์ตํ๋ค
Clean Code ์ ๊ณตํต์ ์๊ฒฌ
- ์ฌ๋์ด ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฝ๋ค
- ๋จ์ํ ํ ๊ฐ์ง ์ญํ ์ ํ๊ณ , ๋ช
ํํ ์ด๋ฆ(ํํ)์ ๊ฐ๊ณ ์๋ค
- ์ค๋ณต์ด ์๋ค
- ํ
์คํธ ์ผ์ด์ค๊ฐ ์๋ค
- ์ดํดํ๊ธฐ ์ฝ๊ณ , ๋ณ๊ฒฝํ๊ธฐ ์ฌ์ด ์ฝ๋
Clean Naming
์ Clean Naming์ด ์ค์ํ ๊น?
- ์ฐ๋ฆฌ๋ ๊ฐ๋ฐ์ ์ฝ 75%์ ์๊ฐ์ ์ฝ๋๋ฅผ ์ฝ๊ณ ์ดํดํ๋๋ฐ ์ฌ์ฉ
- ๋ณ์, ์์, ํจ์, ํด๋์ค, ํ์ผ ๋ฑ SW์ ์ฃผ์ ์์๋ ์ด๋ฆ์ ๊ฐ์ง
- ์ข์ ์ด๋ฆ์ ๋ด๋ถ๋ฅผ ๋ค์ฌ๋ค๋ณด์ง ์์๋ ๋์๊ณผ ๋ชฉ์ ์ ์ฝ๊ฒ ์ดํดํ ์ ์์
- ์ข์ ์ด๋ฆ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์ฝ๋ ์ฌ๋์ ์ธ์ง์ ๋ถํ๋ฅผ ์ต์ํ ๊ฐ๋ฅ
Clean Naming ์์น
- Funtion, Class ์ญํ ์ด ๋ช
ํํ๋ฉด Naming๋ ๋ช
ํํด ์ง๋๋ค
- ๋ถํ์ํ ์ ๋ณด/๋ฐ๋ณต์ ์ ๊ฑฐํด์ผ ํจ
- ์ค์๋ง(์ฝ์ด)๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์
- ๊ท์น๊ณผ ์ผ๊ด์ฑ์ ์ค์ํฉ๋๋ค
- ๋๋ฃ์ ์์
Clean Code : Summary
- SW์์ง๋์ด๋ Code๋ฅผ ์ฝ๊ณ ์ดํดํ๊ณ ์์ ํ๋๋ฐ ๋๋ถ๋ถ์ ์๊ฐ์ ์ฌ์ฉ
- SW ์ ์ง๋ณด์๋ฅผ ํจ์ธ์ ์ผ๋ก ํ๊ธฐ ์ํด์๋ ๋์ ๊ฐ๋
์ฑ์ด ํ์
- ์ดํดํ๊ธฐ ์ฌ์ด ์ข์ ์ด๋ฆ์ ์ฝ๋ ์ฌ๋์ ์ธ์ง์ ๋ถํ๋ฅผ ์ต์ํ ์ํด
- SW ๋ชจ๋ ์์๋ค์ ์ข์ ์ด๋ฆ ํ์
- Variable / Constant
- Method / Function
- Class / File
- ๊ฐ์ฅ ์ค์ํ ๊ฒ์ "์ด ์ด๋ฆ์ด ๋ด ๋๋ฃ๊ฐ ์ฝ๊ฒ ์ดํด ํ ์ ์์๊น?" ๋ผ๋ ์ง๋ฌธ
- ๋๋ฃ๋ค๊ณผ ํจ๊ปํ๋ ์ง์์ ์ธ ๊ฐ์
Clean Method
Clean Method
- Method / Function์ SW์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๋ชจ๋
- Method๋ฅผ ํธ์ถํ๋ ์ฌ๋์ด ์ฌ์ฉํ๊ธฐ ์ฉ์ด ํด์ผ ํจ
- Method๋ฅผ ์ ์ง๋ณด์ ํ๋ ์ฌ๋์ด ์ดํดํ๊ณ , ๋ณ๊ฒฝํ๊ธฐ ์ฉ์ดํด์ผ ํจ
- Method๋ฅผ ์ ์ง๋ณด์ ํ๋ ์ฌ๋์ด ํ
์คํธ ํ๊ธฐ ์ฉ์ดํด์ผ ํจ
Clean Method Principles
- ๊ฐ๋ฅํ ์ถฉ๋ถํ ์์์ผ ํ๋ค
- ํ ๊ฐ์ง๋ฅผ ํด์ผํ๋ค. ๊ทธ ํ๊ฐ์ง๋ฅผ ์ํด์ผ ํ๋ค
- ํ
์คํธ ๊ฐ๋ฅํด์ผ ํ๋ค
- ์ค๋ณต์ด ์์ด์ผ ํ๋ค
Clean Method Parameter ์์น
- Method๋ฅผ ํธ์ถํ๋ ์ฌ๋์ ์ธ์ง์ ๋ถํ๋ฅผ ์ต์๋ก ๋ง๋ค์ด ์ฃผ์ด์ผ ํจ
- Method๋ฅผ ํธ์ถํ ๋๋ง๋ค ๋ด๋ถ ์ฝ๋๋ฅผ ๋ณด๊ฑฐ๋ API ๋ฌธ์๋ฅผ ๋ณด์ง ์๊ฒํด์ผํจ
- Parameter์ ๊ฐ์๋ ๊ฐ๋ฅํ ์ ์ด์ผ ํจ
Clean Method : Summary
- Method๋ฅผ ํธ์ถํ๋ ์ฌ๋์ด ์ฌ์ฉํ๊ธฐ ์ฉ์ดํด์ผ ํจ
- Method๋ฅผ ์ ์ง๋ณด์ ํ๋ ์ฌ๋์ด ์ดํดํ๊ณ , ๋ณ๊ฒฝํ๊ธฐ ์ฉ์ดํด์ผ ํจ
- Method๋ฅผ ์ ์ง๋ณด์ ํ๋ ์ฌ๋์ด ํ
์คํธ ํ๊ธฐ ์ฉ์ดํด์ผ ํจ
Clean Method Principles : Summary
- ๊ฐ๋ฅํ ์ถฉ๋ถํ ์์์ผ ํ๋ค
- ํ ๊ฐ์ง๋ฅผ ํด์ผํ๋ค. ๊ทธ ํ๊ฐ์ง๋ฅผ ์ํด์ผ ํ๋ค
- ํ
์คํธ ๊ฐ๋ฅํด์ผ ํ๋ค
- ์ค๋ณต์ด ์์ด์ผ ํ๋ค
Clean Method๋ฅผ ์ํด์ : Summary
- ์ ์ Parameter ๊ฐ์
- ๋ช
ํํ Clean Name
- ์์ ํฌ๊ธฐ
- ๋ช
ํํ ์ญํ
- ์ค๋ณต ์๋ ์ํ
- ๋์ ํ
์คํธ ์ปค๋ฒ๋ฆฌ์ง, ํ
์คํธ ์ฉ์ด์
Clean Method๋ ํ๋ฃจ์์นจ์ ๋ง๋ค์ด์ง์ง ์๋๋ค : Summary
- ์ถฉ๋ถํ ์ข์์ง์ ๋ํ ์ง์์ ์ธ ์์ฌ, ์ง๋ฌธ ๊ทธ๋ฆฌ์ ๊ฐ์
- ์ข์ Method์ ๊ธฐ์ค์ ๋ํ ์ด๋ฆฐ ํ ๋ก ๊ณผ ๊ทธ๋ก ๋ง๋ค์ด์ง๋ ์ปจ์ผ์์ค
- ๋ชจ๋ ๋๋ฃ๋ค์ด ํจ๊ปํ๋ ์ฝ๋ ํ์ง ๊ฐ์ ๋ฌธํ
- Comment๋ Code์ ๋ํ ์ฌ๋์ด ์์ ์ ์๋ ๋ถ๊ฐ ์ค๋ช
- ์ฌ๋์ด Code๋ฅผ ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๊ฒ ํ๋ ๊ฒ์ด ๋ชฉ์
- ์ผ๋ฐ์ ์ผ๋ก Compiler/Interpreter๋ Comment๋ฅผ ์คํํ์ง ์๊ณ ๋ฌด์
- Comment๋ ํ์์
์ด๋ค
- Comment๋ ๋๋ถ๋ถ์ ์ํฉ์์ ์ฌ์ฉํ์ง ๋ง์์ผ ํ๋ค
- ๊ทธ๋ฌ๋ Comment๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๋ช๊ฐ์ง ์์ธ์ํฉ์ด ์๋ค
- Comment๋ก ๋ถ๊ฐ ์ค๋ช
์ด ํ์ํ๋ฉด Code๊ฐ ์ถฉ๋ถํ ์๋ฏธ ์์ง ๋ชปํ๋ค๋๊ฒ
- ์๋ฏธ์๋ ์ด๋ฆ, ๋ช
ํํ Code๋ ์ด๋ ต๊ณ , Comment๋ ์ฌ์
- Comment์ ์์งํ๊ธฐ ๋ณด๋ค ์๋ฏธ์๋ Code๋ฅผ ์์ฑํ๋ ค๋ ๋
ธ๋ ฅ์ด ํ์
- ์ฒ์ ์ ๊ท ์ฝ๋๋ฅผ ์์ฑํ ๋๋ Comment๋ ์ ์ฑ์ค๋ฝ๊ฒ ์์ฑ
- Code ๊ฐ ๋ฐ๋๋ฉด? Comment๋ ํญ์ ์ต์ ์ ๋ณด๋ก ์์ ํ๋๊ฐ?
- Comment์ ์ ๋ณด๋ ์๋ชป๋, ์ค๋๋ ์ ๋ณด๋ฅผ ๋ด๊ณ ์์ ๊ฐ๋ฅ์ฑ ๋์
- Code๋ก ์๋ฏธ๋ฅผ ํํํ๊ณ ์๋ ๊ฒฝ์ฐ
- ์ฝ๋์ ์์ ์ด๋ ฅ์ ํํํ๋ Comment
- ํ์ ๊ด๋ฆฌ ๋๊ตฌ๋ก ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ๋ด์ ์ ์์
- Comment๋ฅผ ์ฌ์ฉํ์ง ์๋๊ฒ
- ์ ์๊ถ ๋ฑ์ ๋ช
์ํ๋ Comment
- ๋ค์๊ฐ ์ฌ์ฉํ๋ Open API์ ๋ฌธ์ํ
- ์ด๋ฆ๋ง์ผ๋ก ์ถฉ๋ถํ ์๋ฏธ๋ฅผ ์ ๋ฌํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ
- To Do Comment
- Comment๋ ๊ธฐ๋ณธ์ ์ผ๋ก Bad Smell
- Code๋ก ์ถฉ๋ถํ ์๋ฏธ๋ฅผ ์ค๋ช
ํ์ง ๋ชปํจ
- ๋ถํ์ํ, ์ค๋ณต์ ์ธ ์ ๋ณด๋ฅผ ์ ๊ณต
- ์๋ชป๋ ์ ๋ณด๋ฅผ ์ ๊ณต
- Comment๋ฅผ ๊ฐ๊ธ์ ํผํ๊ณ Code๋ก ์๋ฏธ๋ฅผ ํํํด์ผ ํจ
- Clean Comment ์์ธ ์ํฉ์๋ ์ ์ ํ Comment์ฌ์ฉํ์
๋ฌธํ์ ํ๋ก๊ทธ๋๋ฐ
- Donald Knuth์ ์ํด ์ฃผ์ฅ๋ ๊ฐ๋
- ์ฝ๋๋ ์ฌ๋์ด ์ฝ๋๋ก ๋ง๋ค์ด์ง๋ ๊ฒ์ด ์ฐ์
- ๋ฌธํ ์ํ์ ์ฝ๋ ๊ฒ์ฒ๋ผ ์ฝ๋๋ฅผ ์ฝ์์ ์๋๋ก ๋ง๋ค์ด์ ธ์ผ ํจ
- ํ๋ก๊ทธ๋๋ฐ์ด๋ ์ปดํจํฐ๊ฐ ์ด๋ค ๋์์ ํ๊ธฐ ์ํ๋์ง "์ฌ๋์๊ฒ ์ค๋ช
"ํ๋ ํ์
- Code Formatting์ ์ฝ๋์ ๊ฐ๋
์ฑ๊ณผ ์ดํด๋๋ฅผ ๋์ฌ์ฃผ๋ ์ผ๋ จ์ ์์
- ์์ง์ Formatting๊ณผ ์ํ์ Formatting ์์น์ผ๋ก ๋ถ๋ฅ๋จ
- ์ฝ๋์ ์์์ ์๋๋ก ์งํ๋ ํ๋ฆ๊ณผ ๊ด๋ จ ๋๋ ์ฝ๋ ์์ฑ ๊ท์น
- ์ฝ๋ ๋ผ์ธ๊ฐ ๊ฐ๊ฒฉ, ๋ฐ์ ํ ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ ์ฝ๋ ๊ฐ ๊ทธ๋ฃนํ ๋ฑ์ด ํฌํจ
- ์ถ์ํ์ ์์ค ์์๋๋ก ์ฝ๋๋ฅผ ๋ฐฐ์น
- ์๋ก ๋ค๋ฅธ ๊ฐ๋
์ ๋ถ๋ฆฌ
- ์ ์ฌํ ๊ฐ๋
์ ๋ชจ์ ๋์
- ๊ด๊ณ์๋ ๋ด์ฉ์ ๊ฐ๊น์ด ํ์ ์์ฑ
- ํ๋์ ์ฝ๋ ํ์์ ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ์งํ๋ ํ๋ฆ๊ณผ ๊ด๋ จ๋ ์ฝ๋ ์์ฑ ๊ท์น
- ๋ค์ฌ์ฐ๊ธฐ, ์ฝ๋ ๊ฐ ๊ฐ๊ฒฉ, ์ฝ๋ ํ์ ๋์ด ๋ฑ์ด ํฌํจ
- ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ ๊ทน์ ์ผ๋ก ํ์ฉ
- ํ์ค์ ๊ธด ์ฝ๋๋ฅผ ์ฌ๋ฌ์ค์ ์งง์ ์ฝ๋๋ก ๋ถ๋ฆฌ
- ์ํ์ ๋ ฌ์ ์ค์ํ์ง ์์
- ์ข์ ์ฝ๋๋ ๋ฌธํ ์ํ๊ณผ ๊ฐ์ด ์ฝ์์ ์์ด์ผํจ
- Formatting์ ๋์์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ผ๋ ๊ฐ๋
์ฑ์๋ ํฌ๊ฒ ์ํฅ์ ๋ฏธ์นจ
- ์กฐ์ง ๋ด ๊ท์น์ ์ ํ์ผ ํ๊ณ , ๋ชจ๋ ๊ฐ๋ฐ์๋ ๊ท์น์ ๋ฐ๋ผ Formattingํด์ผํจ
- ์ฝ๋ ๋ฆฌ๋ทฐ์ ์ ์ ๋ถ์ ๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ Formatting์ ์ง์์ ์ผ๋ก ํ์ธํด์ผ ํจ
Clean Control Structures
Control Structures๋?
- ์กฐ๊ฑด ๋ฃจํ, ํ๋ฆ์ ์ ์ดํ๋ ์ ์ธ๋ฌธ
Control Structures ์ Clean Code
- Control Structures๋ ์ฝ๋ ๋ณต์ก๋์ ๊ฐ์ฅ ํฐ ์ํฅ์ ์ฃผ๋์์
- ํนํ ์ค์ฒฉ๋ Control Structures๋ ์ฝ๋ ๊ฐ๋
์ฑ, ํ
์คํธ ์ฉ์ด์ฑ ๋จ์ด์ง๊ณ , ๋ณต์ก๋๋ ์ฌ๋ผ๊ฐ
Clean Control Structures
- ๊ฐ๋ฐ ์ด๊ธฐ๋ถํฐ ์ฝ๋ ๋ณต์ก๋๋ฅผ ๊ณ ๋ คํ Control Structures์ ์ค๊ณ๊ฐ ์ค์
- ์ฝ๊ธฐ ์ฌ์ด ์กฐ๊ฑด๋ฌธ
- Fail Fast!, Early Return!
- ์ต๋ํ ๊ธ์ ์ผ๋ก ํํํ๋ผ
Clean Control Structures : Summary
- Control Structures๋ ์ ๊ฒฝ ์ฐ์ง ์์ผ๋ฉด ๋ณต์ก๋๋ฅผ ์ฆ๊ฐ์ํด
- ๊ฐ๋
์ฑ์ ์ฌ๊ฐํ๊ฒ ์ ํดํ๊ณ
- ํ
์คํธ๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ฌ
- Control Structures ์ต๋ํ ์ดํดํ๊ธฐ ์ฝ๊ณ ์ค์ฒฉ์ด ์ ์ ๋ฐฉํฅ์ผ๋ก ์ค๊ณ, ์์ฑ
- Fail Fast!, Early Return!๋๋ Method ์ถ์ถ ๊ธฐ๋ฒ์ผ๋ก ๊ฐ๋
์ฑ ํฅ์์ด ๊ฐ๋ฅํ์ง ํญ์ ํ์ธํด์ผํจ
Clean Code๋ฅผ ์ํ Code Refactoring
Refactoring
- SWํ์ง ํฅ์์ ๋ชฉ์ ์ผ๋ก ๊ธฐ๋ฅ์ ๋ณ๊ฒฝ ์์ด, ๋ด๋ถ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ๋ ๊ธฐ์
Refactoring ์ฒ ํ
- ํฐ๋๋ชจ์ ํ์ฐ
- ๊ธฐ์กด ๊ธฐ๋ฅ์ ๋ณ๊ฒฝ์ ๊ฐํ์ง ์๋ ์์ค์ ์์ฃผ ์์ ์ฝ๋ ๊ฐ์ ์์
- ํ๋ ํ๋์ Refactoring์ ๋๋ฌด ์์์ ํฐ์๋ฏธ ์์
- ์์ ๊ฐ์ ์ด ์์ฌ ์๋ฏธ์๋ ํ์งํฅ์์ด ๊ฐ๋ฅ
Code Bad Smell
- Clean ํ์ง์ ์ ํด ํ ์ ์๋ ๊ฐ๋ฅ์ฑ์ ๊ฐ์ง ์ฝ๋๊ฐ ๋ณด๋ด๋ ๊ฒฝ๊ณ ์ธ์ธ
- Code Bad Smell์ ๊ฒฐํจ์ด๋ ์๋ฌ๋ ์๋
- 22๊ฐ์ Code Bad Smell ์ข
๋ฅ
Refactoring ์นดํ๋ก๊ทธ
- Code Bad Smell์ ๋ํ ๋ค์ํ ๊ฐ์ ์ ๋ต๋ค์ ๋ชจ์
- Refactoring์ ์์ฃผ ์์ ๊ฐ์ ํ๋
- ๋๋ฌด ๋น์ฐํ๋ค๊ณ ํ๋จ ๋ ๋งํ ์ ๋ต๋ค๋ ๋ค์ ์กด์ฌ
Code Refactoring : Summary
- ReFacoring ์ ๋งค์ผ ์ง์์ ์ผ๋ก ์ํํ๋ ์์ ์ฝ๋ ๊ฐ์ ์์
- ํฐ๋๋ชจ์ ํ์ฐ
- ๊ฐ์ ํด์ผํ ์ฝ๋์ Bad Smell์ ๋งก๋ ๋ฏผ๊ฐํ ์ฝ๋ฅผ ๊ฐ๋๋ก ํ๋ จํด์ผํจ
- ์ ๋ฆฌ๋ Code Bad Smell๊ณผ Refactoring Catalog๋ฅผ ์ฐธ๊ณ ํ๋๊ฑด ์ข์ ์ต๊ด