์๋
ํ์ธ์ Javarashevites! ์ด ๊ธ์ ๋ก๋ฒํธ ๋งํด(Robert Martin)์ ใํด๋ฆฐ ์ฝ๋(Clean Code)ใ๋ผ๋ ์ฑ
์ ๋ํ ๋ฆฌ๋ทฐ์
๋๋ค. ์ฐ๋ฆฌ๋ ํจ๊ป ์ฝ๋๋ฅผ ๊ฐ์ ํ๊ณ ์ต์ ํํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ณ ๋ง์ง๋ง์๋ ์์ง๋ง ํฅ๋ฏธ๋ก์ด ์์
์ด ์ฌ๋ฌ๋ถ์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
๋งค์ผ ์ฝ๋ ํธ์ง๊ธฐ๋ฅผ ์ด๋ฉด ์๋ง์ ํด๋์ค, ํจ์, ๋ณ์๋ฅผ ์ ํ๊ฒ ๋ฉ๋๋ค. ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ฝ๋๊ฐ ์ฒ์๋ถํฐ ์์ฑ๋๊ณ , ํ ๋ฒ ์์ฑ๋์์ผ๋ฉฐ, ์ค์ด ๊ฑฐ์ ์๊ณ , ํผ์ ์์
ํ๊ณ , ํธ์ง์ด ์๊ณ ๊ณ ๊ฐ์ ์ถ๊ฐ ์ง์์ด ์๋ ๊ฒฝ์ฐ์
๋๋ค. ํ์ง๋ง! ์ค์ต์์ ์ ์ ์๋ฏ์ด, ์ด๋ฐ ์ผ์ด ์ผ์ด๋์ง ์๋๋ค๋ ๊ฒ์ ๊ทํ๋ ์ดํดํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์ด๋ป๊ฒ๋ ์ฐ๋ฆฌ ํ ๊ตฌ์ฑ์๋ค๊ณผ ์ํธ ์์ฉํ๊ณ "ํ๋" ์ฝ๋๋ฅผ ์ ์งํ๋ฉฐ ์ ํ์ ์๋ฐฑ๋ง ์ค๋ก ๊ตฌ๋ฌธ ๋ถ์ํด์ผ ํฉ๋๋ค. ์ ๋ ํ๋ จ ๋๋ฃ๋ค๋ก๋ถํฐ โ์ด ์ฝ๋๋ ์ ๊ฐ ์์ฑํ ๊ฒ์ด๋ฏ๋ก ๋๊ตฌ์๊ฒ๋ ๋ณด์ฌ์ฃผ์ง ์์ ๊ฒ์
๋๋คโ๋ผ๋ ๋ต๋ณ์ ์์ฃผ ๋ค์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ฝ๋์ ๋ํ ๋์๋ง ์์ฒญ์ ๋ณด๋ฉด ๋งค์ฐ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฝ๋๋ค. ๊น์ด ํ๊ณ ๋ค๊ณ ์ดํดํ๋ ์๊ฐ(๋๋๋ก ์ ๋ง ๊ธด ์๊ฐ) ๊ทธ ์ฌ๋์ด ๋์๊ฒ ๋ฌด์์ ๋งํ๊ณ ์ถ์๋์ง, ๋๋ ์ฌ์ง์ด "์ง์ฐ๊ณ ๋ค์ ์จ๋ผ"๋ผ๊ณ ๋งํ๊ณ ์ถ๋ค! ๋น์ ์ ๋๊ณ ์ถ์ดํ๋ ์ฌ๋๋ค์ ์๊ฐ๊ณผ ์๋์ง์ ๊ฐ์ฌํ๊ณ , ์ฌ๋ฐ๋ฅด๊ฒ ๊ธ์ ์ฐ์ญ์์ค. ๋ฐฉ๋ฒ์ ๋ชจ๋ฅธ๋ค๋ฉด ๋ฐฐ์ฐ๊ธฐ์ ๋๋ฌด ๋ฆ์ง ์์์ต๋๋ค. Robert Martin์ ์ฑ
์ Java๋ก ๋ ๋ง์ ์์ ๋ฅผ ํฌํจํ๊ณ ์๋ค๋ ์ ์์ ์ด๋ฌํ ํ์์ ์ฑ
์ค์์ ๋จ์ฐ ๋๋ณด์
๋๋ค. ์ด๊ฒ์ ๋ด ์
์ฅ์์๋ ๋ค์ ๊ด์ ์ ์ธ ์ง์ ์ผ ์๋ ์์ง๋ง OOP ์คํ์ผ, ์ฆ ๋ถ๋ถ๊ณผ ์น์
์ ์์ฑํ๋ ๋ฐฉ์์ผ๋ก ์์ฑ๋์์ต๋๋ค. ์ดํดํ๊ธฐ ์ฝ๊ณ ์ฝ๊ธฐ ์ฌ์ฐ๋ฉฐ, ์ด๋ ์ค์๋, ์ ๋
์ ์๋ฆฌ์ ๋ค๊ธฐ ์ ์๋ ์ฝ๊ฒ ์ฝ์ ์ ์๋ ์ฑ
์
๋๋ค. ํด๋ฆฐ์ฝ๋๋ 3๋ถ๋ถ์ผ๋ก ๋๋์ด์ ธ ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋ถ๋ถ์์๋ ์ฑ
์ ์ด๋ก ์ ์ดํด๋ณด๊ณ ๋์์ธ ํจํด๊ณผ ์์ ์ ๊ท์น์ ๋ํด ๋ฐฐ์ฐ๋๋ก ์์ฒญ๋ฐ์ต๋๋ค. ๋ ๋ฒ์งธ ๋ถ๋ถ์ ๋ฆฌํฉํ ๋ง๊ณผ ์์ฑ์ ์ฐ์ตํ๋๋ก ์ ๋ํ๊ณ , ์ธ ๋ฒ์งธ ๋ถ๋ถ์ ์์ ์ "๋์" ์ฝ๋์ ๋ํ ์ต์ข
์์ฝ์
๋๋ค. ๊ธ์, ์ ์๋ ์ฃผ๋ก Java Core์ ๋ํ ์ง์์ด ํ์ํ ๋ง์ ์ฃผ์ ๋ฅผ ๋ค๋ฃจ์์ง๋ง JUnit ๋จ์ ํ
์คํธ, Log4j ๋ก๊น
, ๋์์ธ์ ๊ฐ์ฅ ๊ฐ๋จํ ํจํด์ ๋ํ ์ง์์ ๋ค๋ฃจ๋ ์น์
๋ ์์ต๋๋ค(๊ทธ๋ฌ๋ ์์์ ๋งํ๋ฏ์ด ๊ทธ ์ค ๋ง์ ๋ถ๋ถ์ด ์์ผ๋ฉฐ ์ดํดํ ์ ์๋ ๋ชจ๋ ๋ด์ฉ์ ์ฑ๊ณต์ ์ผ๋ก ๊ฒ์ํ ์ ์์ต๋๋ค. ์, JavaRush ๊ณผ์ ์์ ๋ถ์ํ ์ ์์ต๋๋ค. ์ฑ
์ ๋ชจ๋ ์ฅ์ ์๋ก ์ฐ๊ฒฐ๋์ด ์์ง ์์ผ๋ฏ๋ก ์ํ๋ ์ฅ๋ถํฐ ์ฑ๊ณต์ ์ผ๋ก ์ฝ๊ธฐ ์์ํ ์ ์์ต๋๋ค. ์ฑ
์์ ์ป์ ์ฃผ์ ์์ด๋์ด๋ฅผ ๊ฐ๋ตํ๊ฒ ์์ฝํฉ๋๋ค. ์ด ์ง์ ์ ๋ํ ๊ทํ์ ๋น์ ์ ๊ณต์ ํ ์ ์๋ ๊ทํ์ ์๊ฒฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ฝ์๋๋ก ์๊ณ ์ฌ์ด ์์
์
๋๋ค. ํ๋ก๊ทธ๋จ์ ์ฃผ์ด์ง ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น๋ง ์ง์๋ฅผ ๊ณ์ฐํด์ผ ํฉ๋๋ค. ์ฝ๋์ ์ค๋ฅ ๋ฐ ์์ ์ฌํญ ์๋ฅผ ์ฃผ์์ ์ ์ด์ฃผ์ธ์. ์ถ์ ์ฝ๋๊ฐ ์๋ ์ค์ด๋ฉฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉ๋๋ฉด ํด๋น ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
1. ๋๊ธ == ์ .
๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฃผ์์ ์๋ชป๋ ์ฝ๋๋ฅผ ๊ฐ๋ฆฌ๊ธฐ ์ํ ์๋จ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ค ๊ฒฝ์ฐ์๋ ์ง์์ ์ธ ์ฝ๋ ๋ฆฌํฉํ ๋ง์ด ์๋ ๊ฒฝ์ฐ ๋ฉ์๋๋ ๋ณ์์ ๋ชฉ์ ์ ๋ํด์๋ ๊ฑฐ์ง๋ง์ ํฉ๋๋ค.2. ์ฃผ์ ์ฒ๋ฆฌ๋ ์ฝ๋, ๋ฐ๋ ์ฝ๋.
์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฌํ ์ฝ๋ ์กฐ๊ฐ์ ๋จ๊ฒจ ๋๋ ๊ฒ์ ์ฐ๋ ๊ธฐ์ ๊ฐ์ต๋๋ค. ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋์ ๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒญ๊ฒฐ์ฑ์ ๋ฐฉํดํฉ๋๋ค. ๋๋๋ก ํด๋น ๋ชจ๋์ ์ฝ๋๋ฅผ ํ์ธํ์ญ์์ค.3. ๋ฉ์๋, ํด๋์ค ๋ฐ ๋ณ์์ ์ ๋ชฉ.
์ด ์ฃผ์ ์ ๋ํด ๋ ผ์ํ๋ ค๋ฉด ๋ณ๋์ ๊ธฐ์ฌ๋ฅผ ์ฝ์ด๋ณผ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๊ฒ์ผ๋ฅด์ง ๋ง๊ณ ๋ชฉ์ ์ ์ ์ ์๋ ์ด๋ฆ์ ์ฐ์ธ์. ์ ๋ชฉ ์ฒ ์๋ฒ์ ๋ช ๊ฐ์ง ํ์ค์ ์์๋ณด์ธ์. ์ด ์ฃผ์ ๋ ์์ธํ ์ฐ๊ตฌ๋ฅผ ์ํด "ํ์"์ ๋๋ค.4. ๊ฐ ๋ฉ์๋์ ๋ณ์๋ ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ์์ ํด๋น ์์น๋ฅผ ๊ฐ์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ํด๋์ค์๋ ๋ณ์์ ๋ฉ์๋(์ ์ ๋ฐ ๋น์ ์ ), ์์ฑ์, ์ค์ฒฉ ๋ฐ ๋ด๋ถ ํด๋์ค, ์ด๊ฑฐํ์ด ํฌํจ๋ ์ ์์ต๋๋ค. ๊ฐ๋จํ ๋งํด์ ์ ๋ณด๊ฐ ๋๋ฌด ๋ง์์ ์์ ์์ ๋ชจ๋ ์ฌ๋์ ์์น๋ฅผ โโ๊ฒฐ์ ํ๋ ๊ฒ์ด ํ์ํฉ๋๋ค. Java ์ฝ์ด ํด๋์ค๋ฅผ ๋ณด๋ฉด ๊ตฌ์กฐ๊ฐ ๋ช ํํ๊ฒ ๊ตฌ์ฑ๋์ด ์๊ณ ๊ฐ ๋ถ๋ถ์ด ํด๋น ์์น์ ์์์ ์ ์ ์์ต๋๋ค. ๋ฌผ๋ก ํ๋ก์ ํธ์์๋ ํ๋ก์ ํธ ๋ด์์ ๋ณ๊ฒฝํ ์ ์์ง๋ง ๊ฐ ํด๋์ค์์๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ ์์ ์ ์ํด ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์ฑ ๊ตฌ์กฐ๋ฅผ ์ ์ํ์ต๋๋ค. ํด๋์ค ์์ ๋ถ๋ถ์๋ ์ ์ ๋ณ์๊ฐ ์๊ณ , ๊ทธ ๋ค์์๋ ๊ฐ์ฒด ๋ณ์ + Enum์ด ์์ต๋๋ค. ๋ณ์ ๋ค์๋ ํด๋์ค ์์ฑ์๋ฅผ ์ ์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ ๊ณผ ํจ๊ป ์์ ํ๊ธฐ ์ํ ๋ฉ์๋๋ฅผ ์์ฑํฉ๋๋ค. ๋ฉ์๋ ๋ค์์ getter์ setter๋ฅผ ์์ฑํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์๋ ๋ด๋ถ ์์ ์ด ์์ต๋๋ค. ๋ด ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋๊ธ์ ์ง์ ์์ฑํ ์ ์์ต๋๋ค.5. ๋ฉ์๋์ ์ถ์ํ ์์ค.
๋์๊ฒ ์ด๊ฒ์ ์ต๊ณ ์ ๋ฐ๊ฒฌ์ด์์ต๋๋ค. ๊ฐ ๋ฉ์๋์๋ ํ ๊ฐ์ง ์ถ์ํ ์์ค์ ์ฐ์ฐ์๋ง ํฌํจ๋ฉ๋๋ค. ๋ค๋จ๊ณ ์์ ์ ํจ๊ป ํผํฉํ๋ฉด ์ ๋ฉ๋๋ค.6. ์ค๋ฅ ์ฒ๋ฆฌ.
ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ๋์ ํ์ธ๋ ์์ธ ๋๋ ํ์ธ๋์ง ์์ ์์ธ(์๊ฒฌ ์์ฑ)? ๋๋ Checked์ ์ง์ง์์ด์ง๋ง, ์ด ์ฑ ์ Unchecked Exceptions๋ฅผ ์ธ๋ถ์์ ๋ฐ๋ผ๋ณผ ์ ์๋๋ก ๋์์ค๋๋ค. ์ค์ ๋ก ํ์ธ๋์ง ์์ ์์ธ๋ ํนํ ์์ธ๊ฐ ํ ๋ฒ์ ์ฌ๋ฌ ๋ ์ด์ด๋ฅผ "๊ดํต"ํ๋ค๋ ์ ์ ๊ณ ๋ คํ๋ฉด ๋ฉ์๋ ์๊ทธ๋์ฒ๋ฅผ ์์์ํค์ง ์์ต๋๋ค. ๊ฐ์ฅ ์์ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ๋ถํธํจ์ ์ด๋ฅผ ํฌ์ฐฉํ๊ธฐ ์ ์ ์ ์ฒด ๋ฉ์๋ ์ฒด์ธ์ ์ฌ์ ์ํ๊ฒ ๋๋ฏ๋ก ๋ง์ ๊ฒฝ์ฐ ๊ฐ๋ฐ์ ๋งค์ฐ โโ๋ถํธํฉ๋๋ค.7. ์ฝ๋ ํ์ํ.
์ฌ๋ฐ๋ฅธ ํ์์ ์ฝ๋๋ ๋ช ํํ ๋ฟ๋ง ์๋๋ผ ๊ฐ๋ ์ฑ๋ ๋์ต๋๋ค. ๋๊ดํธ์ ๋ด๋ถ ๋์์ ๋ํ ์์ด๋์ด๋ฅผ ์ฆ์ ์ป์ ์ ์์ต๋๋ค. if, else ๊ตฌ๋ฌธ์ ์กฐ๊ฑด ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ชจ๋ ๊ฒ์ ํ ์ค์ ์์ฑํด์๋ ์ ๋๋ฉฐ ๊ธด ์ฒด์ธ์ ์ด๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.8. ์กฐ๊ฑด์ ๋ถ์ .
์กฐ๊ฑด์์ ๊ฑฐ๋ถ๋ฅผ ํผํ๋ ค๊ณ ๋ ธ๋ ฅํ์ญ์์ค. ์ด๊ฒ์ ์ฌ๋ฆฌ์ ์์ธ์ ๋ ๊ฐ๊น๊ณ ์ฐ๋ฆฌ ๋๋ ๊ฑฐ๋ถ๋ฅผ ์ ์ธ์ํ์ง ๋ชปํฉ๋๋ค. ๊ทธ๋ ์ต๋๋ค! ๊ทธ ํํ์ด ๋์ ๋์ง ์์ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ์๋๋ฅผ ๋ค์ ์์ฑํ๋ ๊ฒ์ด if(!condition.isTrue)๋ฅผ ๋ถ์ ํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํจ์ฌ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค(condition.isFalse).9. ํจ์๋ ํ๋์ ์์ ์ ์ํํด์ผ ํฉ๋๋ค.
๋ฉ์๋๊ฐ ๋ง์ ์์ ์ ์ํํ๋ ๊ฒฝ์ฐ ๋จ์ผ ์์ ๋ฉ์๋๋ก ๋๋๋๋ค. ์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ง์ํ๊ธฐ๊ฐ ๋งค์ฐ ์ฝ๊ณ , ํ ์คํธํ๊ธฐ ์ฌ์ฐ๋ฉฐ, ํ์ํ ๊ฒฝ์ฐ ๊ต์ฒดํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค.10. ๊ฐ์ ๋ง์ ๋ฐ๋ณตํ์ง ๋ง์ธ์.
DRY ์ฝ๋๋ฅผ ๋ฐ๋ณตํ์ง ๋ง์ญ์์ค(์์ ์ ๋ฐ๋ณตํ์ง ๋ง์ญ์์ค). ์ด๋ ์ฝ๋๋ฅผ ํฌ๊ฒ ์ค์ด๋ ๊ธฐ๋ณธ ๊ท์น ์ค ํ๋์ด๋ฏ๋ก ๋ช ์ฌํ์ธ์. ๋ฐ๋ณต๋๋ ๋ชจ๋ ์ฝ๋ ์กฐ๊ฐ์ ๋ณ๋์ ํจ์์ ๋ฃ์ผ์ญ์์ค. ๋ฌผ๋ก DRY, KISS(Keep it simple Stupid), SOLID , YAGNI์ ๋ํด ๋ ๋ง์ด ์ด์ผ๊ธฐํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ฉ์ด๋ ์ดํด์ ์ค๊ณ์ ํ์์ ์ ๋๋ค. ์ด ๊ธฐ์ฌ๋ "Clean Code"๋ผ๋ ์ฑ ์ ๋ํ ๋ฆฌ๋ทฐ๋ฅผ ๋ค๋ฃจ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ๊ธฐ์ฌ๋ก ์์ฑํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ์๋ง๋ ์ด์ ๋ํด ๋ค์ ์ธ ๊ฒ์ ๋๋ค.//Weight in kg.
//Height in metres.
public class sample {
public static void main (String[] args) {
humanIMB humanIMB = new humanIMB(80,1.52);
System.out.println(humanIMB.Result());
}
}
class humanIMB {
public double W; //Weight Human
public double H; // Height Human
private static double imb;
public humanIMB(double w, double h) {
W = w;
H = h;
imb = W / (H * H);
}
public double takeW() {
return W;
}
public void putW(double w) {
W = w;
imb = W / (H * H);
}
public double takeH() {
return H;
}
public void putH(double h) {
H = h;
imb = W / (H * H);
}
public static double takeImt() {
return imb;
}
public static String Result() {
String string = null;
if (imb >=18.5 & imb <25) {
string ="ะะพัะผะฐ, ัั ะฒ ัะพัะผะต!";
}
if (imb >=25 & imb <30) {
string ="ะัะตะดะพะถะธัะตะฝะธะต. ะญะน, ะฟะพะพััะพัะพะถะฝะตะต ั ะฟะธัะพะถะฝัะผะธ ";
}
if (imb >=30) {
string ="ะะถะธัะตะฝะธะต. SCHWEINE! ะฅะฒะฐัะธั ะถัะฐัั, ะธะดะธ ะฝะฐ ััะตะฝั!";
}
if (imb <18.5) {
string ="ะะตัะธัะธั ะผะฐััั ัะตะปะฐ. ะ ะผะพะดะตะปะธ ัะตัะธะป ะฟะตัะตะบะฒะฐะปะธัะธัะธัะพะฒะฐัััั?";
}
return string;
}
}
GO TO FULL VERSION