๐ ๊ฐ๋ฐ ์์ /ํด๋ฆฐ ์ฝ๋

ํด๋ฆฐ ์ฝ๋(Clean Code) - 14์ฅ, 15์ฅ, 16์ฅ, 17์ฅ
14์ฅ. ์ ์ง์ ์ธ ๊ฐ์ ๐ ๋์ ์ฝ๋๋ณด๋ค ๋ ์ค๋ซ๋์ ๋ ์ฌ๊ฐํ๊ฒ ๊ฐ๋ฐ ํ๋ก์ ํธ์ ์ ์ํฅ์ ๋ฏธ์น๋ ์์ธ๋ ์๋ค. ๋์ ์ผ์ ์ ๋ค์ ์ง๋ฉด ๋๋ค. ๋์ ์๊ตฌ์ฌํญ์ ๋ค์ ์ ์ํ๋ฉด ๋๋ค. ๋์ ํ ์ญํ์ ๋ณต๊ตฌํ๋ฉด ๋๋ค. ํ์ง๋ง ๋์ ์ฝ๋๋ ์ฉ์ด ๋ฌธ๋๋ฌ์ง๋ค. ์ ์ ๋ฌด๊ฒ๊ฐ ๋์ด๋ ํ์ ๋ฐ๋ชฉ์ ์ก๋๋ค. ์๋๊ฐ ์ ์ ๋๋ ค์ง๋ค ๋ชปํด ๊ธฐ์ด๊ฐ๊ธฐ๋ ํ๋ค. ๋๋ฌด ์๋๋ฅด๋ค๊ฐ ์ดํ๋ก ์์ํ ์์ ๋ค์ ์ด๋ช ์ ์ง๋ฐฐํ ์ ์ฑ ์ฝ๋๋ผ๋ ๊ตด๋ ๋ฅผ ์ง์ด์ง๋ค. ๋ฌผ๋ก ๋์ ์ฝ๋๋ ๊นจ๋ํ ์ฝ๋๋ก ๊ฐ์ ํ ์ ์๋ค. ํ์ง๋ง ๋น์ฉ์ด ์์ฒญ๋๊ฒ ๋ง์ด ๋ ๋ค. ์ฝ๋๊ฐ ์ฉ์ด๊ฐ๋ฉฐ ๋ชจ๋์ ์๋ก์๋ก ์ฝํ๊ณ ์ค์ผ ๋ค์ํค๊ณ ์จ๊ฒจ์ง ์์กด์ฑ์ด ์๋ ์์ด ์๊ธด๋ค. ์ค๋๋ ์์กด์ฑ์ ์ฐพ์๋ด ๊นจ๋ ค๋ฉด ์๋นํ ์๊ฐ๊ณผ ์ธ๋ด์ฌ์ด ํ์ํ๋ค. ๋ฐ๋ฉด ์ฒ์๋ถํฐ ์ฝ๋๋ฅผ ๊นจ๋ํ๊ฒ ์ ์งํ๊ธฐ๋ ์๋์ ์ผ๋ก ..

ํด๋ฆฐ ์ฝ๋(Clean Code) - 13์ฅ
13์ฅ. ๋์์ฑ ๐ฆ ๋์์ฑ์ ๊ฒฐํฉ(coupling)์ ์์ ๋ ์ ๋ต์ด๋ค. ์ฆ, ๋ฌด์๊ณผ ์ธ์ ๋ฅผ ๋ถ๋ฆฌํ๋ ์ ๋ต์ด๋ค. 1. ๋์์ฑ๊ณผ ๊ด๋ จ๋ ์ผ๋ฐ์ ์ธ ๋ฏธ์ ๊ณผ ์คํด ๐ง ๋์์ฑ์ ํญ์ ์ฑ๋ฅ์ ๋์ฌ์ค๋ค. ๋์์ฑ์ ๋๋ก ์ฑ๋ฅ์ ๋์ฌ์ค๋ค. ๋๊ธฐ ์๊ฐ์ด ์์ฃผ ๊ธธ์ด ์ฌ๋ฌ ์ค๋ ๋๊ฐ ํ๋ก์ธ์๋ฅผ ๊ณต์ ํ ์ ์๊ฑฐ๋, ์ฌ๋ฌ ํ๋ก์ธ์๊ฐ ๋์์ ์ฒ๋ฆฌํ ๋ ๋ฆฝ์ ์ธ ๊ณ์ฐ์ด ์ถฉ๋ถํ ๋ง์ ๊ฒฝ์ฐ๋ฉ๋ ์ฑ๋ฅ์ด ๋์์ง๋ค. ์ด๋ ์ชฝ๋ ์ผ์์ ์ผ๋ก ๋ฐ์ํ๋ ์ํฉ์ ์๋๋ค. ๋์์ฑ์ ๊ตฌํํด๋ ์ค๊ณ๋ ๋ณํ์ง ์๋๋ค. ๋จ์ผ ์ค๋ ๋ ์์คํ ๊ณผ ๋ค์ค ์ค๋ ๋ ์์คํ ์ ์ค๊ณ๊ฐ ํ์ดํ๊ฒ ๋ค๋ฅด๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฌด์๊ณผ ์ธ์ ๋ฅผ ๋ถ๋ฆฌํ๋ฉด ์์คํ ๊ตฌ์กฐ๊ฐ ํฌ๊ฒ ๋ฌ๋ฆฌ์ง๋ค. ์น ๋๋ EJB ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋์์ฑ์ ์ดํดํ ํ์๊ฐ ์๋ค. ์ค์ ๋ก๋ ์ปจํ ์ด๋๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง, ์ด๋ป๊ฒ ๋์..

