2021/08/05
ํด๋ฆฐ ์ฝ๋ (Clean Code)
๋ ๋ฌด์์ผ๊น? ์์ด ํด์ ๊ทธ๋๋ก ๊น๋ํ ์ฝ๋, ๊นจ๋ํ ์ฝ๋ ๋ผ๋ ๋ป์ด๋ค. ๊ทธ๋ผ ๊น๋ํ ์ฝ๋๋ ๋ฌด์์ผ๊น? ์ด ์ง๋ฌธ์ ์์ ๋ง์ ๋ต์ด ๋์ค์ง ์๋๋ค๋ฉด ์ด ์ฑ
์ ๊ผญ ์ฝ์ด๋ด์ผ ํ๋ค. ์์ ๋ง์ ๋ต์ด ๋์ค๋๋ผ๋ ์ฝ์ด๋ด์ผ ํ๋ค.
๋ถ๋ช ์์ ์ด ์ด ์ฝ๋์ธ๋ฐ ๋ฉฐ์น ์ด ์ง๋๋ฉด ์์๋ณด์ง ๋ชปํด์ ์ด ํ์ผ ์ ํ์ผ ์ฎ๊ฒจ๋ค๋๋ฉฐ ๊ณ ์ํ๋ ๊ฒฝํ์ด๋ผ๋ฉด ๊ฐ๋ฐ์์ธ ์ด์ ๋ชจ๋๊ฐ ๊ฐ์ง ๊ฒฝํ์ผ ๊ฒ์ด๋ค.
๋ํ ํจ์์ ๋ก์ง์ ์ง๋ฉฐ ์์ ์ฃผ์์ผ๋ก ์ฃผ์ ์ฃผ์ ์ค๋ช ์ ์จ๋์ ๊ฒฝํ๋ ์์ ๊ฒ์ด๋ค.
ํ์ฐธ์ ๊ฑฐ์ฌ๋ฌ ์ฌ๋ผ๊ฐ ์ฝ๋ฉ ๋ด๋น ์์ ์ผ ๋๋ ๋ณ์์ ํจ์์ ์๋ณ์๋ช
์ a
, b
, aa
์ด๋ฐ ์์ผ๋ก ์ง์ ๋๋ ์์ ๊ฒ์ด๋ค. ์์ง๋ ์ด๋ฌ๋ฉด ์ ๋๋ค!!
ํด๋ฆฐ ์ฝ๋๋ ์ด๋ฌํ ๊ฒฝํ์ ์ค์ฌ์ค์ผ๋ก์จ ๋ ์ข์ ๊ฐ๋ ์ฑ๊ณผ ๋น ๋ฅธ ์ดํด๋ฅผ ๋๋๋ค.
์๋
20๋
๋์ ์งํํ๋ ๋ค์ด๋ฒ ๊ฐ๋ฐ์ ๊ณต์ฑ ์คํ ํด๋์ค
์์ ์ด๋ฐ ์ง๋ฌธ์ด ์ฌ๋ผ์์๋ค.
๊ฐ๋ฐ์๋ก์ ๊ผญ ์ฝ์ด์ผ ํ๋ ์ฑ ์ด ์๋ค๋ฉด?
๊ธฐ์ต๋๋ ๋ต๋ณ์ด 2๊ฐ์ธ๋ฐ ๊ทธ ์ค ํ๋๋
๋๋จธ์ง ํ๋๋
ํ์์๋ ๊นจ๋ํ ์ฝ๋, ๊น๋ํ ์ํคํ ์ฒ์ ๊ด์ฌ์ด ๋ง์๋ ๋๋ ๊ทธ๋ ๊ณง๋ฐ๋ก ํด๋ฆฐ ์ฝ๋๋ฅผ ์ฃผ๋ฌธํ๋ค.
์ ๊ณต ์์ ์ ์ด๋ฏธ ํ๋ฐฐ๋ค ๋ค ์ค๋ฒ๋ ธ๋คโฆ
์๋ฐ ๊ฐ๋ฐ์๊ฐ ์๋๋ผ ์ ์๊ฐ ๊ฒฝ๊ณ ํ๋๋ก ์ฑํฐ2๊ฐ ๋๋ฌด ์ด๋ ต๊ธด ํ๋คโฆ ๋ค๋ฅธ ์ธ์ด ๊ฐ๋ฐ์๋ผ๋ฉด(๋์ฒ๋ผ) 2์ฅ์ ๋น ๋ฅด๊ฒ ํ์ด๋ ๋ ๊ฑฐ ๊ฐ๋ค.
์ฌ์ค ๋ง์ ์ฌ๋๋ค์ด ํด๋ฆฐ ์ฝ๋๋ฅผ ์ ๋ฆฌํด๋์๊ณ , ๊ณต๊ต๋กญ๊ฒ๋ ๋๋ ์ค๋ณต์ ์ซ์ดํ๋ ๊ฐ๋ฐ์๋ผ ๊ทธ๋ค๊ณผ ๊ฐ์ ์ค๋ช ์ด๋ ํด์์ ํ๊ณ ์ถ์ ๋ง์ด ์๋ค.
๊ทธ๋์ ํด๋ฆฐ ์ฝ๋์ ๋ง์ง๋ง ์ฑํฐ ํด๋ฆฌ์คํฑ
์ฒ๋ผ ๊ฐ๋จ๋ช
๋ฃํ๊ฒ ์ด๊ฒ๋งํผ์ ์ง์ผ์คฌ์ผ๋ฉด ํ๋ ๊ท์น๋ค์ ๋์ดํด ๋ณด๊ธฐ๋ก ํ๋ค.
camelCase
, PascalCase
, snake_case
๋ฑ์ ๊ฐ ์ธ์ด๋ณ ๊ธฐ๋ฒ์ ์ ์งํค์.๋จ์ผ ์ฑ
์ ์์น
์ ๊ธฐ์ตํ์. ํจ์์ ์ด๋ฆ์ด ๋ณต์กํด์ง๋ค๋ฉด ์์น์ ๊นจ๊ณ ์๋ ๊ฒ์ด๋ค.boolean
ํ์
์ ๋๊ฒจ์ผ ํ๋ค๋ฉด ์๋ชป๋ ๋ก์ง์ ๊ฐ์ง๊ณ ์์ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ค. ํจ์๋ฅผ ์ชผ๊ฐ๋ผ.Call by Reference
๋ฅผ ์กฐ์ฌํ๊ณ , ๋ถ์ ํจ๊ณผ๋ฅผ ํผํด๋ผ.Comment
๋ ์ฝ๋ฉํธ(์ฃผ์)์ผ๋ฟ ์ฝ๋๊ฐ ์๋๋ค.null
์ ๋ฐํํ์ง๋ ์ ๋ฌํ์ง๋ ๋ง๋ผ.try-catch
๋ฌธ๊ณผ ์นํด์ ธ๋ผ.ํ
์คํธ
๋ฅผ ์ง์ฌ์ผ๋ก ์๊ฐํด๋ผ.๊ธฐ์ต๋๋ ์ค์ํ ๊ท์น๋ค์ ์์ ๊ฐ๋ค. ๋ณ์๋ช ๊ณผ ํจ์ ํํธ๊ฐ ๊ธธ์ด๋ณด์ด๋ ๊ฑด ์ฐฉ๊ฐ์ด๋ค. ๋ชจ๋ ์ค์ํ๋ค. ๋จ์ง ๋ด๊ฐ ์ ๋ ๊ฐ์ ๋ ์ ์ฑ์ ์์์ ๊ทธ๋ ๋ค.
๋๋ ๋๋ฆ ๋๋ง์ ๊ท์น์ ๊ฐ์ง๊ณ ์์๋ค. ํจ์๋ช
๊ณผ ์ปดํฌ๋ํธ๋ช
์ ๋ ๋จ์ด ์ด์์ผ๋ก, ์ซ์๋ ๊ผญ ์์๋ก ์ ์ธํ์ฌ ์ด๋ฆ์ ๋ถ์ฌ์ฃผ๊ธฐ, ๋ณ์๋ ๋ณ์๋ผ๋ฆฌ ํจ์๋ ํจ์๋ผ๋ฆฌ ๋ฌถ์ด์ฃผ๊ธฐ, ๋งค๊ฐ๋ณ์๋ก boolean
์ ์ ํด์ฃผ์ง ์๊ธฐ, ์ฃผ์ ํผํ๊ธฐ ๋ฑ๋ฑ
์ด ์ฑ
์ ๋ณด๊ณ ๋ฐ๋๊ฒ ๋ ๋๋ง์ ๊ท์น๋ ์๋ค. ์๋ฅผ ๋ค์ด Person
์ interface
๋ฅผ ์์ฑํ๋ค๊ณ ํ ๋โฆ IPerson
์ด๋ฐ ์์ผ๋ก ์์ ์ ๋ง์ด ์ง์์๋ค. ํ๋ ์ฑ
์ ๋ฐ๋ฅด๋ฉด ์ํฐํจํด์ด๋ผ๊ณ ํ๋ค. ๋ค๋ฅธ ๊ฒ๋ค๋ ์๋ค. LayoutComponent
, CarClass
์ฒ๋ผ ๋ค์ ์ฑ๊ฒฉ์ ๋ถ์ฌ์ฃผ์๋๋ฐ, ์ด๊ฒ๋ํ ์ํฐํจํด์ด์๋ค.
์ด์ ๋ถํฐ ๊ณ ์ณ๋๊ฐ๋ฉด ๋๋ค.
์ ๋ง ๊ฐ๋ฐ์ ๋ชจ๋๊ฐ ์ฝ์ด๋ด์ผ ํ ์ฑ ์ด๋ผ๋ ์๊ฐ์ด ๋ ๋ค. ๋๋ ๋์๋ฆฌ๋ฅผ ์ด์ํ๋ฉฐ ๋ง์ ํด๋ฆฐํ์ง ์์ ์ฝ๋๋ค์ ๋ณด์์๋ค. ์ด๋ฌํ ์ฝ๋๋ค์ ์ ์ง๋ณด์๋ฅผ ํ๋ค๊ฒ ํ ๋ฟ๋๋ฌ, ์ค๋ฅ๋ฅผ ์ผ์ผํค๋ ์ ์ฌ์ ์ฃผ๋ฒ์ด๋ค.
ํ์๋ค์ ์ค๋ฅ๋ฅผ ์ก์์ฃผ๋ฉฐ ๋ฌด์จ ์๋๋ก ์ด๋ ๊ฒ ์งฐ๋์ง ๋ง์ด ๋ฌผ์ด๋ณด๊ณค ํ๋คโฆ
์ด ์ฑ ์์ ๋น ์ง์ง ์๋ ๋ช ์ธ์ด ์๋ค. ๋ฐ๋ก
์ ์ ๋ํ ์ผํจ์ ๊น๋ ๋ค.
์ธ๋ฐ, ์ด๋ค ํด๋ฆฐ ์ฝ๋ ๊ด๋ จ ๊ธ์ ๋ณด๋ ๋น ์ง์ง ์๋ ๊ฒฉ์ธ์ด๋ค.
์ฌ๊ธฐ์ ๋ฆฌํฉํ ๋ง
์ ์ ์์ ๋ง๋ ์ธ์ฉํ๊ณ ์ถ๋ค.
๊ธฐ๊ณ๊ฐ ์ดํดํ ์ ์๋ ์ฝ๋๋ ๋ฐ๋ณด๋ผ๋ ์์ฑํ ์ ์์ง๋ง, ์ธ๊ฐ์ด ์ดํดํ ์ ์๋ ์ฝ๋๋ ์ค๋ ฅ์๋ ํ๋ก๊ทธ๋๋จธ๋ง์ด ์์ฑํ ์ ์๋ค.
์ฐ๋ฆฌ๋ โ์ ์ปดํจํฐ์์๋ ๋์๊ฐ๋๋ฐ์โ ๋ผ๊ณ ๋ณ๋ช ํ๋ ๊ฐ๋ฐ์๋ฅผ ์ด๋ค ์์ ์ผ๋ก ๋ฐ๋ผ๋ณด๋์ง ์๊ณ ์๋ค. ๋ถ๋ ์๊ธฐ ์์ ์ โ์ ๋จธ๋ฆฌ๋ก๋ ์ดํด๋๋๋ฐ์โ ๋ผ๊ณ ๋ณ๋ช ํ๋ ์ฌ๋์ผ๋ก ๋ง๋ค์ง ๋ง์.
๊ฐ๋ฐ์๋ฅผ ์ํ ๊ต์ ์์ ์ด ์๋๋ค. ์์ ํ๊ณ ๊ณต๋ตํด์ผํ๋ ์ฑ ์ด๋ค!