Refactoring์ ํน์ ๋๋ช
์ ์ฑ
์ ๊ณต๋ถํ๋ ๋ฒ
see also HowToStudyDesignPatterns
OOP๋ฅผ ํ๋ ์ํ๋ ํ๋ก๊ทธ๋๋ฐ์ด๋ ์
์ ํ๋ ์ฌ๋์ด๋ผ๋ฉด ์ด ์ฑ
์ ์์ ์ ๊ณต๋ ฅ์ ์๋ ๋จ๊ณ ๋ ๋ฒจ์
์์ผ ์ค ์ ์๋ค. ์์ง๊ตฌ๋ ํ ๊ธฐ์ ์ ์ตํ๋ ๊ฒ์ด ์๋๊ณ ๊ธฐ๊ฐ๊ณผ ๋ด๊ณต์ ์ฆ๊ฐํ๋ ๊ฒ์ด๋ค. ํน์๋ DesignPatterns ์ด์ ์ Refactoring์ ๋ด์ผ ํ๋ค๊ณ ๋ ํ๋ค. ์ด ๋ง์ด ์ด๋ ์ ๋ ์ผ๋ฆฌ๊ฐ ์๋ ๊ฒ์ด, ํจ๊ณผ์ ์ธ ํ์ต์ ๋ฌธ์ ์์์ด ์ ํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. DesignPatterns๋ ๊ฑฐ์์ ์ฐจ์์์ ํด๊ฒฐ์๋ค์ ๋ชจ์๋์ ๊ฒ์ด๋ค. Refactoring์ ๋ณด๊ณ ๋์ ๋์(Bad Smell)๋ฅผ ๋งก์ ์ ์๋ ํ๊ฐ์ ๋ฐ๋ฌ์์ผ์ผ ํ๋ค. Refactoring์ ๋ชฉ๋ก์ ๋ชจ๋ ์ธ์ฐ๋ ๊ฒ์ ํฐ ์๋ฏธ๊ฐ ์๋ค. ๊ทธ๊ฒ๋ณด๋ค ๋์๋๋ ์ฝ๋๋ฅผ ๋๋ ์ ์๋ ๊ฐ์์ฑ์ ํค์ฐ๋ ๊ฒ์ด ๋ ์ค์ํ๋ค. ๋ณธ์ธ์ ์ผ์ฃผ์ผ์ ํ ๊ฐ์ง์ฉ ๋์ ๋์๋ฅผ ์ ํด๋๊ณ ๊ทธ ๊ธฐ๊ฐ ๋์์๋ ์์ ์ด ์ ํ๋ ๋ชจ๋ ์ฝ๋์์ ๊ทธ ๋์๋ง์ด๋ผ๋ ํ์คํ ๋งก๋๋ก ์ง์คํ๋ ๋ฐฉ๋ฒ์ ๊ถํ๋ค. ์ผ๋ช
์ผ์ทจ์ง์คํ๊ฐ๋ฒ. ํจํด ๊ฐ๋
์ ๋ง๋ ๊ฑด์ถ๊ฐ ํฌ๋ฆฌ์คํ ํผ ์๋ ์ฐ๋๋ GoF์ ๋ํ ์กด์จ์ ์ข์ ๋์์ธ์ด๋ ๋์ ๊ฒ์ด ์๋ ์ํ๋ผ๊ณ ํ๋ค. ๋ฌด์ ๋ฌด๋ฏธ ๋ฌด์ทจ์ ็ก็ฒ์ ่ช็ถ ์ฝ๋๊ฐ ๋๋ ๊ทธ๋ ์ ์ํด ์ค๋๋ ์ฐ๋ฆฌ๋ ๋ฆฌํฉํ ๋ง์ด๋ผ๋ ๆ็ฒ๋ฅผ ์ตํ๋ค. -- ๊น์ฐฝ์ค, ๋ง์ดํฌ๋ก์ํํธ์จ์ด 2001๋
11์ํธ
๊ธฐํ์ผ๋ก ์ฐ๋ฆฌ ์ฌ์์ฌ์ ํฐ ํ์ ๊ทธ์ ์ฒ ํ์์, "์์ธ์ ์ฑ
๋ง ์ฌ๋ค ๋งํ ์ฌ๋"์ผ๋ก ์ด๋ฆ์ ๋ ๋ฆด ์ ๋๋ก ์์ฒญ๋ ์ง์์์ ๊ณผ์ํ๋ ์ฌ์๊ฐ ํ๊ฐ ์ตํ๊ธฐ๋ ๊ทธ์ ์ ์ <็ฅๆฐฃ้>์์ ๋์ ํตํ๋ ๋ฒ(็ฎ้), ๊ท์ ํตํ๋ ๋ฒ(่ณ้), ์ฝ์ ํตํ๋ ๋ฒ(้ผป้) ๋ฑ์ ์ด์ผ๊ธฐํ๊ณ ์๋ค. ์ด๋ป๊ฒ ํ๋ฉด ์ฐ๋ฆฌ๋ ์ฝ์ ๋ํตํ ์ ์์๊น? ๋ฆฌํฉํ ๋ง์ ๊ณต๋ถํ๊ฑฐ๋ ํน์ ํ๋ ์ฌ๋๋ค์๊ฒ ๋ง์ ์๊ฐ๊ณผ ๋ฉํํฌ๋ฅผ ์ฃผ๋ ์ฑ
์ด๋ค. ์ผ๋
์ ๊ถํ๋ค. --๊น์ฐฝ์ค
์๋ จ๋ฒ
- ์ผ์ทจ์ง์คํ๊ฐ๋ฒ
- Minimize Comments : ์ฝ๋์ ๊ฐ๋
์ฑ์ ๋จ์ด๋จ๋ฆฌ์ง ์๊ฑฐ๋ ํน์ ์คํ๋ ค ์ฌ๋ฆฌ๋ฉด์ ์ฃผ์์ ์ต์ํํ๋๋ก ๋
ธ๋ ฅํ๋ค. ์ด๋ ๊ฒ ํ๋ฉด, ์๋์ผ๋ก ๋ฆฌํฉํ ๋ง์ด ์ด๋ค์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
- Follow OAOO : OAOO ๋ฒ์น์ ๊ฐ๋ฅํ๋ฉด ์ต๋ํ ๋ฐ๋ฅด๋ ค๊ณ ํ๋ค. ๋ฆฌํฉํ ๋ง ์๋ฐ๊ณต์ด ํฐ์ง๋ค.
- Follow LawOfDemeter : ๋๋ฏธํฐ ๋ฒ์น์ ๊ฐ๋ฅํ๋ฉด ์งํค๋ ค๊ณ ํ๋ค. ์ด๋ค ๋ฆฌํฉํ ๋ง์ด ์ ์ ๋ก ์ด๋ค์ง๊ฑฐ๋ ํ์ ์์ด์ง๋๊ฐ?
- Pair Refactoring : ํจ๊ป ๋ฆฌํฉํ ๋งํ๋ค. ํผ์ ํ๋ ๊ฒ ๋ณด๋ค ํจ์ฌ ๋นจ๋ฆฌ ํจ์ฌ ๋ ๋ง์ ๊ฒ์ ๋ฐฐ์ธ ์ ์๋ค. ํนํ, ๊ฐ์ ์์ฑํ๋ ์ฝ๋๋ฅผ ํจ๊ป ๋ฆฌํฉํ ๋งํ๊ณ , ์ ์ผ์์ ์ฝ๋๋ฅผ ๋ ํจ๊ป ๋ฆฌํฉํ ๋งํด ๋ณด๋ผ. ์ฌ๋์ด ๋ง๋ค๋ฉด ๋ค๋ฅธ ํ์ด๊ฐ ๋ฆฌํฉํ ๋งํ ๊ฒ๊ณผ ์๋ก ๋น๊ตํ๊ณ ํ ๋ก ํด๋ณด๋ผ.
- Separate The What From The How : "์ด๋ป๊ฒ"์ "๋ฌด์์"์ ๋ถ๋ฆฌํ๋๋ก ํ๋ผ. ์ด๋ค ๋ฆฌํฉํ ๋ง์ด ์ฐฝ๋ฐํ๋๊ฐ?