ํด๋ฆฐ ์ฝ๋(Clean Code) - 11์ฅ, 12์ฅ
11์ฅ. ์์คํ ๐ก Main ๋ถ๋ฆฌ ์์คํ ์์ฑ๊ณผ ์์คํ ์ฌ์ฉ์ ๋ถ๋ฆฌํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก, ์์ฑ๊ณผ ๊ด๋ จํ ์ฝ๋๋ ๋ชจ๋ main์ด๋ main์ด ํธ์ถํ๋ ๋ชจ๋๋ก ์ฎ๊ธฐ๊ณ , ๋๋จธ์ง ์์คํ ์ ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋์๊ณ ๋ชจ๋ ์์กด์ฑ์ด ์ฐ๊ฒฐ๋์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ ์ด ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๊ธฐ ์ฝ๋ค. main ํจ์์์ ์์คํ ์ ํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ ํ ์ด๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋๊ธด๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ทธ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ๋ฟ์ด๋ค. main๊ณผ ์ ํ๋ฆฌ์ผ์ด์ ์ฌ์ด์ ํ์๋ ์์กด์ฑ ํ์ดํ์ ๋ฐฉํฅ์ ์ฃผ๋ชฉํ๋ค. ๋ชจ๋ ํ์ดํ๊ฐ main ์ชฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ชฝ์ ํฅํ๋ค. ์ฆ, ์ ํ๋ฆฌ์ผ์ด์ ์ main์ด๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋๋ ๊ณผ์ ์ ์ ํ ๋ชจ๋ฅธ๋ค๋ ๋ป์ด๋ค. ๋จ์ง ๋ชจ๋ ๊ฐ์ฒด๊ฐ ์ ์ ํ ์์ฑ๋์๋ค๊ณ ๊ฐ์ ํ๋ค. 11์ฅ ๊ฒฐ๋ก ์์คํ ์ญ์ ๊นจ๋ํด์ผ ํ๋ค. ๊นจ๋ํ์ง ๋ชปํ ์ํคํ ..

ํด๋ฆฐ ์ฝ๋(Clean Code) - 10์ฅ
10์ฅ. ํด๋์ค ๐ ์ง๊ธ๊น์ง ์ฝ๋ ํ๊ณผ ์ฝ๋ ๋ธ๋ก์ ์ฌ๋ฐ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ด์ ์ ๋ง์ท๋ค. ํจ์๋ฅผ ์ฌ๋ฐ๋ก ๊ตฌํํ๋ ๋ฐฉ๋ฒ๊ณผ ํจ์๊ฐ ์๋ก ๊ด๋ จ์ ๋งบ๋ ๋ฐฉ์๋ ๊ณต๋ถํ๋ค. ํ์ง๋ง ์ฝ๋์ ํํ๋ ฅ๊ณผ ๊ทธ ์ฝ๋๋ก ์ด๋ฃจ์ด์ง ํจ์์ ์๋ฌด๋ฆฌ ์ ๊ฒฝ ์ธ์ง๋ผ๋ ์ข ๋ ์ฐจ์ ๋์ ๋จ๊ณ๊น์ง ์ ๊ฒฝ ์ฐ์ง ์์ผ๋ฉด ๊นจ๋ํ ์ฝ๋๋ฅผ ์ป๊ธฐ๋ ์ด๋ ต๋ค. ์ด ์ฅ์์๋ ๊นจ๋ํ ํด๋์ค๋ฅผ ๋ค๋ฃฌ๋ค. ํด๋์ค๋ ์์์ผ ํ๋ค! ์ผ๋ง๋ ์์์ผ ํ๋๊ฐ? ํจ์๋ ๋ฌผ๋ฆฌ์ ์ธ ํ ์๋ก ํฌ๊ธฐ๋ฅผ ์ธก์ ํ๋ค. ํด๋์ค๋ ๋งก์ ์ฑ ์์ผ๋ก ์ธก์ ์ ํ๋ค. ๋จ์ผ ์ฑ ์ ์์น (Single Responsibility Priciple) SRP๋ ํด๋์ค๋ ๋ชจ๋์ ๋ณ๊ฒฝํ ์ด์ ๊ฐ ํ๋, ๋จ ํ๋๋ฟ์ด์ด์ผ ํ๋ค๋ ์์น์ด๋ค. ์ด๋ '์ฑ ์'์ด๋ผ๋ ๊ฐ๋ ์ ์ ์ํ๋ฉฐ ์ ์ ํ ํด๋์ค ํฌ๊ธฐ๋ฅผ ์ ์ํ๋ค. public ..

