๐ ๋ชฉ์ฐจ.
17. ๋์์ ํด๋ฆฌ์คํฑ
.์ฃผ์
.ํ๊ฒฝ
.ํจ์
.์ผ๋ฐ
.์๋ฐ
.์ด๋ฆ
.ํ ์คํธ
.๊ฒฐ๋ก
โ๏ธ ๋ด์ฉ.
17. ๋์์ ํด๋ฆฌ์คํฑ
๋งํด ํ์ธ๋ฌ๋ 'Refactoring'์์ ๋ค์ํ ์ฝ๋ ๋์๋ฅผ ๊ฑฐ๋ก ํ๋ค. ์ด ์ฅ์ ๋ชฉ๋ก์์๋ ๋งํด์ด ๋งก์ ๋์์ ์ ์๊ฐ ๋งก์ ๋์๋ฅผ ์ถ๊ฐํ๋ค. ๋ํ ์ฝ๋๋ฅผ ์ง๋ฉด์ ์ฌ์ฉํ๋ ๊ธฐ๊ต์ ํด๋ฆฌ์คํฑ๋ ํฌํจํ๋ค.
์๋ ๋ชฉ๋ก๋ค์ '์?'๋ผ๊ณ ์๋ฌธํ ๋ค์ ๋ต์ ๊ธฐ๋กํ์๋ค.
.์ฃผ์
- C1: ๋ถ์ ์ ํ ์ ๋ณด
๋ค๋ฅธ ์์คํ ์ (VCS, ๋ฒ๊ทธ ์ถ์ ์์คํ ๋ฑ) ์ ์ฅํ ์ ๋ณด๋ ์ฃผ์์ผ๋ก ์ ์ ํ์ง ๋ชปํ๋ค. ๋ณ๊ฒฝ ์ด๋ ฅ, ๋ ์ง ๋ฑ์ ์์ค ์ฝ๋๋ง ๋ฒ์กํ๊ฒ ๋ง๋ ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์ฑ์, ์ต์ข ์์ ์ผ, SPR(Software Problem Report) ๋ฒํธ ๋ฑ๊ณผ ๊ฐ์ ๋ฉํ ์ ๋ณด๋ง ์ฃผ์์ผ๋ก ๋ฃ๋๋ค. ์ฃผ์์ ์ฝ๋์ ์ค๊ณ์ ๊ธฐ์ ์ ์ธ ์ค๋ช ์ ๋ถ์ฐํ๋ ์๋จ์ด๋ค.
- C2: ์ธ๋ชจ์๋ ์ฃผ์
์ค๋ ๋ ์ฃผ์, ์๋ฑํ ์ฃผ์, ์๋ชป๋ ์ฃผ์์ ๋ ์ด์ ์ธ๋ชจ์๋ค. ์ธ๋ชจ ์์ด์ง ์ฃผ์์ ์์ ๋ฌ์ง ์๋ ํธ์ด ๊ฐ์ฅ ์ข๋ค.
- C3: ์ค๋ณต๋ ์ฃผ์
์ฝ๋๋ง์ผ๋ก ์ถฉ๋ถํ๋ฐ ๊ตฌ๊ตฌ์ ์ ์ค๋ช ํ๋ ์ฃผ์์ด ์ค๋ณต๋ ์ฃผ์์ด๋ค. ์ฃผ์์ ์ฝ๋๋ง์ผ๋ก ๋คํ์ง ๋ชปํ๋ ์ค๋ช ์ ๋ถ์ฐํ๋ค.
- C4: ์ฑ์ ์๋ ์ฃผ์
์์ฑํ ๊ฐ์น๊ฐ ์๋ ์ฃผ์์ ์ ์์ฑํ ๊ฐ์น๋ ์๋ค. ์ฃผ์์ ๋ฌ ์ฐธ์ด๋ผ๋ฉด ์ต๋ํ ์๊ฐ์ ๋ค์ฌ ์ ์ฑ๊ป ๊ฐ๊ฒฐ ๋ช ๋ฃํ๊ฒ ์์ฑํ์.
- C5: ์ฃผ์ ์ฒ๋ฆฌ๋ ์ฝ๋
์ฃผ์์ผ๋ก ์ฒ๋ฆฌ๋ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ์ฆ๊ฐ ์ง์๋ฒ๋ ค๋ผ. ์์ค ์ฝ๋ ๊ด๋ฆฌ ์์คํ (Git, SVN ๋ฑ) ์ด ๊ธฐ์ตํ๋๊น. ๋๊ตฐ๊ฐ ์ ๋ง ํ์ํ๋ค๋ฉด ์ด์ ๋ฒ์ ์ ๊ฐ์ ธ์ค๋ฉด ๋๋๊น. ์ฃผ์์ผ๋ก ์ฒ๋ฆฌ๋ ์ฝ๋๋ฅผ ๋ด๋ฒ๋ ค ๋์ง ๋ง๋ผ
.ํ๊ฒฝ
- E1: ์ฌ๋ฌ ๋จ๊ณ๋ก ๋น๋ํด์ผ ํ๋ค.
๋น๋๋ ๊ฐ๋จํ ํ ๋จ๊ณ๋ก ๋๋์ผ ํ๋ค. ์จ๊ฐ jar, xml ํ์ผ ๋ฑ ์์คํ ์ ํ์ํ ํ์ผ์ ์ฐพ๋๋ผ ์ฌ๊ธฐ์ ๊ธฐ ๋ค์ ์ผ ํ์๊ฐ ์์ด์ผ ํ๋ค. ํ ๋ช ๋ น์ผ๋ก ์ ์ฒด๋ฅผ ์ฒดํฌ์์ํด์ ํ ๋ช ๋ น์ผ๋ก ๋น๋ํ ์ ์์ด์ผ ํ๋ค.
- E2 : ์ฌ๋ฌ ๋จ๊ณ๋ก ํ ์คํธํด์ผ ํ๋ค.
๋ชจ๋ ๋จ์ ํ ์คํธ๋ ํ ๋ช ๋ น์ผ๋ก ๋๋ ค์ผ ํ๋ค. IDE์์ ๋ฒํผ ํ๋๋ก ๋ชจ๋ ํ ์คํธ๋ฅผ ๋๋ฆฐ๋ค๋ฉด ๊ฐ์ฅ ์ด์์ ์ด๋ค. ๋ชจ๋ ํ ์คํธ๋ฅผ ํ ๋ฒ์ ์คํํ๋ ๋ฅ๋ ฅ์ ์์ฃผ ๊ทผ๋ณธ์ ์ด๊ณ ์์ฃผ ์ค์ํ๋ค. ๋ฐ๋ผ์ ๊ทธ ๋ฐฉ๋ฒ์ด ๋น ๋ฅด๊ณ , ์ฝ๊ณ , ๋ช ๋ฐฑํด์ผ ํ๋ค.
.ํจ์
- F1: ๋๋ฌด ๋ง์ ์ธ์
ํจ์์์ ์ธ์ ๊ฐ์๋ ์์์๋ก ์ข๋ค.
- F2: ์ถ๋ ฅ ์ธ์
์ถ๋ ฅ ์ธ์๋ ์ง๊ด์ ์ ๋ฉด์ผ๋ก ์๋ฐฐํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ ์๋ ์ธ์๋ฅผ(์ถ๋ ฅ X) ์ ๋ ฅ์ผ๋ก ๊ฐ์ฃผํ๋ค. ํจ์์์ ๋ญ๊ฐ์ ์ํ๋ฅผ ๋ณ๊ฒฝํด์ผ ํ๋ค๋ฉด ํจ์๊ฐ ์ํ ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ค.
- F3: ํ๋๊ทธ ์ธ์
boolean ์ธ์๋ ํจ์๊ฐ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ์ํํ๋ค๋ ๋ช ๋ฐฑํ ์ฆ๊ฑฐ์ด๋ค. ํจ์๋ ํ๋์ ๊ธฐ๋ฅ๋ง ์ ๊ฐ์ ธ์ผ ํ๋ค.
- F4: ์ฃฝ์ ํจ์
์๋ฌด๋ ํธ์ถํ์ง ์๋ ํจ์๋ ์ญ์ ํ๋ค. ์ฃฝ์ ์ฝ๋๋ ๋ญ๋น๋ค.
.์ผ๋ฐ
- G1: ํ ์์ค ํ์ผ์ ์ฌ๋ฌ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ค.
์ค๋๋ ํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ์ ํ ์์ค ํ์ผ ๋ด์์ ๋ค์ํ ์ธ์ด๋ฅผ ์ง์ํ๋ค. ์๋ก XML, HTML, YAML, Javascript ๋ฑ ์ ํฌํจํ๋ค. ์ด์์ ์ผ๋ก๋ ์์ค ํ์ผ ํ๋์ ์ธ์ด ํ๋๋ง ์ฌ์ฉํ๋ ๋ฐฉ์์ด ๊ฐ์ฅ ์ข๋ค. ํ์ค์ ์ผ๋ก๋ ์ฌ๋ฌ ์ธ์ด๊ฐ ๋ถ๊ฐํผํ๋ค. ํ์ง๋ง ์ต๋ํ ์ค์ด๋๋ก ํ์.
- G2: ๋น์ฐํ ๋์์ ๊ตฌํํ์ง ์๋๋ค.
์ต์ ๋๋์ ์์น (The Principle of Least Surprise)์ ์๊ฑฐํด ํจ์๋ ํด๋์ค๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๊ฐ ๋น์ฐํ๊ฒ ์ฌ๊ธธ ๋งํ ๋์๊ณผ ๊ธฐ๋ฅ์ ์ ๊ณตํด์ผ ํ๋ค. ๋น์ฐํ ๋์์ ๊ตฌํํ์ง ์์ผ๋ฉด ์ฝ๋๋ฅผ ์ฝ๊ฑฐ๋ ์ฌ์ฉํ๋ ์ฌ๋์ด ์ฝ๋์ ์ ๋ขฐ์ฑ์ ์์ด๋ฒ๋ฆฌ๊ฒ ๋๋ค.
- G3: ๊ฒฝ๊ณ๋ฅผ ์ฌ๋ฐ๋ก ์ฒ๋ฆฌํ์ง ์๋๋ค.
์ฝ๋๋ ์ฌ๋ฐ๋ก ๋์ํด์ผ ํ๋ค. ์ค์ค๋ก์ ์ง๊ด์ ์์กดํ์ง ๋ง๋ผ. ๋ชจ๋ ๊ฒฝ๊ณ ์กฐ๊ฑด์ ์ฐพ๊ณ , ํ ์คํธํ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ๊ฑฐ์ณ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
- G4: ์์ ์ ์ฐจ ๋ฌด์
์์ ์ ์ฐจ๋ฅผ ๋ฌด์ํ๋ฉด ์ํํ๋ค. ์คํจํ๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ผ๋จ ์ ์ณ๋๊ณ ๋์ค์ผ๋ก ๋ฏธ๋ฃจ๋ ํ๋๋ ์ ์ฉ์นด๋๊ฐ ๊ณต์ง ๋์ด๋ผ๋ ์๊ฐ๋งํผ ์ํํ๋ค.
- G5: ์ค๋ณต
์ด ์ฑ ์ ๋์ค๋ ๊ฐ์ฅ ์ค์ํ ๊ท์น ์ค ํ๋์ด๋ฏ๋ก ์ฌ๊ฐํ๊ฒ ์๊ณ ํ๊ธฐ ๋ฐ๋๋ค. DRY(Don't Repeat Yourself) ์์น
์ฝ๋์์ ์ค๋ณต์ ๋ฐ๊ฒฌํ ๋๋ง๋ค ์ถ์ํํ ๊ธฐํ๋ก ๊ฐ์ฃผํ๋ผ. ์ค๋ณต๋ ์ฝ๋๋ฅผ ํ์ ๋ฃจํด์ด๋ ๋ค๋ฅธ ํด๋์ค๋ก ๋ถ๋ฆฌํ๋ผ. ์ด๋ ๋ ์ถ์ํ๋ก ์ค๋ณต์ ์ ๋ฆฌํ๋ฉด ์ค๊ณ ์ธ์ด์ ์ดํ๊ฐ ๋์ด๋๋ค. ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๋ค์ด ๊ทธ๋งํผ ์ดํ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ฌ์์ง๋ค. ์ถ์ํ ์์ค์ ๋์์ผ๋ฏ๋ก ๊ตฌํ์ด ๋นจ๋ผ์ง๊ณ ์ค๋ฅ๊ฐ ์ ์ด์ง๋ค.
- ๋๊ฐ์ ์ฝ๋๊ฐ ์ฌ๋ฌ ๋์ค๋ ์ค๋ณต์ ๊ฐ๋จํ ํจ์๋ก ๊ต์ฒดํ๋ค.
- ์ฌ๋ฌ ๋ชจ๋์์ ์ผ๋ จ์ ์กฐ๊ฑด๋ฌธ์ผ๋ก ๋๊ฐ์ ์กฐ๊ฑด์ ํ์ธํ๋ ์ค๋ณต์ ๋คํ์ฑ์ผ๋ก ๋์ฒดํ๋ค.
- ์๊ณ ๋ฆฌ์ฆ์ด ์ ์ฌํ๊ฑฐ๋ ์ฝ๋๊ฐ ์๋ก ๋ค๋ฅธ ์ค๋ณต์ผ ๊ฒฝ์ฐ, Template Method ํจํด์ด๋ Strategy ํจํด์ผ๋ก ์ค๋ณต์ ์ ๊ฑฐํ๋ค.
์ต๊ทผ 15๋ ๊ฐ ๋์จ ๋์์ธ ํจํด์ ๋๋ค์๋ ์ค๋ณต์ ์ ๊ฑฐํ๋ ์ ์๋ ค์ง ๋ฐฉ๋ฒ์ ๋ถ๊ณผํ๋ค. BCNF(Boyce-Code Nomal Form) ์ญ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ์ ๋ต์ด๋ค.
๊ฐ์ฅ ์ค์ํ ๊ฑด. ์ด๋์๋ ์ค๋ณต์ ๋ฐ๊ฒฌํ๋ฉด ์์ ๋ผ
- G6: ์ถ์ํ ์์ค์ด ์ฌ๋ฐ๋ฅด์ง ๋ชปํ๋ค.
์ถ์ํ๋ ์ ์ฐจ์ ์์ธ ๊ฐ๋ ์์ ๊ณ ์ฐจ์ ์ผ๋ฐ ๊ฐ๋ ์ ๋ถ๋ฆฌํ๋ค. ์ถ์ํ๋ก ๊ฐ๋ ์ ๋ถ๋ฆฌํ ๋๋ ์ฒ ์ ํด์ผ ํ๋ค. ๋ชจ๋ ์ ์ฐจ์ ๊ฐ๋ ์ ํ์ ํด๋์ค์ ๋ฃ๊ณ , ๋ชจ๋ ๊ณ ์ฐจ์ ๊ฐ๋ ์ ๊ธฐ์ด ํด๋์ค์ ๋ฃ๋๋ค.
์๋ก ์ธ๋ถ ๊ตฌํ๊ณผ ๊ด๋ จํ ์์, ๋ณ์, ์ ํธ๋ฆฌํฐ ํจ์๋ ํ์ ํด๋์ค์ ๋ฃ์ด์ผ ํ๋ค. ๊ธฐ์ด ํด๋์ค๋ ๊ตฌํ ์ ๋ณด์ ๋ฌด์งํด์ผ ๋ง๋ ํ๋ค.
์์ค ํ์ผ, ์ปดํฌ๋ํธ, ๋ชจ๋๋ ๋ง์ฐฌ๊ฐ์ง๋ค. ์ฐ์ํ ์ค๊ณ์๋ ๊ฐ๋ ์ ๋ค์ํ ์ฐจ์์ผ๋ก ๋ถ๋ฆฌํด ๋ค๋ฅธ ์ปจํ ์ด๋์ ๋ฃ๋๋ค.
์ถ์ํ๋ ์ํํธ์จ์ด ๊ฐ๋ฐ์์๊ฒ ๊ฐ์ฅ ์ด๋ ค์ด ์์ ์ค ํ๋์ด๋ค.
- G7: ๊ธฐ์ด ํด๋์ค๊ฐ ํ์ ํด๋์ค์ ์์กดํ๋ค.
๊ฐ๋ ์ ๊ธฐ์ด ํด๋์ค์ ํ์ ํด๋์ค๋ก ๋๋๋ ๊ฐ์ฅ ํํ ์ด์ ๋ ๊ณ ์ฐจ์ ๊ธฐ์ด ํด๋์ค ๊ฐ๋ ์ ์ ์ฐจ์ ํ์ ํด๋์ค ๊ฐ๋ ์ผ๋ก๋ถํฐ ๋ถ๋ฆฌํด ๋ ๋ฆฝ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด์๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ธฐ์ด ํด๋์ค๊ฐ ํ์ ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ๋ฌธ์ ๊ฐ ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ์ด ํด๋์ค๋ ํ์ ํด๋์ค๋ฅผ ์์ ๋ชฐ๋ผ์ผ ๋ง๋ ํ๋ค.
๋ฌผ๋ก ์์ธ๊ฐ ์๋ค. ๊ฐํน ํ์ ํด๋์ค ๊ฐ์๊ฐ ํ์คํ ๊ณ ์ ๋์๋ค๋ฉด ๊ธฐ์ด ํด๋์ค์ ํ์ ํด๋์ค๋ฅผ ์ ํํ๋ ์ฝ๋๊ฐ ๋ค์ด๊ฐ๋ค.
- G8: ๊ณผ๋ํ ์ ๋ณด
์ ์ ์๋ ๋ชจ๋์ ์ธํฐํ์ด์ค๊ฐ ์์ฃผ ์๋ค. ์ ์ ์๋ ์ธํฐํ์ด์ค๋ ๋ง์ ํจ์๋ฅผ ์ ๊ณตํ์ง ์๋๋ค. ๊ทธ๋์ ๊ฒฐํฉ๋๊ฐ ๋ฎ๋ค.
ํด๋์ค๋ ๋ชจ๋ ์ธํฐํ์ด์ค์ ๋ ธ์ถํ ํจ์๋ฅผ ์ ํํ ์ค ์์์ผ ํ๋ค. ํด๋์ค๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋ ์๋ ์ ์์๋ก ์ข๋ค. ํจ์๊ฐ ์๋ ๋ณ์ ์๋ ์์์๋ก ์ข๋ค. ํด๋์ค์ ๋ค์ด์๋ ์ธ์คํด์ค ๋ณ์ ์๋ ์์์๋ก ์ข๋ค.
์๋ฃ๋ฅผ ์จ๊ฒจ๋ผ. ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ์จ๊ฒจ๋ผ. ์์์ ์์ ๋ณ์๋ฅผ ์จ๊ฒจ๋ผ. ๋ฉ์๋๋ ์ธ์คํด์ค ๋ณ์๊ฐ ๋์ณ๋๋ ํด๋์ค๋ ํผํ๋ผ. ํ์ ํด๋์ค์์ ํ์ํ๋ค๋ ์ด์ ๋ก protected ๋ณ์๋ ํจ์๋ฅผ ๋ง๊ตฌ ์์ฑํ์ง ๋ง๋ผ. ์ธํฐํ์ด์ค๋ฅผ ๋งค์ฐ ์๊ฒ ๊ทธ๋ฆฌ๊ณ ๋งค์ฐ ๊น๊นํ๊ฒ ๋ง๋ค์ด๋ผ. ์ ๋ณด๋ฅผ ์ ํํด ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถฐ๋ผ
- G9: ์ฃฝ์ ์ฝ๋
์ฃฝ์ ์ฝ๋๋ ์คํ๋์ง ์๋ ์ฝ๋๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๋ถ๊ฐ๋ฅํ ์กฐ๊ฑด, ์๋ฌด๋ ํธ์ถํ์ง ์๋ ์ ํธ๋ฆฌํฐ ํจ์ ๋ฑ์ด ์๋ค. ์ฃฝ์ ์ฝ๋๋ฅผ ๋ฐ๊ฒฌํ๋ฉด ์์คํ ์์ ์ ๊ฑฐํ๋ผ.
- G10: ์์ง ๋ถ๋ฆฌ
๋ณ์์ ํจ์๋ ์ฌ์ฉ๋๋ ์์น์ ๊ฐ๊น๊ฒ ์ ์ํ๋ค. ์ง์ญ ๋ณ์๋ ์ฒ์์ผ๋ก ์ฌ์ฉํ๊ธฐ ์ง์ ์ ์ ์ธํ๋ฉฐ ์์ง์ผ๋ก ๊ฐ๊น์ด ๊ณณ์ ์์นํด์ผ ํ๋ค. ์ ์ธํ ์์น๋ก๋ถํฐ ๋ช๋ฐฑ ์ค ์๋์์ ์ฌ์ฉํ๋ฉด ์ ๋๋ค.
๋น๊ณต๊ฐ ํจ์๋ ์ฒ์์ผ๋ก ํธ์ถํ ์งํ์ ์ ์ํ๋ค. ๋น๊ณต๊ฐ ํจ์๋ ์ ์ฒด ํด๋์ค ๋ฒ์์ ์ํ์ง๋ง ๊ทธ๋๋ ์ ์ํ๋ ์์น์ ํธ์ถํ๋ ์์น๋ฅผ ๊ฐ๊น๊ฒ ์ ์งํ๋ค. ๋น๊ณต๊ฐ ํจ์๋ ์ฒ์์ผ๋ก ํธ์ถ๋๋ ์์น๋ฅผ ์ฐพ์ ํ ์กฐ๊ธ๋ง ์๋๋ก ๋ด๋ ค๊ฐ๋ฉด ์ฝ๊ฒ ๋์ ๋์ด์ผ ํ๋ค.
- G11: ์ผ๊ด์ฑ ๋ถ์กฑ
์ด๋ค ๊ฐ๋ ์ ํน์ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค๋ฉด ์ ์ฌํ ๊ฐ๋ ๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค. ์์ ์ธ๊ธํ ์ต์ ๋๋์ ์์น(The Principle of Least Surprice'์๋ ๋ถํฉํ๋ค. ํ๊ธฐ๋ฒ์ ์ ์คํ๊ฒ ์ ํํ๋ฉฐ, ์ ํํ ํ๊ธฐ๋ฒ์ ์ ์คํ๊ฒ ๋ฐ๋ฅธ๋ค.
์ผ๊ด์ฑ์ ์ฝ๋๋ฅผ ์ฝ๊ณ ์์ ํ๊ธฐ ๋๋จํ ์ฌ์์ง๊ฒ ํ๋ค.
- G12: ์ก๋์ฌ๋
๋น์ด ์๋ ๊ธฐ๋ณธ ์์ฑ์๊ฐ ์ ํ์ํ๊ฐ? ํ์ ์๋ ๋ณ์, ํจ์, ์ฃผ์์ ์ ๊ฑฐํ๋ผ. ์์ค ํ์ผ์ ์ธ์ ๋ ๊น๋ํ๊ฒ ์ ๋ฆฌํ๋ผ. ์ก๋์ฌ๋๋ฅผ ์ ์ ๋ผ!.
- G13: ์ธ์์ ๊ฒฐํฉ
์๋ก ๋ฌด๊ดํ ๊ฐ๋ ์ ์ธ์์ ์ผ๋ก ๊ฒฐํฉํ์ง ์๋๋ค. ์๋ก ์ผ๋ฐ์ ์ธ enum์ ํน์ ํด๋์ค์ ์ํ ์ด์ ๊ฐ ์๋ค. ํจ์, ์์, ๋ณ์๋ฅผ ์ ์ธํ ๋๋ ์๊ฐ์ ๋ค์ฌ ์ฌ๋ฐ๋ฅธ ์์น๋ฅผ ๊ณ ๋ฏผํ๋ค ๊ทธ์ ๋น์ฅ ํธํ ๊ณณ์ ์ ์ธํ๊ณ ๋ด๋ฒ๋ ค ๋๋ฉด ์ ๋๋ค.
- G14: ๊ธฐ๋ฅ ์์ฌ
ํด๋์ค ๋ฉ์๋๋ ์๊ธฐ ํด๋์ค์ ๋ณ์์ ํจ์์ ๊ด์ฌ์ ๊ฐ์ ธ์ผ์ง ๋ค๋ฅธ ํด๋์ค์ ๋ณ์์ ํจ์์ ๊ด์ฌ์ ๊ฐ์ ธ์๋ ์ ๋๋ค. ๋ฉ์๋๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์ฐธ์กฐ์์ ๋ณ๊ฒฝ์๋ฅผ ์ฌ์ฉํด ๊ทธ ๊ฐ์ฒด ๋ด์ฉ์ ์กฐ์ํ๋ค๋ฉด ๋ฉ์๋๊ฐ ๊ทธ ๊ฐ์ฒด ํด๋์ค์ ๋ฒ์๋ฅผ ์์ฌ๋ด๋ ํ์ด๋ค. ๋ณธ์ธ์ ํด๋์ค๋ง ์ ๊ฒฝ ์ฐ๊ณ ์กฐ์ํ์.
- G15: ์ ํ์ ์ธ์
ํจ์์ false ์ธ์๋งํผ ๋ฐ์ด์ค๋ฌ์ด ์ฝ๋๋ ์๋ค. boolean ๋ฟ๋ง ์๋๋ค. enum, int ๋ฑ ํจ์ ๋์์ ์ ์ดํ๋ ค๋ ์ธ์๋ ํ๋ ๊ฐ์ด ๋ฐ๋์งํ์ง ์๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ธ์๋ฅผ ๋๊ฒจ ๋์์ ์ ํํ๋ ๋์ ์๋ก์ด ํจ์๋ฅผ ๋ง๋๋ ํธ์ด ์ข๋ค.
- G16: ๋ชจํธํ ์๋
์ฝ๋์ ์๋๋ฅผ ์ต๋ํ ๋ถ๋ช ํ ๋ฐํ๋ค. ํ๊ธฐ๋ฒ, ๋งค์ง ๋ฒํธ ๋ฑ์ ์ ์์ ์๋๋ฅผ ํ๋ฆฐ๋ค. ์๋๋ฅผ ๋ถ๋ช ํ ํ๋๋ก ์ต๋ํ ์๊ฐ์ ํฌ์ํ๋ค.
- G17: ์๋ชป ์ง์ด ์ฑ ์
์ํํธ์จ์ด ๊ฐ๋ฐ์๊ฐ ๋ด๋ฆฌ๋ ๊ฐ์ฅ ์ค์ํ ๊ฒฐ์ ์ค ํ๋๊ฐ ์ฝ๋์ ๋ฐฐ์น์ด๋ค. ์ด ๋ฉ์๋๋ ์ด๋ค ํด๋์ค์ ๋ค์ด๊ฐ์ผ ํ๋๊ฐ?
์ฌ๊ธฐ์๋ '์ต์ ๋๋์ ์์น'์ ์ ์ฉํ๋ค. ์ฝ๋๋ ๋ ์๊ฐ ์์ฐ์ค๋ฝ๊ฒ ๊ธฐ๋ํ ์์น์ ๋ฐฐ์นํ๋ค.
- G18: ๋ถ์ ์ ํ static ํจ์
Math.max(double a, double b)๋ ์ข์ static ๋ฉ์๋๋ค. ํน์ ์ธ์คํด์ค์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ด ์๋๋ค. ๋ฐ๋ผ์ ์ฌ์ ์ํ ๊ฐ๋ฅ์ฑ์ด ๋งค์ฐ ์ ๋ค. ํน์ ์ธ์คํด์ค์ ๊ด๋ จ๋ ๊ธฐ๋ฅ์ผ ๊ฒฝ์ฐ ์ธ์คํด์ค ํจ์๋ก ์ ์ํ๋ค. ์กฐ๊ธ์ด๋ผ๋ ์์ฌ์ค๋ฝ๋ค๋ฉด. ๋ฐ๋์ static ํจ์๋ก ์ ์ํด์ผ๊ฒ ๋ค๋ฉด ์ฌ์ ์ํ ๊ฐ๋ฅ์ฑ์ ์๋์ง ๊ผผ๊ผผํ ๋ฐ์ ธ๋ณธ๋ค.
- G19: ์์ ์ ๋ณ์
ํ๋ก๊ทธ๋จ ๊ฐ๋ ์ฑ์ ๋์ด๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋๊ฐ ๊ณ์ฐ์ ์ฌ๋ฌ ๋จ๊ณ๋ก ๋๋๊ณ ์ค๊ฐ ๊ฐ์ผ๋ก ์์ ์ ์ธ ๋ณ์ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค.
Matcher match = headerPattern,matcher(line);
if(match.find()){
String key = match.group(1);
String value = match.group(2);
headers.put(key.toLowerCase(), value);
}
์์ ์ ์ธ ๋ณ์ ์ด๋ฆ์ ์ฌ์ฉํ ๋์ ์ฒซ ๋ฒ์งธ๋ก ์ผ์นํ๋ ๊ทธ๋ฃน์ด ํค(Key)์ด๊ณ ๋ ๋ฒ์งธ๋ก ์ผ์นํ๋ ๊ทธ๋ฃน์ด ๊ฐ(value)์ด๋ผ๋ ์ฌ์ค์ด ๋ช ํํ ๋๋ฌ๋๋ค.
์์ ์ ์ธ ๋ณ์ ์ด๋ฆ์ ๋ง์ด ์จ๋ ๊ด์ฐฎ๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ง์์๋ก ๋ ์ข๋ค. ๊ณ์ฐ์ ๋ช ๋จ๊ณ๋ก ๋๋๊ณ ์ค๊ฐ๊ฐ์ ์ข์ ๋ณ์ ์ด๋ฆ๋ง ๋ถ์ฌ๋ ํด๋ ํ๊ธฐ ์ด๋ ต๋ ๋ชจ๋์ด ์์๊ฐ์ ์ฝ๊ธฐ ์ฌ์ด ๋ชจ๋๋ก ํ๋ฐ๊ฟํ๋ค.
- G20: ์ด๋ฆ๊ณผ ๊ธฐ๋ฅ์ด ์ผ์นํ๋ ํจ์
Date newDate = date.add(5) // (X) date ์ ๋ฌด์์ ๋ํ๋ ๊ฑด๊ฐ? (์ผ? ์?)
Date newDate = date.addDay(5) // (O) ๋ฌด์์ ๋ํ๋์ง ๋ช
ํํ ํ๋ค.
์ด๋ฆ๋ง์ผ๋ก ๋ถ๋ช ํ์ง ์์์ ๊ตฌํ์ ์ดํผ๊ฑฐ๋ ๋ฌธ์๋ฅผ ๋ค์ ์ฌ์ผ ํ๋ค๋ฉด ๋ ์ข์ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ๊ฑฐ๋ ์๋๋ฉด ๋ ์ข์ ์ด๋ฆ์ ๋ถ์ด๊ธฐ ์ฝ๋๋ก ๊ธฐ๋ฅ์ ์ ๋ฆฌํด์ผ ํ๋ค.
- G21: ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๋ผ.
์ด์ฐ์ด์ฐํ์ฌ ๋์๊ฐ๋ ์ฝ๋๋ฅผ ๋๊ณ ๊ตฌํ์ด ๋๋ฌ๋ค๊ณ ์ ์ธํ๊ธฐ ์ ์ ํจ์๊ฐ ๋์๊ฐ๋ ๋ฐฉ์์ ํ์คํ ์ดํดํ๋์ง ํ์ธํ๋ผ.
ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋ชจ๋ ํต๊ณผํ๋ค๋ ์ฌ์ค๋ง์ผ๋ก ๋ถ์กฑํ๋ค. ์์ฑ์๊ฐ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ๋ฐ๋ฅด๋ค๋ ์ฌ์ค์ ์์์ผ ํ๋ค.
- G22: ๋ ผ๋ฆฌ์ ์์กด์ฑ์ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋๋ฌ๋ด๋ผ
ํ ๋ชจ๋์ด ๋ค๋ฅธ ๋ชจ๋์ ์์กดํ๋ค๋ฉด ๋ฌผ๋ฆฌ์ ์ธ ์์กด์ฑ๋ ์์ด์ผ ํ๋ค. ๋ ผ๋ฆฌ์ ์ธ ์์กด์ฑ๋ง์ผ๋ก๋ ๋ถ์กฑํ๋ค. ์์กดํ๋ ๋ชจ๋์ด ์๋ ๋ชจ๋์ ๋ํด ๋ญ๊ฐ๋ฅผ ๊ฐ์ ํ๋ฉด (์ฆ, ๋ ผ๋ฆฌ์ ์ผ๋ก ์์กดํ๋ฉด) ์ ๋๋ค. ์์กดํ๋ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ช ์์ ์ผ๋ก ์์ฒญํ๋ ํธ์ด ์ข๋ค.
- G23: If/Else ํน์ Switch/Case ๋ฌธ๋ณด๋ค ๋คํ์ฑ์ ์ฌ์ฉํ๋ผ
3์ฅ์์๋ ์ ํจ์๋ฅผ ์ถ๊ฐํ ํ๋ฅ ์ด ๋์ ์ฝ๋์์๋ switch ๋ฌธ์ด ๋ ์ ํฉํ๋ค ์ฃผ์ฅํ๋ค.
์ด์ ๋ก๋ ์ฒซ์งธ, ๋น์ฅ์ ์์ฌ์ด ์ ํ์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก switch๋ฅผ ์ ํํ๊ธฐ ์ ์ ๋คํ์ฑ์ ๋จผ์ ๊ณ ๋ คํ๋ผ
๋์งธ, ์ ํ๋ณด๋ค ํจ์๊ฐ ๋ ์ฝ๊ฒ ๋ณํ๋ ๊ฒฝ์ฐ๋ ๊ทนํ ๋๋ฌผ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ชจ๋ switch๋ฌธ์ ์์ฌํด์ผ ํ๋ค.
์ ์๋ 'switch๋ฌธ ํ๋' ๊ท์น์ ๋ฐ๋ฅธ๋ค. ์ฆ, ์ ํ ์ ํ ํ๋์๋ switch๋ฌธ์ ํ ๋ฒ๋ง ์ฌ์ฉํ๋ค. ๊ฐ์ ์ ํ์ ์ํํ๋ ๋ค๋ฅธ ์ฝ๋์์๋ ๋คํ์ฑ ๊ฐ์ฒด๋ฅผ ์์ฑํด switch ๋ฌธ์ ๋์ ํ๋ค.
- G24: ํ์ค ํ๊ธฐ๋ฒ์ ๋ฐ๋ฅด๋ผ
ํ์ ์ ๊ณ ํ์ค์ ๊ธฐ๋ฐํ ๊ตฌํ ํ์ค์ ๋ฐ๋ผ์ผ ํ๋ค. ํ์ค์ ์ค๋ช ํ๋ ๋ฌธ์๋ ์ฝ๋ ์์ฒด๋ก ์ถฉ๋ถํด์ผ ํ๋ฉฐ ๋ณ๋ ๋ฌธ์๋ฅผ ๋ง๋ค ํ์๋ ์์ด์ผ ํ๋ค. ํ์ด ์ ํ ํ์ค์ ํ์๋ค ๋ชจ๋๊ฐ ๋ฐ๋ผ์ผ ํ๋ค. ์ค์ ๊ดํธ๋ฅผ ๋ฃ๋ ์์น๋ ์ค์ํ์ง ์๋ค. ๋ชจ๋๊ฐ ๋์ํ ์์น์ ๋ฃ๋๋ค๋ ์ฌ์ค์ด ์ค์ํ๋ค. ์ด ์ฌ์ค์ ์ดํดํ ์ ๋๋ก ํ์๋ค์ด ์ฑ์ํด์ผ ํ๋ค.
- G25: ๋งค์ง ์ซ์๋ ๋ช ๋ช ๋ ์์๋ก ๊ต์ฒดํ๋ผ
์ผ๋ฐ์ ์ผ๋ก ์ฝ๋์์ ์ซ์๋ฅผ ์ฌ์ฉํ์ง ๋ง๋ผ. ์๋ก 86,00์ด๋ผ๋ ์ซ์๋ SECOND_PER_DAY๋ผ๋ ์์ ๋ค๋ก ์จ๊ธด๋ค.
'๋งค์ง ์ซ์'๋ผ๋ ์ฉ์ด๋ ๋จ์ง ์ซ์๋ง ์๋ฏธํ์ง ์๋๋ค. ์๋ฏธ๊ฐ ๋ถ๋ช ํ์ง ์๋ ํ ํฐ์ ๋ชจ๋ ๊ฐ๋ฆฌํจ๋ค. ์๋์ ์ฝ๋์์๋ 7777 ๋ง์ด ์๋๋ผ John Doe ๋ํ ๋งค์ง ์ซ์์ด๋ค.
assertEquals(7777, Employee.find("John Doe").employeeNumber());
- G26: ์ ํํ๋ผ
- ๊ฒ์ ๊ฒฐ๊ณผ ์ค ์ฒซ ๋ฒ์งธ ๊ฒฐ๊ณผ๋ง ์ ์ผํ ๊ฒฐ๊ณผ๋ก ๊ฐ์ฃผํ๋ ํ๋์ ์์งํ๋ค.
- ๋ถ๋ ์์์ ์ผ๋ก ํตํ๋ฅผ ํํํ๋ ํ๋์ ๊ฑฐ์ ๋ฒ์ฃ์ ๊ฐ๊น๋ค.
- ๊ฐฑ์ ํ ๊ฐ๋ฅ์ฑ์ด ํฌ๋ฐํ๋ค๊ณ ์ ๊ธ๊ณผ ํธ๋์ญ์ ๊ด๋ฆฌ๋ฅผ ๊ฑด๋๋ฐ๋ ํ๋์ ๊ฒ์ผ๋ฆ์ด๋ค.
- List๋ก ์ ์ธํ ๋ณ์๋ฅผ ArrayList๋ก ์ ์ธํ๋ ํ๋์ ์ง๋์น ์ ์ฝ์ด๋ค.
- ๋ชจ๋ ๋ณ์๋ฅผ protected๋ก ์ ์ธํ ์ฝ๋๋ ๋ฌด์ ์ ํ๋ค.
์ฝ๋์์ ๋ญ๊ฐ๋ฅผ ๊ฒฐ์ ํ ๋๋ ์ ํํ ๊ฒฐ์ ํ๋ค. ๊ฒฐ์ ์ ๋ด๋ฆฌ๋ ์ด์ ์ ์์ธ๋ฅผ ์ฒ๋ฆฌํ ๋ฐฉ๋ฒ์ ๋ถ๋ช ํ ์์์ผ ํ๋ค.
- ํธ์ถํ๋ ํจ์๊ฐ Null์ ๋ฐํํ ์ง๋ ๋ชจ๋ฅธ๋ค๋ฉด ๋ฐ๋์ Null์ ์ ๊ฒํ๋ค.
- ์กฐํ ๊ฒฐ๊ณผ๊ฐ ํ๋๋ฟ์ด๋ผ๊ณ ์ง์ํ๋ค๋ฉด ํ๋์ธ์ง ํ์คํ ํ์ธํ๋ค.
- ํตํ๋ฅผ ๋ค๋ค์ผ ํ๋ด๋ ์ ์๋ฅผ ์ฌ์ฉํ๊ณ ๋ฐ์ฌ๋ฆผ์ ์ฌ๋ฐ๋ก ์ฒ๋ฆฌํ๋ค.
- ๋ณํ(Concurrent) ํน์ฑ์ผ๋ก ์ธํด ๋์์ ๊ฐฑ์ ํ ๊ฐ๋ฅ์ฑ์ด ์๋ค๋ฉด ์ ์ ํ ์ ๊ธ ๋ฉ์ปค๋์ฆ์ ๊ตฌํํ๋ค.
์ฝ๋์์ ๋ชจํธ์ฑ๊ณผ ๋ถ์ ํ์ ์๊ฒฌ์ฐจ๋ ๊ฒ์ผ๋ฆ์ ๊ฒฐ๊ณผ์ด๋ค. ์ด๋ ์ชฝ์ด๋ ์ ๊ฑฐํด์ผ ๋ง๋ ํ๋ค.
- G27: ๊ด๋ก๋ณด๋ค ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ผ
์ค๊ณ ๊ฒฐ์ ์ ๊ฐ์ ํ ๋๋ ๊ท์น๋ณด๋ค ๊ด๋ก๋ฅผ ์ฌ์ฉํ๋ค. ๋ช ๋ช ๊ด๋ก๋ ์ข์ง๋ง ๊ตฌ์กฐ ์์ฒด๋ก ๊ฐ์ ํ๋ฉด ๋ ์ข๋ค.
์๋ก Enum๋ณ์๊ฐ ์ ๊ตฌ์ฑ๋ switch/case ๋ฌธ๋ณด๋ค ์ถ์ ๋ฉ์๋๊ฐ ์๋ ๊ธฐ์ด ํด๋์ค๊ฐ ๋ ์ข๋ค. switch/case ๋ฌธ์ ๋งค๋ฒ ๋๊ฐ์ด ๊ตฌํํ๊ฒ ๊ฐ์ ํ๊ธฐ๋ ์ด๋ ต์ง๋ง, ํ์ ํด๋์ค๋ ์ถ์ ๋ฉ์๋๋ฅผ ๋ชจ๋ ๊ตฌํํ์ง ์์ผ๋ฉด ์ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
- G28: ์กฐ๊ฑด์ ์บก์ํํ๋ผ
๋ถ์ธ ๋ ผ๋ฆฌ๋ ์ดํดํ๊ธฐ ์ด๋ ต๋ค ์กฐ๊ฑด์ ์๋๋ฅผ ๋ถ๋ช ํ ๋ฐํ๋ ํจ์๋ก ํํํ๋ผ.
- G29: ๋ถ์ ์กฐ๊ฑด์ ํผํ๋ผ
๋ถ์ ์กฐ๊ฑด์ ๊ธ์ ์กฐ๊ฑด๋ณด๋ค ์ดํดํ๊ธฐ ์ด๋ ต๋ค. ๊ฐ๋ฅํ๋ฉด ๊ธ์ ์กฐ๊ฑด์ผ๋ก ํํํ๋ค.
- G30: ํจ์๋ ํ ๊ฐ์ง๋ง ํด์ผ ํ๋ค.
ํจ์๋ ๋ฐ๋์ ํ ๊ฐ์ง ์๋ฌด๋ง ์ํํ๋๋ก ํ๋ค.
- G31: ์จ๊ฒจ์ง ์๊ฐ์ ์ธ ๊ฒฐํฉ
๋๋ก๋ ์๊ฐ์ ์ธ ๊ฒฐํฉ์ด ํ์ํ๋ค. ํ์ง๋ง ์๊ฐ์ ์ธ ๊ฒฐํฉ์ ์จ๊ฒจ์๋ ์ ๋๋ค. ํจ์ ์ธ์๋ฅผ ์ ์ ํ ๋ฐฐ์นํด ํจ์๊ฐ ํธ์ถ๋๋ ์์๋ฅผ ๋ช ๋ฐฑํ ๋๋ฌ๋ธ๋ค.
์๋ ์ฝ๋๋ ์ฃผ์๊ณผ ๊ฐ์ด 1,2,3 ์์๋ก ์คํ๋์ด์ผ ํ๋ค. ํ์ง๋ง 2 ๋ฒ์งธ๊ฐ ๋จผ์ ์คํ์ด ๊ฐ๋ฅํ๋๋ก ์ค๊ณ๋์ด ์๋ค.
public class MoogDiver {
Gradient gradient;
List<Spline> splines;
public void dive(String reason){
saturateGradient(); //1
reticulateSplines(); //2
diveForMoog(reason) //3
}
}
์์ ์ฝ๋๋ฅผ ์๋์ ๊ฐ์ด ๋ณ๊ฒฝํ๋ฉด ์ผ์ข ์ ์ฐ๊ฒฐ ์์๋ฅผ ์์ฑํด ์๊ฐ์ ์ธ ๊ฒฐํฉ์ ๋ ธ์ถํ๋ค.
๊ฐ ํจ์๊ฐ ๋ด๋์ ๊ฒฐ๊ณผ๋ ๋ค์ ํจ์์ ํ์ํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์์๋ฅผ ๋ฐ๊ฟ ํธ์ถํ ์๊ฐ ์๋ค.
public void dive(String reason){
Gradient gradient = saturateGradient();
List<Spline> splines = reticulateSplines(gradient);
diveForMoog(splines, reason)
}
ํจ์๊ฐ ๋ณต์กํด์ง ์ ์๋ค. ํ์ง๋ง ์๋์ ์ผ๋ก ์ถ๊ฐํ ๊ตฌ๋ฌธ์ ์ธ ๋ณต์ก์ฑ์ด ์๋ ์๋ ์๊ฐ์ ์ธ ๋ณต์ก์ฑ์ ๋๋ฌ๋ธ ์ ์ด๋ค.
- G32: ์ผ๊ด์ฑ์ ์ ์งํ๋ผ
์ฝ๋ ๊ตฌ์กฐ๋ฅผ ์ก์ ๋๋ ์ด์ ๋ฅผ ๊ณ ๋ฏผํ๋ผ. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด์ ๋ฅผ ์ฝ๋ ๊ตฌ์กฐ๋ก ๋ช ๋ฐฑํ ํํํ๋ผ. ๊ตฌ์กฐ์ ์ผ๊ด์ฑ์ด ์์ด ๋ณด์ธ๋ค๋ฉด ๋จ๋ค์ด ๋ง๋๋ก ๋ฐ๊ฟ๋ ๊ด์ฐฎ๋ค๊ณ ์๊ฐํ๋ค.
- G33: ๊ฒฝ๊ณ ์กฐ๊ฑด์ ์บก์ํํ๋ผ
๊ฒฝ๊ณ ์กฐ๊ฑด์ ํ ๊ณณ์์ ๋ณ๋๋ก ์ฒ๋ฆฌํ๋ค.
// X
foo(level + 1);
// O
int nextlevel = level + 1;
foo(nextlevel);
- G34: ํจ์๋ ์ถ์ํ ์์ค์ ํ ๋จ๊ณ๋ง ๋ด๋ ค๊ฐ์ผ ํ๋ค.
ํจ์ ๋ด ๋ชจ๋ ๋ฌธ์ฅ์ ์ถ์ํ ์์ค์ด ๋์ผํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ถ์ํ ์์ค์ ํจ์ ์ด๋ฆ์ด ์๋ฏธํ๋ ์์ ๋ณด๋ค ํ ๋จ๊ณ๋ง ๋ฎ์์ผ ํ๋ค.
์ถ์ํ ์์ค ๋ถ๋ฆฌ๋ ๋ฆฌํํฐ๋ง์ ์ํํ๋ ๊ฐ์ฅ ์ค์ํ ์ด์ ์ค ํ๋์ด๋ฉฐ ์ ๋๋ก ํ๊ธฐ์ ๊ฐ์ฅ ์ด๋ ค์ด ์์ ์ค ํ๋์ด๋ค.
ํจ์์์ ์ถ์ํ ์์ค์ ๋ถ๋ฆฌํ๋ฉด ์์ ๋๋ฌ๋ด์ง ์์๋ ์๋ก์ด ์ถ์ํ ์์ค์ด ๋๋ฌ๋๋ ๊ฒฝ์ฐ๊ฐ ๋น๋ฒํ๋ค.
- G35: ์ค์ ์ ๋ณด๋ ์ต์์ ๋จ๊ณ์ ๋ฌ๋ผ
์ถ์ํ ์ต์์ ๋จ๊ณ์ ๋ฌ์ผ ํ ๊ธฐ๋ณธ๊ฐ ์์๋ ์ค์ ๊ด๋ จ ์์๋ฅผ ์ ์ฐจ์ ํจ์์ ์จ๊ฒจ์๋ ์ ๋๋ค. ๋์ ๊ณ ์ฐจ์ ํจ์์์ ์ ์ฐจ์ ํจ์๋ฅผ ํธ์ถํ ๋ ์ธ์๋ก ๋๊ธด๋ค.
์ค์ ๊ด๋ จ ์์๋ ์ต์์ ๋จ๊ณ์ ๋๋ค. ๊ทธ๋์ผ ๋ณ๊ฒฝํ๊ธฐ๋ ์ฝ๋ค. ์ค์ ๊ด๋ จ ๋ณ์๋ ๋๋จธ์ง ์ฝ๋์ ์ธ์๋ก ๋๊ธด๋ค. ์ ์ฐจ์ ํจ์์ ์์ ๊ฐ์ ์ ์ํ๋ฉด ์ ๋๋ค.
- G36: ์ถ์ด์ ํ์์ ํผํ๋ผ.
์ผ๋ฐ์ ์ผ๋ก ํ ๋ชจ๋์ ์ฃผ๋ณ ๋ชจ๋์ ๋ชจ๋ฅผ์๋ก ์ข๋ค. ์๋ก A๊ฐ B๋ฅผ ์ฌ์ฉํ๊ณ B๊ฐ C๋ฅผ ์ฌ์ฉํ๋๋ผ๋ A๊ฐ C๋ฅผ ์์์ผ ํ ํ์๋ ์๋ค.
์ด๋ฅผ ๋๋ฏธํฐ ๋ฒ์น์ด๋ผ ํ๋ค. ์ค์ฉ์ฃผ์ ํ๋ก๊ทธ๋๋จธ๋ค์ '๋ถ๋๋ผ ํ๋ ์ฝ๋ ์์ฑ(Writing Shy Code')์ด๋ผ๊ณ ๋ ํ๋ค. ํต์ฌ์ ์์ ์ด ์ง์ ์ฌ์ฉํ๋ ๋ชจ๋๋ง ์์์ผ ํ๋ค.
๋ด๊ฐ ์ฌ์ฉํ๋ ๋ชจ๋์ด ๋ด๊ฒ ํ์ํ ์๋น์ค๋ฅผ ๋ชจ๋ ์ ๊ณตํด์ผ ํ๋ค. ์ํ๋ ๋ฉ์๋๋ฅผ ์ฐพ๋๋ผ ๊ฐ์ฒด ๊ทธ๋ํ๋ฅผ ๋ฐ๋ผ ์์คํ ์ ํ์ํ ํ์๊ฐ ์์ด์ผ ํ๋ค.
.์๋ฐ
- J1: ๊ธด import ๋ชฉ๋ก์ ํผํ๊ณ ์์ผ๋์นด๋๋ฅผ ์ฌ์ฉํ๋ผ
ํจํค์ง์์ ํด๋์ค๋ฅผ ๋ ์ด์ ์ฌ์ฉํ๋ค๋ฉด ์์ผ๋์นด๋๋ฅผ ์ฌ์ฉํด ํจํค์ง ์ ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ผ.
๋ช ์์ ์ธ import ๋ฌธ์ ๊ฐํ ์์กด์ฑ์ ์์ฑํ์ง๋ง ์์ผ๋์นด๋๋ ๊ทธ๋ ์ง ์๋ค. ๋ช ์์ ์ผ๋ก ํด๋์ค๋ฅผ import ํ๋ฉด ๊ทธ ํด๋์ค๋ ๋ฐ๋์ ์กด์ฌํด์ผ ํ์ง๋ง ์์ผ๋์นด๋๋ก ํจํค์ง๋ฅผ ์ง์ ํ๋ฉด ํด๋์ค๊ฐ ๋ฐ๋์ ์กด์ฌํ ํ์๋ ์๋ค. import ๋ฌธ์ ํจํค์ง๋ฅผ ๋จ์ํ ๊ฒ์ ๊ฒฝ๋ก์ ์ถ๊ฐํ๋ฏ๋ก ์ง์ ํ ์์กด์ฑ์ด ์๊ธฐ์ง ์๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๋ชจ๋ ๊ฐ ๊ฒฐํฉ์ฑ์ด ๋ฎ์์ง๋ค. ๋ ๊ฑฐ์ ์ฝ๋๋ผ๋ ์์ผ๋์นด๋ import ๋ฌธ์ ์ฌ์ฉํ๋ ํธ์ด ์ข๋ค.
- J2: ์์๋ ์์ํ์ง ์๋๋ค.
์์๋ฅผ ์์ ๊ณ์ธต ๋งจ ์์ ์จ๊ฒจ๋๋ ๊ฒ์ ๋์ฐํ ๊ดํ์ด๋ค. ์ธ์ด์ ๋ฒ์ ๊ท์น์ ์์ด๋ ํ์๋ค. ๋์ static import๋ฅผ ์ฌ์ฉํด๋ผ
- J3: ์์ ๋ Enum
int ๋ณด๋ค ํจ์ฌ ๋ ์ ์ฐํ๊ณ ์์ ์ ์ธ ๊ฐ๋ ฅํ ๋๊ตฌ์ธ Enum์ ํ์ฉํด๋ผ.
.์ด๋ฆ
- N1: ์์ ์ ์ธ ์ด๋ฆ์ ์ฌ์ฉํ๋ผ
์ํํธ ์จ์ด์ ๊ฐ๋ ์ฑ์ 90%๋ ์ด๋ฆ์ด ๊ฒฐ์ ํ๋ค. ์ด๋ฆ์ ์ฑ๊ธํ๊ฒ ์ ํ์ง ์๋๋ค. ์์ ์ ์ธ ์ด๋ฆ์ ์ ์คํ๊ฒ ๊ณ ๋ฅธ๋ค. ์ํํธ์จ์ด๊ฐ ์งํํ๋ฉด ์๋ฏธ๋ ๋ณํ๋ฏ๋ก ์ ํํ ์ด๋ฆ์ด ์ ํฉํ์ง ์์ฃผ ๋๋์๋ณธ๋ค.
- N2: ์ ์ ํ ์ถ์ํ ์์ค์์ ์ด๋ฆ์ ์ ํํ๋ผ
๊ตฌํ์ ๋๋ฌ๋ด๋ ์ด๋ฆ์ ํผํด๋ผ. ์์ ๋์ ํด๋์ค๋ ํจ์๊ฐ ์์นํ๋ ์ถ์ํ ์์ค์ ๋ฐ์ํ๋ ์ด๋ฆ์ ์ ํํด๋ผ.
- N3: ๊ฐ๋ฅํ๋ค๋ฉด ํ์ค ๋ช ๋ช ๋ฒ์ ์ฌ์ฉํ๋ผ
๊ธฐ์กด ๋ช ๋ช ๋ฒ์ ์ฌ์ฉํ๋ ์ด๋ฆ์ ์ดํดํ๊ธฐ ๋ ์ฝ๋ค. ์๋ก Decorator ํจํด์ ํ์ฉํ๋ค๋ฉด ํด๋์ค ์ด๋ฆ์ Decorator๋ผ๋ ๋จ์ด๋ฅผ ์ฌ์ฉํ๋ค.
ํจํด์ ํ ๊ฐ์ง ํ์ค์ ๋ถ๊ณ ํ๋ค. ์๋ก ์๋ฐ์์ ๊ฐ์ฒด๋ฅผ ๋ฌธ์์ด๋ก ๋ฐํํ๋ ํจ์๋ toString์ด๋ผ๋ ์ด๋ฆ์ ๋ง์ด ์ด๋ค. ์ด๋ฐ ์ด๋ฆ์ ๊ด๋ก๋ฅผ ๋ฐ๋ฅด๋ ํธ์ด ์ข๋ค.
ํํ ํ๋ง๋ค ํน์ ํ๋ก์ ํธ์ ์ ์ฉํ ํ์ค์ ๋๋ฆ๋๋ก ๊ณ ์ํ๋ค. ์๋ฆญ ์๋ฐ์ค๋ ์ด๋ฅผ ํ๋ก์ ํธ์ ์ ๋น์ฟผํฐ์ค ์ธ์ด๋ผ ๋ถ๋ฅธ๋ค. ์ฝ๋๋ ์ด ์ธ์ด์ ์ํ๋ ์ฉ์ด๋ฅผ ์ด์ฌํ ์จ์ผ ํ๋ค. ํ๋ก์ ํธ์ ์ ํจํ ์๋ฏธ๊ฐ ๋ด๊ธด ์ด๋ฆ์ ๋ง์ด ์ฌ์ฉํ ์๋ก ๋ ์๊ฐ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฌ์์ง๋ค.
- N4: ๋ช ํํ ์ด๋ฆ
ํจ์๋ ๋ณ์์ ๋ชฉ์ ์ ๋ช ํํ ๋ฐํ๋ ์ด๋ฆ์ ์ ํํ๋ค. ํจ์๊ฐ ํ๋ ์ผ์ ๋ถ๋ช ํ ํ์ ํ ์ ์๋๋ก ํ๋ค.
- N5: ๊ธด ๋ฒ์๋ ๊ธด ์ด๋ฆ์ ์ฌ์ฉํ๋ผ
์ด๋ฆ ๊ธธ์ด๋ ๋ฒ์ ๊ธธ์ด์ ๋น๋กํด์ผ ํ๋ค. ๋ฒ์๊ฐ ์์ผ๋ฉด ์์ฃผ ์งง์ ์ด๋ฆ์ ์ฌ์ฉํด๋ ๊ด์ฐฎ๋ค. ํ์ง๋ง ๋ฒ์๊ฐ ๊ธธ์ด์ง๋ฉด ๊ธด ์ด๋ฆ์ ์ฌ์ฉํ๋ค.
๋ฒ์๊ฐ 5์ค ์ํ์ด๋ผ๋ฉด i๋ j ๊ฐ์ ๋ณ์ ์ด๋ฆ๋ ๊ด์ฐฎ๋ค. ์งง์ ๋ฒ์์์ ๊ธด ์ด๋ฆ์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์คํ๋ ค ํท๊ฐ๋ฆด ์ ์๋ค. ๋ฐ๋ฉด ์ด๋ฆ์ด ์งง์ ๋ณ์๋ ํจ์๋ ๋ฒ์๊ฐ ๊ธธ์ด์ง๋ฉด ์๋ฏธ๋ฅผ ์๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ด๋ฆ ๋ฒ์๊ฐ ๊ธธ์๋ก ์ด๋ฆ์ ์ ํํ๊ณ ๊ธธ๊ฒ ์ง๋๋ค.
- N6: ์ธ์ฝ๋ฉ์ ํผํ๋ผ
์ด๋ฆ์ ์ ํ ์ ๋ณด๋ ๋ฒ์ ์ ๋ณด๋ฅผ ๋ฃ์ด์๋ ์ ๋๋ค. m_, s_์ ๊ฐ์ ์ ๋์ด๋ ๋ถํ์ํ๋ค. ํ๊ฐ๋ฆฌ์ ํ๊ธฐ๋ฒ์ ์ค์ผ์์ ์ด๋ฆ์ ๋ณดํธํ๋ผ.
- N7: ์ด๋ฆ์ผ๋ก ๋ถ์ ํจ๊ณผ๋ฅผ ์ค๋ช ํ๋ผ
ํจ์, ๋ณ์, ํด๋์ค๊ฐ ํ๋ ์ผ์ ๋ชจ๋ ๊ธฐ์ ํ๋ ์ด๋ฆ์ ์ฌ์ฉํ๋ค. ์ด๋ฆ์ ๋ถ์ ํจ๊ณผ๋ฅผ ์จ๊ธฐ์ง ์๋๋ค.
. ํ ์คํธ
- T1: ๋ถ์ถฉ๋ถํ ํ ์คํธ
ํ ์คํธ ์ผ์ด์ค๋ ์ ์ฌ์ ์ผ๋ก ๊นจ์ง ๋งํ ๋ถ๋ถ์ ๋ชจ๋ ํ ์คํธํด์ผ ํ๋ค. ํ ์คํธ ์ผ์ด์ค๊ฐ ํ์ธํ์ง ์๋ ์กฐ๊ฑด์ด๋ ๊ฒ์ฆํ์ง ์๋ ๊ณ์ฐ์ด ์๋ค๋ฉด ๊ทธ ํ ์คํธ๋ ๋ถ์์ ํ๋ค.
- T2: ์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ผ
์ปค๋ฒ๋ฆฌ์ง ๋๊ตฌ๋ ํ ์คํธ๊ฐ ๋น ๋จ๋ฆฌ๋ ๊ณต๋ฐฑ์ ์๋ ค์ค๋ค.
- T3: ์ฌ์ํ ํ ์คํธ๋ฅผ ๊ฑด๋๋ฐ์ง ๋ง๋ผ
์ฌ์ํ ํ ์คํธ๋ ์ง๊ธฐ ์ฝ๋ค. ์ฌ์ํ ํ ์คํธ๊ฐ ์ ๊ณตํ๋ ๋ฌธ์์ ๊ฐ์น๋ ๊ตฌํ์ ๋๋ ๋น์ฉ์ ๋์ด์ ๋ค.
- T4: ๋ฌด์ํ ํ ์คํธ๋ ๋ชจํธํจ์ ๋ปํ๋ค.
๋ถ๋ฌธ ๋ช ํ ์๊ตฌ์ฌํญ์ผ๋ก ํ๋ก๊ทธ๋จ ๋์๊ฐ๋ ๋ฐฉ์์ ํ์ฉํ๊ธฐ ์ด๋ ค์ธ ๋๋ ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ฃผ์์ผ๋ก ์ฒ๋ฆฌํ๊ฑฐ๋ ํ ์คํธ ์ผ์ด์ค์ @Ignore๋ฅผ ๋ถ์ฌ ํํํ๋ค. ์ ํ ๊ธฐ์ค์ ๋ชจํธํจ์ด ์กด์ฌํ๋ ํ ์คํธ ์ผ์ด์ค๊ฐ ์ปดํ์ผ์ด ๊ฐ๋ฅํ์ง ๋ถ๊ฐ๋ฅํ์ง์ ๋ฌ๋ ค์๋ค.
- T5: ๊ฒฝ๊ณ ์กฐ๊ฑด์ ํ ์คํธํ๋ผ
๊ฒฝ๊ณ ์กฐ๊ฑด์ ๊ฐ๋ณํ ์ ๊ฒฝ ์จ์ ํ ์คํธํ๋ค. ์๊ณ ๋ฆฌ์ฆ์ ์ค์ ์กฐ๊ฑด์ ์ฌ๋ฐ๋ก ์ง ๋๊ณ ๊ฒฝ๊ณ ์กฐ๊ฑด์์ ์ค์ํ๋ ๊ฒฝ์ฐ๊ฐ ํํ๋ค.
- T6: ๋ฒ๊ทธ ์ฃผ๋ณ์ ์ฒ ์ ํ ํ ์คํธํ๋ผ
๋ฒ๊ทธ๋ ์๋ก ๋ชจ์ด๋ ๊ฒฝํฅ์ด ์๋ค. ํ ํจ์์์ ๋ฒ๊ทธ๋ฅผ ๋ฐ๊ฒฌํ๋ค๋ฉด ๊ทธ ํจ์๋ฅผ ์ฒ ์ ํ ํ ์คํธํ๋ ํธํ ์ข๋ค. ๋ค๋ฅธ ๋ฒ๊ทธ๋ ๋ฐ๊ฒฌ๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค.
- T7: ์คํจ ํจํด์ ์ดํด๋ผ
๋๋ก๋ ํ ์คํธ ์ผ์ด์ค๊ฐ ์คํจํ๋ ํจํด์ผ๋ก ๋ฌธ์ ๋ฅผ ์ง๋จํ ์ ์๋ค. ํ ์คํธ ์ผ์ด์ค๋ฅผ ์ต๋ํ ๊ผผ๊ผผํ ์ง๋ผ๋ ์ด์ ๋ ์ฌ๊ธฐ ์๋ค. ํฉ๋ฆฌ์ ์ธ ์์๋ก ์ ๋ ฌ๋ ๊ผผ๊ผผํจ ํ ์คํธ ์ผ์ด์ค๋ ์คํจ ํจํด์ ๋๋ฌ๋ธ๋ค.
- T8: ํ ์คํธ ์ปค๋ฒ๋ฆฌ์ง ํจํด์ ์ดํด๋ผ
ํต๊ณผํ๋ ํ ์คํธ๊ฐ ์คํํ๊ฑฐ๋ ์คํํ์ง ์๋ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด ์คํจํ๋ ํ ์คํธ ์ผ์ด์ค์ ์คํจ ์์ธ์ด ๋๋ฌ๋๋ค.
- T9: ํ ์คํธ๋ ๋นจ๋ผ์ผ ํ๋ค.
๋๋ฆฐ ํ ์คํธ ์ผ์ด์ค๋ ์คํํ์ง ์๊ฒ ๋๋ค. ์ต๋ํ ๋นจ๋ฆฌ ๋์๊ฐ ์ ์๊ฒ ํ๋ค.
.๊ฒฐ๋ก
์ด ์ฅ์์ ์๊ฐํ ํด๋ฆฌ์คํฑ๊ณผ ๋์ ๋ชฉ๋ก์ด ์์ ํ๋ค ํ ์ ์๋ค. ํ์ง๋ง ์์ ํ ๋ชฉ๋ก์ด ๋ชฉํ๊ฐ ์๋๋ค. ๊ฐ์น ์ฒด๊ณ๋ฅผ ํผ๋ ฅํ ๋ฟ์ด๋ค. ์ผ๊ตฐ์ ๊ท์น๋ง ๋ฐ๋ฅธ๋ค๊ณ ๊นจ๋ํ ์ฝ๋๊ฐ ์ป์ด์ง์ง ์๋๋ค. ํด๋ฆฌ์คํฑ ๋ชฉ๋ก์ ์ตํ๋ค๊ณ ์ํํธ์จ์ด ์ฅ์ธ์ด ๋์ง๋ ๋ชปํ๋ค. ์ ๋ฌธ๊ฐ ์ ์ ๊ณผ ์ฅ์ธ ์ ์ ์ ๊ฐ์น์์ ๋์จ๋ค. ๊ทธ ๊ฐ์น์ ๊ธฐ๋ฐํ ๊ท์จ๊ณผ ์ ์ ๊ฐ ํ์ํ๋ค.
๐ ๋๋์ .
- ๋ง์ง๋ง ์ฅ์ด์ฌ์ ๊ทธ๋ฐ์ง ์ ๋ฐ์ ์ผ๋ก ์ค์ํ ๋ด์ฉ์ ํต์ฌ๋ค์ ๊ฐ๋ตํ ์ค๋ช ์ ํด์ฃผ์ด ์ ๋ฆฌ๊ฐ ๋๋ ์ฅ์ด์๋ค.
- ๋ชฉ๋ก์ ์ฝํ๋ค ํ์ฌ ์ฅ์ธ์ด ๋์ง ๋ชปํ๋ค ํ์์ง๋ง. ์์ง ๋ชฉ๋ก๋ ์ ๋๋ก ์ ์ฉ์ ํด๋ณธ ๊ฒฝํ์ด ์์ด. ์ฅ์ธ์ ๋ ผํ๊ธฐ ์ ์ ๋จผ์ ๊ฒฝํ์ ํด๋ณด์ผ๊ฒ ๋ค...
'Study > CleanCode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Study][CleanCode - 5] ํ๊ณ (0) | 2022.08.17 |
---|---|
[Study][CleanCode - 4] 16. SerialDate ๋ฆฌํํฐ๋ง (0) | 2022.08.14 |
[Study][CleanCode - 4] 15. JUnit ๋ค์ฌ๋ค๋ณด๊ธฐ (0) | 2022.08.11 |
[Study][CleanCode - 4] 14. ์ ์ง์ ์ธ ๊ฐ์ (0) | 2022.08.10 |
[Study][CleanCode - 3] 13. ๋์์ฑ (0) | 2022.08.10 |