๐๏ธ Robert C.Martin์ "Clean code" ์์ฝ
'ํด๋ฆฐ ์ฝ๋'๋ผ๋ ์ ๋ช ํ ์ฑ ์ด ์์ต๋๋ค. ๊ฐ๋ฐ์๋ผ๋ฉด ํ ๋ฒ์ฉ์ ์ฝ๊ฑฐ๋, ์ฌ๋ ค๊ณ ๋ง์๋จน๊ฑฐ๋, ์ค์ณ ์ง๋๊ฐ๋ฉด์ ๋ดค๊ฑฐ๋ ํ๋ ์ฑ ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ต์ฅํ ๋๊บผ์์ ๋ง์๋จน๊ณ ์ฝ๊ธฐ ์ฝ์ง ์์ต๋๋ค. ์ด๋ฒ์๋ ๊ทธ๋ฐ ๋ถ๋ค์ ์ํด(์ ๋ฅผ ์ํด) 'ํด๋ฆฐ ์ฝ๋'๋ฅผ ์์ฝํ ๊ธ์ ๊ฐ์ ธ์์ต๋๋ค. ๐ ์ผ๋ฐ์ ์ธ ๊ท์น 1๏ธโฃ ํ์ค ์ปจ๋ฒค์ ์ ๋ฐ๋ฅด์. * convention: ์ฝ๊ณ , ๊ด๋ฆฌํ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ ์ฝ๋ฉ ์คํ์ผ ๊ท์ฝ 2๏ธโฃ ๊ฐ๋จํ๊ฒ ๋ง๋ค์ด๋ผ. ๋ณต์กํ ๊ฒ์ ์ต๋ํ ์ค์ฌ๋ผ. 3๏ธโฃ ์ฐพ์์ ๋๋ณด๋ค ๋ ๊นจ๋ํ๊ฒ ๋ง๋ค๊ณ ๋ ๋๋ผ. 4๏ธโฃ ํญ์ ๋ฌธ์ ์ ๊ทผ๋ณธ ์์ธ์ ์ฐพ์๋ผ. ๐ ๋์์ธ ๊ท์น 1๏ธโฃ ๋ฐ์ดํฐ๋ฅผ high-level๋ก ์ ์งํ๋ผ. 2๏ธโฃ if/else ๋๋ switch/case ๋ณด๋ค ๋คํ์ฑ์ ์ ํธํ๋ผ. 3๏ธโฃ multi-threading ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๋ผ. 4๏ธโฃ ๊ณผ๋ํ ๊ตฌ์ฑ์ ๋ฐฉ์งํ๋ผ. 5๏ธโฃ ์์กด์ฑ ์ฃผ์ ์ ์ฌ์ฉํ๋ผ. 6๏ธโฃ ํด๋์ค๋ ์ง์ ์ ์ธ ์์กด์ฑ๋ง ์์์ผ ํ๋ค. ๐ ์ดํด๋ ๋์ด๋ ํ 1๏ธโฃ ์ผ๊ด๋๊ฒ ํ๋ผ. ๋น์ ์ด ์ด๋ค ํน์ ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ค๋ฉด, ๋ชจ๋ ๊ฒ๋ค์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ๋ง๋ค์ด๋ผ. 2๏ธโฃ ์ค๋ช ๋ณ์๋ฅผ ์ฌ์ฉํ๋ผ. 3๏ธโฃ ๊ฒฝ๊ณ ์กฐ๊ฑด์ ์บก์ํ ํ๋ผ. 4๏ธโฃ ๊ธฐ๋ณธ ํ์๋ณด๋ค ์ ์ฉ ๊ฐ์ฒด๋ฅผ ์ ํธํ๋ผ. 5๏ธโฃ ๋ ผ๋ฆฌ์ ์ข ์์ฑ์ ํผํ๋ผ. ๊ฐ์ ํด๋์ค์ ๋ค๋ฅธ ๊ฒ์ ์์กดํด์ผ ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋ ๋ฉ์๋๋ฅผ ์์ฑํ์ง ๋ง๋ผ. 6๏ธโฃ ๋ถ์ ์ ์ธ ์กฐ๊ฑด์ ํผํ๋ผ. ๐ ๋ค์ด๋ฐ ๊ท์น 1๏ธโฃ ์๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ผ. 2๏ธโฃ ์๋ฏธ ์๊ฒ ๊ตฌ๋ถํ๋ผ. 3๏ธโฃ ๋ฐ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ผ. 4๏ธโฃ ๊ฒ์ํ๊ธฐ ์ฌ์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ผ. 5๏ธโฃ ๋งค์ง ๋๋ฒ๋ฅผ ์์๋ก ๋ฐ๊พธ์ด๋ผ. *magic number: ์ฝ๋ ์์ ์ ํ ๊ตฌ์ฒด์ ์ธ ์์น ๊ฐ 6๏ธโฃ ์ธ์ฝ๋ฉ์ ํผํ๋ผ. ์ ๋์ด๋ ํ์ ์ ๋ณด๋ฅผ ๋ํ์ง ๋ง๋ผ. ๐ ํจ์ ๊ท์น 1๏ธโฃ ์๊ฒ ๋ง๋ค์ด๋ผ. 2๏ธโฃ ํ๋์ ๊ธฐ๋ฅ๋ง ์ํํ๊ฒ ํด๋ผ. 3๏ธโฃ ์์ ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ผ. 4๏ธโฃ ๋ ์ ์ ์ธ์๋ฅผ ์ฌ์ฉํ๋ผ. 5๏ธโฃ ์ฌ์ด๋ ์ดํํธ๊ฐ ์ผ์ด๋์ง ์๊ฒ ํ๋ผ. * side effect: ์๋์ ๋ชฉ์ ๊ณผ ๋ค๋ฅธ ํจ๊ณผ ๋๋ ๋ถ์์ฉ 6๏ธโฃ ํ๋๊ทธ ์ธ์๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ. ๐ ์ฃผ์ ๊ท์น 1๏ธโฃ ํญ์ ์ฝ๋๋ก ์๋๋ฅผ ํํํ๋ ค๊ณ ์ ์จ๋ผ. 2๏ธโฃ ๊ฐ์ ๋ด์ฉ์ ์ค๋ณตํ์ง ๋ง๋ผ. 3๏ธโฃ ์ธ๋ฐ์๋ ์ก์์ ์ถ๊ฐํ์ง ๋ง๋ผ. 4๏ธโฃ ๋ซ๋ ๊ดํธ์ ์ฃผ์์ ์ถ๊ฐํ์ง ๋ง๋ผ. 5๏ธโฃ ์ฃผ์์ผ๋ก ์ฝ๋๋ฅผ ์ฒ๋ฆฌํ์ง ๋ง๋ผ. ๊ทธ๋ฅ ์ง์๋ผ. 6๏ธโฃ ์๋๋ฅผ ์ค๋ช ํ๋ ์๋ฏธ๋ก ์ฌ์ฉํ๋ผ. 7๏ธโฃ ์๋ฏธ๋ฅผ ๋ช ๋ฃํ๊ฒ ๋ฐํ๋ ์๋ฏธ๋ก ์ฌ์ฉํ๋ผ. 8๏ธโฃ ๊ฒฐ๊ณผ๋ฅผ ๊ฒฝ๊ณ ํ๋ ์๋ฏธ๋ก ์ฌ์ฉํ๋ผ. ๐ ์์ค ์ฝ๋ ๊ตฌ์กฐ 1๏ธโฃ ๊ฐ๋ ์ ๋น ํ์ผ๋ก ๋ถ๋ฆฌํ๋ผ. 2๏ธโฃ ์ฐ๊ด๋ ์ฝ๋๋ ์ธ๋ก๋ก ๊ฐ๊น๊ฒ ์ ์งํ๋ผ. 3๏ธโฃ ๋ณ์๋ฅผ ๊ทธ๋ค์ ์ฌ์ฉ์ฒ์ ๊ฐ๊น๊ฒ ์ ์ธํ๋ผ. 4๏ธโฃ ์ข ์๋ ๋ฉ์๋๋ฅผ ๊ฐ๊น๊ฒ ์ ์งํ๋ผ. 5๏ธโฃ ์ ์ฌํ ๊ธฐ๋ฅ์ ๊ฐ๊น๊ฒ ์ ์งํ๋ผ. 6๏ธโฃ ํจ์๋ฅผ ์๋ ๋ฐฉํฅ์ผ๋ก ์์นํ๋ผ. 7๏ธโฃ ๊ธธ์ด๋ฅผ ์งง๊ฒ ์ ์งํ๋ผ. 8๏ธโฃ ๊ฐ๋ก ์ ๋ ฌ์ ์ฌ์ฉํ์ง ๋ง๋ผ. 9๏ธโฃ ์ฐ๊ด๋ ๊ฒ๋ค์ ์ฐ๊ด์ํค๊ณ ์๋์ ์ผ๋ก ๋น์ฐ๊ด์ฑ์ธ ๊ฒ๋ค์ ์ ๊ฑฐํ๊ธฐ ์ํด ๊ณต๋ฐฑ์ ์ฌ์ฉํ๋ผ. ๐ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ๊นจ์ง ๋ง๋ผ. ๐ ๊ฐ์ฒด์ ์๋ฃ๊ตฌ์กฐ 1๏ธโฃ ๋ด๋ถ์ ๊ตฌ์กฐ๋ฅผ ์จ๊ฒจ๋ผ. 2๏ธโฃ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํธํ๋ผ. 3๏ธโฃ ์ก์ข ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ง ๋ง๋ผ. 4๏ธโฃ ์๊ฒ ๋ง๋ค์ด๋ผ. 5๏ธโฃ ํ ๊ฐ์ง ๊ธฐ๋ฅ์ ํ๊ฒ ๋ง๋ค์ด๋ผ. 6๏ธโฃ ์ธ์คํด์ค ๋ณ์์ ๊ฐฏ์๋ฅผ ์๊ฒ ํ๋ผ. 7๏ธโฃ ๋ฒ ์ด์ค ํด๋์ค๊ฐ ์์ ์ด ์กฐ์ํ๋ ๊ฐ์ฒด์ ์์ฌ์ ์ ๋ชจ๋ฅด๊ฒ ํ๋ผ. 8๏ธโฃ ์ด๋ค ๋์์ ์ ํํ๊ธฐ ์ํด, ๋ฉ์๋์ ์ผ๋ถ ์ฝ๋๋ฅผ ์ ๋ฌํ๋ ๊ฒ ๋ณด๋ค ๋ง์ ๋ฉ์๋๋ฅผ ๋ง๋๋ ๊ฒ์ด ๋ซ๋ค. 9๏ธโฃ ์ ์ ๋ฉ์๋๋ณด๋ค ๋์ ๋ฉ์๋๋ฅผ ์ ํธํ๋ผ. ๐ ํ ์คํธ 1๏ธโฃ ํ๋์ ํ ์คํธ ๋น assert ํ๋ 2๏ธโฃ ์ฝ๊ธฐ ์ฝ๊ฒ. 3๏ธโฃ ๋น ๋ฅด๊ฒ. 4๏ธโฃ ๋ ๋ฆฝ์ ์ผ๋ก. 5๏ธโฃ ๋ฐ๋ณต ๊ฐ๋ฅํ๊ฒ. ๐ ์ฝ๋ ์ค๋ฉ *code smell: ์ฌ๊ฐํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ด ์๋ ์์ค ์ฝ๋์ ํน์ง 1๏ธโฃ ๊ฐ์ง์ฑ. ์ฝ๋๋ฅผ ๋ณ๊ฒฝ์ํค๊ธฐ ์ด๋ ค์. ์์ ๋ณ๊ฒฝ์ด ์ผ๋ จ์ ๋ณํ๋ฅผ ์ผ์ผํฌ ์ ์์. 2๏ธโฃ ์ทจ์ฝ์ฑ. ์์ ๋ณํ ๋ง์ผ๋ก๋ ํ๊ดด๊ฐ ๋ ์ ์์. 3๏ธโฃ ๋ถ๋์ฑ. ๋์ ์ํ ๋๋ฌธ์ ์ฝ๋์ ์ผ๋ถ๋ถ์ ๋ค๋ฅธ ํ๋ก์ ํธ์์ ์ฌ์ฌ์ฉ ํ ์ ์์. 4๏ธโฃ ๋ถํ์ํ ๋ณต์ก์ฑ. 5๏ธโฃ ๋ถํ์ํ ๋ฐ๋ณต. 6๏ธโฃ ๋ถํฌ๋ช ํจ. ์ดํดํ๊ธฐ ์ด๋ ค์ด ์ฝ๋. ๐ฃ ์๋ ๊ฒ๋ณด๋ค ์ด๋ ค์ด ์ค์ฒํ๊ธฐ. ๐ฃ ๋ ์์ธํ ์์์ ์ค๋ช ์ด ๋ณด๊ณ ์ถ๋ค๋ฉด ์ฑ ์ ์ฝ์ด๋ณด์.