ํด๋ฆฐ ์ฝ๋(Clean Code) - 8์ฅ, 9์ฅ
8์ฅ. ๊ฒฝ๊ณ ๐ ์์คํ ์ ๋ค์ด๊ฐ๋ ๋ชจ๋ ์ํํธ์จ์ด๋ฅผ ์ง์ ๊ฐ๋ฐํ๋ ๊ฒฝ์ฐ๋ ๋๋ฌผ๋ค. ๋๋ก๋ ํจํค์ง๋ฅผ ์ฌ๊ณ , ๋๋ก๋ ์คํ ์์ค๋ฅผ ์ด์ฉํ๋ค. ๋๋ก๋ ์ฌ๋ด ๋ค๋ฅธ ํ์ด ์ ๊ณตํ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ค. ์ด๋ค ์์ผ๋ก๋ ์ด ์ธ๋ถ ์ฝ๋๋ฅผ ์ฐ๋ฆฌ ์ฝ๋์ ๊น๋ํ๊ฒ ํตํฉํด์ผ๋ง ํ๋ค. ์ด ์ฅ์์๋ ์ํํธ์จ์ด ๊ฒฝ๊ณ๋ฅผ ๊น๋ํ๊ฒ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ๊ณผ ๊ธฐ๊ต๋ฅผ ์ดํด๋ณธ๋ค. Map์ (ํน์ ์ ์ฌํ ๊ฒฝ๊ณ ์ธํฐํ์ด์ค๋ฅผ) ์ฌ๊ธฐ์ ๊ธฐ ๋๊ธฐ์ง ๋ง๋ผ. Map sensors = new HashMap(); Sensor s = (Sensor)sensors.get(sensorId); ์์ ์ฝ๋๋ ์๋๊ฐ ๋ช ํํ ๋๋ฌ๋์ง ์๋ ๊นจ๋ํ์ง ์์ ์ฝ๋์ด๋ค. ์ด๋ฅผ ๊ฐ์ ํ๊ธฐ ์ํด ์ ๋ค๋ฆญ์ค(Generics)๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋ ๊ฐ๋ ์ฑ์ด ํฌ๊ฒ ๋์์ง์ง๋ง Map๊ฐ ์ฌ์ฉ์์๊ฒ ํ์ํ์ง ์์..

ํด๋ฆฐ ์ฝ๋(Clean Code) - 7์ฅ
7์ฅ. ์ค๋ฅ ์ฒ๋ฆฌ ๐ฐ ๋ฌด์ธ๊ฐ ์๋ชป๋ ๊ฐ๋ฅ์ฑ์ ๋ ์กด์ฌํ๋ค. ๋ฌด์ธ๊ฐ ์๋ชป๋๋ฉด ๋ฐ๋ก ์ก์ ์ฑ ์์ ๋ฐ๋ก ์ฐ๋ฆฌ ํ๋ก๊ทธ๋๋จธ์๊ฒ ์๋ค. ํธ์ถ์๋ฅผ ๊ณ ๋ คํด ์์ธ ํด๋์ค๋ฅผ ์ ์ํ๋ผ. // ์ค๋ณต์ด ์ฌํ์ฌ ๋์ ์ฝ๋ ACMEPort port = new ACMEPort(12); try { port.open(); } catch (DeviceResponseException e) { reportPortError(e); logger.log("Device response exception", e); } catch (ATM1212UnlockedException e) { reportPortError(e); logger.log("Unlock exception", e); } catch (GMXError e) { reportPortError(..

