๋ฆฌํฉํ ๋ง์ด๋ ๋ฌด์์ธ๊ฐ?
- ์ธ๋ถ ๋์์ ๋ฐ๊พธ์ง ์์ผ๋ฉด์ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
- ์ฝ๋๊ฐ ์์ฑ๋ ํ์ ๋์์ธ์ ๊ฐ์ ํ๋ ์์ ์ ๋๋ค.
- ๋ชจ๋ ๊ฒ์ ๋ฏธ๋ฆฌ ์๊ฐํ๊ธฐ๋ณด๋ค๋ ๊ฐ๋ฐ์ ํ๋ฉด์ ์ง์์ ์ผ๋ก ์ข์ ๋์์ธ์ ์ฐพ๋๋ค.
- ๋ฉ์๋ ๋ด์ ์ง์ญ๋ณ์์ parameter๋ฅผ ์ฃผ์ ๊น๊ฒ ๋ณผ ํ์๊ฐ ์๋ค.
- ๊ฐ์ด ์์ ๋์ง ์๋ ๋ณ์๋ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธธ ์ ์๋ค.
- ๊ฐ์ด ์์ ๋๋ ๋ณ์๋ ์ฃผ์๊ฐ ํ์ํ๋ค. ๋ณํ๋๋ ๋ถ๋ถ์ ํจ์๋ก ์ถ์ถํ์ฌ ๋ฆฌํด ๊ฐ์ผ๋ก ๋๋ ค์ค ์ ์๋ค.
๋ฆฌํฉํ ๋ง์ ์์ ๋จ๊ณ๋ก ๋๋์ด ํ๋ก๊ทธ๋จ์ ๋ณ๊ฒฝํ๋ค.
- Naming ์ค์์ฑ. ์ปดํจํฐ๊ฐ ์ดํดํ๋ ์ฝ๋๋ ๋๊ตฌ๋ ์์ฑํ ์ ์๋ค. ์ข์ ํ๋ก๊ทธ๋๋จธ๋ ์ฌ๋์ด ์ดํดํ ์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
- ํด๋์ค์ ๋ฉ์๋๋ ํด๋์ค์ ๋ณ์๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค. ํด๋์ค์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ๊ณ ์์ง ์๋๋ค๋ฉด ์ฌ์ฉํ๊ณ ์๋ ๋ณ์์ชฝ์ผ๋ก ๋ฉ์๋๋ ์์ง์ฌ์ผ ํ๋ค.
- ์์๋ณ์๋ ๊ฐ๋ฅํ๋ฉด ์ ๊ฑฐํ๋ ๊ฒ์ด ์ข๋ค. ์์๋ณ์๋ ์ข ์ข ์ธ๋ฐ์์ด ๋ง์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋ง๋๋ฏ๋ก ๋ฌธ์ ๊ฐ ๋๋ค.
- ์์๋ณ์๋ฅผ ํ๋์ ๋ฉ์๋๋ก ๊ตฌํํ์ฌ ๋ฆฌํฉํ ๋ง ํ์.
- ๋ฆฌํฉํ ๋งํ๋ ๊ณผ์ ์์ ์๊ณ ๋ฆฌ์ฆ์ ์ผ๋ก ์ฑ๋ฅ์ด ๋ ์ ์ข์ ์ง ์ ์๋ค. ํ์ง๋ง ์ด๋ ์๊ณ ๋ฆฌ์ฆ ๋ถ๋ถ์ด ์์ ๋์ด์ผ ํ๋์ง ๋ช ํํ๊ฒ ๋ณด์ด๊ฒ ๋์ด ์ต์ ํํ๊ธฐ ๋ ์ฌ์ด ํํ๋ก ๋ณ๊ฒฝ๋๋ ์ฅ์ ์ด ์๋ค.
- ๋ค๋ฅธ ๊ฐ์ฒด์ ์์ฑ์ ๊ธฐ๋ฐ์ผ๋ก ํ switch๋ฌธ์ ์ข์ง์๋ค. ๊ทธ ๋ถ๋ถ์ ํจ์๋ก ์ถ์ถํ์ฌ ์์ ์ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ๋ฆฌํฉํ ๋งํด์ผํ๋ค.
- ๋ฉ์๋์์ ๋๊ฐ์ ํด๋์ค ๋ณ์๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค๋ฉด ๋ณํํ๊ธฐ ์ฌ์ด์ชฝ์ผ๋ก ๋ฉ์๋๋ฅผ ์ด๋์์ผ ๋ณํ์ ํญ์ ์ต๋ํ ์๊ฒ ํ์.
- ๊ธฐ๋ฅ์ด ํ์ชฝ์ผ๋ก ๋ชจ์ฌ์ง ํด๋์ค๋ฅผ ์ถ์ํํ์ฌ ์์๊ด๊ณ๋ก ํํํ ์ ์๋ค.
- [state ํจํด / strategyํจํด] ์ํ๋ฅผ ๋ํ๋ด๋๊ฐ? ์๊ณ ๋ฆฌ์ฆ์ ๋ํ๋ด๋๊ฐ์ ๋ฐ๋ผ ์ด๋ฆ์ด ๋ฐ๋ ์ ์๋ค.
- ํ ์คํธ โ ๋ฆฌํฉํ ๋ง โ ํ ์คํธ โ ๋ฆฌํฉํ ๋ง โ ํ ์คํธ.. ์ ์ง์ ์ธ ๊ฐ์
๋ฆฌํฉํ ๋ง์ ์๋ฆฌ.
- ๋ฆฌํฉํ ๋ง ํ๋ค(Refactoring) - ์ผ๋ จ์ ๋ฆฌํฉํ ๋ง์ ์ ์ฉํ์ฌ ๊ฒ์ผ๋ก ๋ณด์ด๋ ๋์์ ๋ณํ ์์ด ์ํํธ์จ์ด ๊ตฌ์กฐ๋ฅผ ๋ฐ๊พธ๋ค.
์ํํธ์จ์ด๋ฅผ ๋ณด๋ค ์ฝ๊ฒ ์ดํดํ ์ ์๊ณ , ์ ์ ๋น์ฉ์ผ๋ก ์์ ํ ์ ์๋๋ก ๊ฒ์ผ๋ก ๋ณด์ด๋ ๋์์ ๋ณํ ์์ด ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ
๋ชฉ์
- ๋ฆฌํฉํ ๋ง์ ๋ชฉ์ ์ ์ํํธ์จ์ด๋ฅผ ๋ณด๋ค ์ดํดํ๊ธฐ ์ฝ๊ณ , ์์ ํ๊ธฐ ์ฝ๋๋ก ๋ง๋๋ ๊ฒ์ด๋ค.
- ๋ฆฌํฉํ ๋ง์ ๊ฒ์ผ๋ก ๋ณด์ด๋ ์ํํธ์จ์ด์ ๊ธฐ๋ฅ์ ๋ณ๊ฒฝํ์ง ์๋๋ค๋ ๊ฒ์ด๋ค.
๋ ๊ฐ์ ๋ชจ์
- ๋๊ฐ์ง ๊ตฌ๋ณ๋ ์์ (๊ธฐ๋ฅ ์ถ๊ฐ์ ๋ฆฌํฉํ ๋ง)์ ์ํด ์๊ฐ์ ๋๋ ์ผ ํ๋ค
- ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋๋ ๊ธฐ์กด ์ฝ๋๋ฅผ ๊ฑด๋๋ ค์๋ ์๋๊ณ ๋จ์ง ์๋ก์ด ๊ธฐ๋ฅ๋ง ์ถ๊ฐํด์ผ ํ๋ค
- ๋ฆฌํฉํ ๋ง์ ํ ๋๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํด์๋ ์๋๊ณ ๋จ์ง ์ฝ๋์ ๊ตฌ์กฐ๋ณ๊ฒฝ์๋ง ์ ๊ฒฝ์จ์ผ ํ๋ค.
์ ๋ฆฌํฉํ ๋ง์ ํด์ผ ํ๋๊ฐ?
- ์ฝ๋์ ๊ตฌ์กฐ๊ฐ ๋ง๊ฐ์ง๋ ํจ๊ณผ๋ ๋์ ๋๋ค.
- ์ฝ๋์ ๋์์ธ์ ์ ์งํ๋๋ก ๋์์ค๋ค.
- ์ค๋ณต์ ์ ๊ฑฐํจ์ผ๋ก์จ ๊ฐ๊ฐ์ ์์ ์ ๋ํ ์ฝ๋๊ฐ ์ค์ง ํ ๊ณณ์๋ง ์๊ฒ ํ ์ ์๋ค.
- ์ํํธ์จ์ด์ ๋์์ธ์ ๊ฐ์ ์ํจ๋ค.
- ์ํํธ์จ์ด๋ฅผ ๋ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ ๋ค.
- ๋ฒ๊ทธ๋ฅผ ์ฐพ๋๋ก ๋์์ค๋ค.
- ํ๋ก๊ทธ๋จ์ ๋นจ๋ฆฌ ์์ฑํ๋๋ก ๋์์ค๋ค.
์ธ์ ๋ฆฌํฉํ ๋ง์ ํด์ผ ํ๋๊ฐ?
- ์ผ์ง ๊ท์น(3๋ฒ์ ์ค๋ณต / 3๋ฒ์ ๊ฐ์ ํ์๋ฅผ ํ๋ค๋ฉด ๋ฆฌํฉํ ๋ง์ ์งํํ์.)
- ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋ ๋ฆฌํฉํ ๋ง์ ํ์.
- ๋ฒ๊ทธ๋ฅผ ์์ ํด์ผ ํ ๋ ๋ฆฌํฉํ ๋ง์ ํ๋ผ.
- ์ฝ๋ ๊ฒํ (Code Review)๋ฅผ ํ ๋ ๋ฆฌํฉํ ๋ง์ ํ๋ผ.
๋ฆฌํฉํ ๋ง์ ํ ๋์ ๋ฌธ์
- ์๋ํ๋ ๊ฒ๋ณด๋ค ์งง๊ณ , ๋ถํ์คํ๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค
๋ฐฐ๊ฒฝ
- ๋น์ฆ๋์ค ์ดํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์คํค๋ง์ ๋ฐ์ ํ๊ฒ ๊ฒฐํฉ๋์ด ์๋ค.
- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ณ๊ฒฝ์ ์ด๋ ต๊ฒ ํ๋ ์ด์ ์ค์ ํ๋.
์ด๋ป๊ฒ ํด๊ฒฐํ๋ ค๊ณ ๋ ธ๋ ฅํ์๊น..?
- ๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋ชจ๋ธ ์ฌ์ด์ Layer๋ฅผ ์ถ๊ฐํ์ฌ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๋ค.
Benifit
- ๊ฐ์ฒด ๋ชจ๋ธ๊ณผ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๋ชจ๋ธ ๊ฐ๊ฐ์ ๋ ๋ฆฝ์ฑ์ ๋ณด์ฅํ๋ค.
Disadvantage
- ๋ณต์ก๋๊ฐ ๋์์ง ์ ๋ฐ์ ์๋ค.
์ธํฐํ์ด์ค ๋ณ๊ฒฝ
- ๊ธฐ์กด์ Method๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฑด ํธ์ถํ๋ ๋ถ๋ถ์ ์ฐพ์์ ์ผ์ผ์ด ๋ฐ๊พธ๋ฉด ๊ฐ๋ฅํ๋ค.
- ํ์ง๋ง interface๋ ๋ณ๊ฒฝ๋์ผ ํ๋ ๋ถ๋ถ์ด ๋งค์ฐ ํฌ๋ค.
- ๊ธฐ์กด์ interface๋ฅผ ์ ์งํ๋ฉด์ ์๋ก์ด interface๋ฅผ ์ ์งํ ์ ์๋ค.
- @deprecated๋ฅผ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์์๊ฒ ์ฝ๊ฒ ์๋ ค์ค ์ ์๋ค.
- ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์ธํฐํ์ด์ค๋ฅผ ๊ณตํํ์ง ์๋ ๊ฒ์ด๋ค.
- ์๋ฒฝํ๊ฒ ์์ ํ๋ ์ธํฐํ์ด์ค๋ง ๊ณตํ๋ฅผ ์งํํ๊ณ . ๋๋จธ์ง๋ ๊ณตํ๋ฅผ ํ์ง ์๋ ๊ฒ์ ์ถ์ฒํ๋ค.
์ธ์ ๋ฆฌํฉํ ๋ง์ ํ์ง ๋ง์์ผ ํ๋๊ฐ?
- ํ์ฌ์ ์ฝ๋๊ฐ ์๋ํ์ง ์๋๋ค๋ฉด ํ์คํ ์ฌ์์ฑ์ด ํ์ํ ๊ฒฝ์ฐ์ด๋ค.
- ๋ฆฌํฉํ ๋ง์ ํ๊ธฐ ์ ์ ์ฝ๋๊ฐ ์ ๋๋ก ์๋ํด์ผ ํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํ๊ธฐ ๋ฐ๋๋ค.
- ๋ํ ๋ง๊ฐ์ผ์ ๊ฐ๊น์ด ๊ฒฝ์ฐ์๋ ๋ฆฌํฉํ ๋ง์ ํผํด์ผ ํ๋ค.
- ์ด๋ค ์์ ์ ํ๋๋ฐ ๊ณ์ ์๊ฐ์ด ๋ถ์กฑํ ๋ฏ ๋๊ปด์ง๋ค๋ฉด, ๋ณดํต ๋ฆฌํฉํ ๋ง์ด ํ์ํ๋ค๋ ์ ํธ์ด๋ค.
๋ฆฌํฉํ ๋ง๊ณผ ๋์์ธ
- ๋ฆฌํฉํ ๋ง์ ๋์์ธ์ ๋ณด์ํ๋ ํน๋ณํ ์ญํ ์ ํ๋ค.
- ํ๋ก๊ทธ๋๋ฐ์ ํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๋์์ธ์ ๋ํด ์๊ฐํด๋ณด๋ ๊ฒ์ด ๋น์ฉ์ด ๋ง์ด ๋๋ ์ฌ์์ ์ ํผํ๋๋กํ๋๋ฐ ๋์์ด ๋๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
์์คํ ์ด ์ด๋ป๊ฒ ๋์๊ฐ๋์ง ์ ํํ๊ฒ ์๊ณ ์๋ค ํ๋๋ผ๋, ์ถ์ธก๋ง ํ์ง ๋ง๊ณ ์ค์ ๋ก ํผํฌ๋จผ์ค๋ฅผ ์ธก์ ํด๋ณด๋ผ. ๋ฌด์์ธ๊ฐ ๋ฐฐ์ธ ๊ฒ์ด๊ณ , ์ญ์คํ๊ตฌ๋ ์ถ์ธก์ด ํ๋ ธ์ ๊ฒ์ด๋ค.
๋ฆฌํฉํ ๋ง๊ณผ ํผํฌ๋จผ์ค
- ํผํฌ๋จผ์ค๋ ์ค์ํ ๋ถ๋ถ์ด๋ค.
- ํ์ง๋ง ํ๋ฐ๋ถ์์ ์งํํด์ผ ํ ๋ถ๋ถ์ด๊ณ ์์ฃผ ์ฌ์ฉํ๋ ํจ์๋ค ์์ฃผ๋ก ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์งํํด์ผ ํ๋ค.
- ๊ทธ๋ฌ๊ธฐ ์ํด์๋ ํ๋กํ์ผ๋ฌ๋ฅผ ํตํด ์ด๋ ๋ถ๋ถ์ด Hot-spot์ธ์ง ์์๋ด๊ธฐ๋ ํ๋ค.
- ๋ฆฌํฉํ ๋ง์ํ๋ ๋์ ๋จ๊ธฐ์ ์ผ๋ก๋ ์ํํธ์จ์ด๋ฅผ ๋๋ฆฌ๊ฒ ํ์ง๋ง, ์ต์ ํ ๋จ๊ณ์์๋ ์ํํธ์จ์ด๋ฅผ ํ๋ํ๋ ๊ฒ์ ๋ ์ฝ๊ฒ ํ๋ค. ๊ฒฐ๊ตญ ์ด์ต์ด ๋๋ค.