ํด๋ฆฐ ์ฝ๋(Clean Code) - 4์ฅ, 5์ฅ, 6์ฅ
4์ฅ. ์ฃผ์ ๐ฟ ๋์ ์ฝ๋์ ์ฃผ์์ ๋ฌ์ง ๋ง๋ผ. ์๋ก ์ง๋ผ. ์ฃผ์์ ์ค๋๋ ์๋ก ์ฝ๋์์ ๋ฉ์ด์ง๋ค. ์ฃผ์์ ์ค๋๋ ์๋ก ์์ ํ ๊ทธ๋ฆ๋ ๊ฐ๋ฅ์ฑ๋ ์ปค์ง๋ค. ์ด์ ๋ ๋จ์ํ๋ค. ํ๋ก๊ทธ๋๋จธ๋ค์ด ์ฃผ์์ ์ ์งํ๊ณ ๋ณด์ํ๊ธฐ๋ ํ์ค์ ์ผ๋ก ๋ถ๊ฐ๋ฅํ๋๊น. ๋ถ์ ํํ ์ฃผ์์ ์์ ์๋ ์ฃผ์๋ณด๋ค ํจ์ฌ ๋ ๋์๋ค. ๋ถ์ ํํ ์ฃผ์์ ๋ ์๋ฅผ ํํนํ๊ณ ์ค๋ํ๋ค. ๋ถ์ ํํ ์ฃผ์์ ๊ฒฐ์ฝ ์ด๋ค์ง์ง ์์ ๊ธฐ๋๋ฅผ ์ฌ์ด์ค๋ค. ๋ ์ด์ ์งํฌ ํ์๊ฐ ์๋ ๊ท์น์ด๋ ์ง์ผ์๋ ์ ๋๋ ๊ท์น์ ๋ช ์ํ๋ค. ์ฃผ์์ ์๋ฏธ๋ฅผ ๋ช ๋ฃํ๊ฒ ๋ฐํ์ผ ํ๋ค. ๊ทธ๋ฆ๋ ์ฃผ์์ ๋ฌ์๋์ ์ํ๋ ์๋นํ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ฃผ์์ด ์ฌ๋ฐ๋ฅธ์ง ๊ฒ์ฆํ๊ธฐ๋ ์ฝ์ง ์๋ค. ์ด๊ฒ์ด ์๋ฏธ๋ฅผ ๋ช ๋ฃํ ๋ฐํ๋ ์ฃผ์์ด ํ์ํ ์ด์ ์ธ ๋์์ ์ฃผ์์ด ์ํํ ์ด์ ์ด๊ธฐ๋ ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ฃผ์์ ๋ฌ ๋๋ ๋ ๋์ ๋ฐฉ๋ฒ์ด..

ํด๋ฆฐ ์ฝ๋(Clean Code) - 1์ฅ, 2์ฅ, 3์ฅ
์ ์ ์ธ์ธํจ์ ๊น๋ค์ด ์๋ค. ์ฑ ์ ๊ฐ๊ฐ์ ํฐ ์ฃผ์ ์ ๋ํด์ 17๊ฐ์ ์ฅ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค. ํด๋น ๊ธ์์๋ ์ฑ ์ ๋ชจ๋ ๋ด์ฉ์ ๋ค๋ฃจ์ง๋ ์๋๋ค. ํ์ฌ ๋์๊ฒ ํ์ํ ๋ด์ฉ์ด๊ฑฐ๋ ๋ค์ ํ๋ฒ ์๊ธฐํด์ผ ํ๋ ์ ๋ค๋ง ๋ค๋ฃฐ ๊ฒ์ด๋ฏ๋ก ์ด ์ ์ ๋ํด์๋ ์ํด๋ฅผ ๊ตฌํ๋ค. 1์ฅ. ๊นจ๋ํ ์ฝ๋ ๐ ์๋ ์ปค๋ํ(Ward Cunningham)์ '๊นจ๋ํ ์ฝ๋๋ ์ฝ์ผ๋ฉด์ ๋๋ ์ผ์ด ์์ด์ผ ํ๋ค'๋ผ๊ณ ๋งํ๋ค. ์ฝ์ผ๋ฉด์ ์ง์ํ ๋๋ก ๋์๊ฐ๋ ์ฝ๋๊ฐ ๊นจ๋ํ ์ฝ๋๋ค. ๊ฐ ๋ชจ๋์ ๋ค์ ๋ฌด๋๋ฅผ ์ค๋นํ๊ณ , ๋ชจ๋์ ์ฝ์ผ๋ฉด์ ๋ค์์ ๋ฒ์ด์ง ์ํฉ์ด ๋ณด์ฌ์ผ ํ๋ค. 2์ฅ. ์๋ฏธ ์๋ ์ด๋ฆ ๐ผ ์ข์ ์ด๋ฆ์ ์ง์ผ๋ ค๋ฉด ๋ง์ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง๋ง ์ข์ ์ด๋ฆ์ผ๋ก ์ ์ฝํ๋ ์๊ฐ์ด ํจ์ฌ ๋ ๋ง๋ค. ์์ฑ์๋ฅผ ์ค๋ณต์ ์ํ ๋๋ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค. ์ถ์์ ์ธ ๊ฐ๋ ํ..