๋์ ์์ธ
์ค๋ณต๋ ์ฝ๋(Duplicated Code)
- ํ ๊ณณ ์ด์์์ ์ค๋ณต๋ ์ฝ๋ ๊ตฌ์กฐ๊ฐ ๋ํ๋๋ค๋ฉด, ๊ทธ๊ฒ์ ํฉ์ณ์ ํ๋ก๊ทธ๋จ์ ๊ฐ์ ํ ์ ์๋ค.
- ํด๊ฒฐ ๋ฐฉ๋ฒ์ Extract Method์ด๊ณ ๋ฝ์๋ธ ๋ฉ์๋๋ฅผ ๊ทธ ๋ ๊ณณ์์ ํธ์ถํ๋๋ก ํ๋ ๊ฒ์ด๋ค.
๊ธด ๋ฉ์๋(Long Method)
๋ฐฐ๊ฒฝ
- ์๋ธ๋ฃจํด์ ํธ์ถํ ๋ ์ค๋ฒํค๋๊ฐ ์์๊ณ , ์ด๋ ์ฌ๋๋ค์ด ์งง์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊บผ๋ฆฌ๊ฒ ๋์๋ค.
- ์์ฐ์ค๋ฝ๊ฒ ๊ธด ๋ฉ์๋๊ฐ ๋ฑ์ฅํ์์ง๋ง ์ด๋ ์ฌ๋๋ค์ด ์ดํดํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค์๋ค.
- ์ต๊ทผ์ ํ๋์จ์ด์ ์ฑ๋ฅ์ด ํฅ์์ด ๋๊ณ ์ค๋ฒํค๋๊ฐ ๋ง์ด ์ฌ๋ผ์ง๊ฒ ๋๋ฉด์ ์์ฐ์ค๋ฝ๊ฒ ๋ฉ์๋๋ ์งง์์ง๋ ๋ฐฉ๋ฒ์ผ๋ก ์งํ๋๊ณ ์๋ค.
- ๋ค์ด๋ฐ์ ์ ์์ฑํ๊ฒ ๋๋ฉด ์ง์ ๋ฉ์๋์ ๋ด๋ถ๋ฅผ ๋ณด์ง ์์๋ ๋๋ค.
- ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ์ ์์๋ณ์ ๋ง๋ค๋ฉด, ๋ฉ์๋๋ฅผ ์ถ์ถํ๊ธฐ๊ฐ ์ด๋ ต๋ค.
- ์ต๋ํ ํ๋ผ๋ฏธํฐ์ ์์๋ณ์๋ฅผ ์ ๊ฑฐํ๊ณ ๊ทธ๊ฒ๋ ํ๋ค๋ค๋ฉด Object๋ฅผ ์์ฑํ์.
์ฃผ์์ ๋ฌ์์ผ ํ ํ์๋ฅผ ๋๋ ๋๋ง๋ค ๋์ ๋ฉ์๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด๋ค.
๊ฑฐ๋ํ ํด๋์ค(Large Class)
- ํด๋์ค ํ๋๊ฐ ๋ง์ ์ผ์ ํ๋ ค ํ ๋๋ ๋ณดํต ์ง๋์น๊ฒ ๋ง์ ์ธ์คํด์ค ๋ณ์๊ฐ ๋ํ๋๋ค.
- ๋ง์ ์ธ์คํด์ค ๋ณ์๋ฅผ ๊ฐ๋ ๊ฒฝ์ฐ, ์ค๋ณต๋ ์ฝ๋๊ฐ ์กด์ฌํ ํ๋ฅ ์ด ๋๋ค.
- ํด๋์ค ๋ด์์ ์๋ก์๊ฒ ์๋ฏธ๊ฐ ์๋ ๋ณ์๋ฅผ ๊ณจ๋ผ์ ๋ฌถ๋ ์์ ์ ํ ์ ์๋ค.
- ๊ฑฐ๋ํ๋ค๋ ๊ฑด. ๋ง์ ์ฑ ์์ ๊ฐ์ง๊ณ ์๋ค๋ ์๋ฏธ.
๊ธด ํ๋ผ๋ฏธํฐ ๋ฆฌ์คํธ(Long Parameter List)
๋ฐฐ๊ฒฝ
-
์ ์ฐจ์งํฅ์ ํ๋ก๊ทธ๋๋ฐ์ ๊ธ๋ก๋ฒ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ง ์๊ธฐ ์ํด ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ๋ ๋ฐฉํฅ์ผ๋ก ์งํํ์๋ค.
-
ํ์ง๋ง ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋์ด์ค๊ฒ ๋๋ฉด์ ์ ๋นํ ๋๊ธฐ๊ณ ๋ฉ์๋๋ก ํ์ํ ๋ชจ๋ ๊ฒ์ ์ป์ผ๋ฉด ๋๋ค.
-
๊ธด ํ๋ผ๋ฏธํฐ ๋ฆฌ์คํธ๋ ์ดํดํ๊ธฐ ์ด๋ ต๋ค.
-
์ผ๊ด์ฑ์ด ์๊ฑฐ๋ ์ฌ์ฉํ๊ธฐ ์ด๋ ค์ธ ๋ฟ๋ง ์๋๋ผ, ๋ค๋ฅธ ๋ฐ์ดํฐ๊ฐ ํ์ํ ๋๋ง๋ค ๊ณ ์ณ์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
-
๊ฐ์ฒด์ ํฐ ๊ฐ์ฒด ์ฌ์ด์ ์ข ์์ฑ์ ๋ง๋ค๊ณ ์ถ์ง ์์๋์๋ ๋ฐ์ดํฐ๋ฅผ ํ์ด์ ๋๊ธฐ๋๊ฒ ํ๋ช ํ๋ ๋๋ฌด ๊ธธ์ด์ง๋ฉด ๊ณ ๋ คํด๋ด์ผ ํ ๊ฒ์ด๋ค.
ํ์ฐ์ ๋ณ๊ฒฝ(Divergent Change)
- ํ๋์ ํด๋์ค๊ฐ ๋ค๋ฅธ ์ด์ ๋ก ์ธํด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์์ฃผ ๋ณ๊ฒฝ๋๋ ๊ฒฝ์ฐ์ ๋ฐ์ํ๋ค.
- ์ด๋ฐ ๋ณํ๋ฅผ ๋ค๋ฃฐ ๋๋ ํ๋์ ํด๋์ค๋ฅผ ์์ ํ๋ ์ ์์ ๋๋ด์ผ ํ๋ฉฐ, ์๋ก์ด ํด๋์ค๋ ๊ทธ ๋ณํ๋ฅผ ๋ฐ์ํ๋ ๊ฒ์ด์ด์ผ ํ๋ค.
- ํ๋์ ํด๋์ค๊ฐ ํ๋์ ์ฑ ์์ ๊ฐ์ง๊ณ ์๋ค๋ฉด ์ด๋ฌํ ๋ฌธ์ ์ ์ ๋ง์ด ์์ด์ง ๊ฒ์ด๋ค.
ํ์ฐ์ ๋ณ๊ฒฝ์ ์ฌ๋ฌ ์ข ๋ฅ์ ๋ณ๊ฒฝ ๋๋ฌธ์ ํ๋์ ํด๋์ค๊ฐ ์๋ฌ๋ฆฌ๋ ๊ฒฝ์ฐ.
์ฐํ์ด ์์ (Shotgun Surgery)
- ๋ณ๊ฒฝ์ ํ ๋๋ง๋ค ๋ง์ ํด๋์ค๋ฅผ ์กฐ๊ธ์ฉ ์์ ํด์ผ ํ๋ค๋ฉด ์ฐํ์ด ์์ ์ ๋์๋ฅผ ํ๊ธฐ๊ณ ์๋ ๊ฒ์ด๋ค.
- ๋ณ๊ฒฝํด์ผ ํ ๋ถ๋ถ์ ๋ชจ๋ ํ๋์ ํด๋์ค๋ก ๋ชฐ์๋ฃ๊ณ ์ถ์ ๊ฒ์ด๋ค.
์ฐํ์ด ์์ ์ ํ๋๋ฅผ ๋ณ๊ฒฝํ์ ๋ ๋ง์ ํด๋์ค๋ฅผ ๊ณ ์ณ์ผ ํ๋ ๊ฒฝ์ฐ.
๊ธฐ๋ฅ์ ๋ํ ์์ฌ(Feature Envy)
- ๋ฉ์๋๊ฐ ์์ ์ด ์ํ ํด๋์ค๋ณด๋ค ๋ค๋ฅธ ํด๋์ค์ ๊ด์ฌ์ ๊ฐ์ง๋ ๊ฒฝ์ฐ์ด๋ค.
- ๊ฐ์ฅ ํํ ์์ฌ์ด ๋ฐ์ดํฐ์ ๋ํ ์์ฌ์ด๋ค.
- ์ด๋ค ๊ฐ์ ๊ณ์ฐํ๊ธฐ ์ํด ๋ค๋ฅธ ๊ฐ์ฒด์ ์๋ get ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒฝ์ฐ๋ ์๋ ์์ด ๋ง๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ ๊ทธ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฐ์ฒด์ ์์ํ๋ ๋ฐฉ๋ฒ์ด ์ ์ ํ๋ค๊ณ ๋ณผ ์ ์๋ค.
- ์ด๋ค ํด๋์ค์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋๊ฐ๋ฅผ ๋ณด๊ณ , ๋ฉ์๋๋ฅผ ๊ทธ ํด๋์ค๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด๋ค.
๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ(Data Clump)
- ๋ฐ์ดํฐ ์์ดํ ์ ์์ด๋ค๊ณผ ๊ฐ์์ ๋ชฐ๋ ค๋ค๋๊ธฐ๋ฅผ ์ข์ํ๋ค.
- ๋ ๊ฐ ์ด์์ ํ๋๋ฅผ ์๋ก์ด ๊ฐ์ฒด๋ก ๋ฐ๊พธ๋ ๊ฒ์ด๋ผ๋ฉด ์ด์ต์ด ๋ ๊ฒ์ด๋ค.
- ํ๋ ๋ฆฌ์คํธ์ ํ๋ผ๋ฏธํฐ ๋ฆฌ์คํธ๋ฅผ ์ค์ด๋ ๊ฒ์ ํ์คํ ๋์ ๋์๋ฅผ ์ ๊ฑฐํ ๊ฒ์ด์ง๋ง, ๊ฐ์ฒด๋ฅผ ๊ฐ๊ฒ ๋๋ฉด ์ข์ ํฅ๊ธฐ๋ฅผ ๋ง๋ค ์ ์๋ ๊ธฐํ๋ฅผ ์ป๊ฒ ๋๋ ๊ฒ์ด๋ค.
๊ธฐ๋ณธ ํ์ ์ ๋ํ ๊ฐ๋ฐ๊ด๋ (Primitive Obsession)
- ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋๋ฐ ํ๊ฒฝ์ ๋ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๊ณ ์๋ค.
- ๋ ์ฝ๋ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํํ์ฌ ์๋ฏธ์๋ ๊ทธ๋ฃน์ผ๋ก ๋ง๋ค ์ ์๊ฒ ํ๋ค.
- ๊ธฐ๋ณธ ํ์ (Primitive type)์ ๋ฒฝ๋๊ณผ ๊ฐ๋ค.
- ๋ ์ฝ๋๋ ํญ์ ์ด๋ ์ ๋์ ์ค๋ฒํค๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ๊ฐ์ฒด์ ์ ์ฉํ ์ ์ค์ ํ๋๋ ์ด๋ฐ ๊ธฐ๋ณธ ํ์ ์ด๋ ๋ ์ฝ๋ ํ์ ์ ๊ฒฝ๊ณ๋ฅผ ํ๋ฆฌ๊ฒ ํ๊ฑฐ๋ ์์ ์์ ๋ฒ๋ฆฐ ๋ค๋ ๊ฒ์ด๋ค.
- ํญ์ ๋ชฐ๋ ค๋ค๋๋ ๊ทธ๋ฃน์ด ์๋ค๋ฉด ํด๋์ค๋ก ์ถ์ถํ์.
Switch๋ฌธ(Switch Statements)
- ๊ฐ์ฒด์งํฅ ์ฝ๋์ ๊ฐ์ฅ ๋ช ํํ ํน์ง ์ค ํ๋๋ switch๋ฌธ์ด ๋น๊ต์ ์ ๊ฒ ์ฐ์ธ๋ค๋ ๊ฒ.
- ๋คํ์ฑ(polymorphism) switch ์ค๋ณต์ ์ฝ๊ฒ ์ฐพ์ ๋ฐ๊พธ์ด ์ค ์ ์๋ ์ข์ ๋๊ตฌ๋ค.
- switch๋ฌธ์ ๋ณผ ๋๋ฉด ํญ์ ๋คํ์ฑ์ ์๊ฐํด์ผ ํ๋ค.
- ๋ง์ฝ ํ๋์ ๋ฉ์๋์๋ง ์ํฅ์ ๋ฏธ์น๋ ๋ช ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์๋ค๋ฉด, ๊ตณ์ด ๋ฐ๊ฟ ํ์๊ฐ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ๋คํ์ฑ์ ๊ณผํ๋ค.
ํํ ์์ ๊ตฌ์กฐ(Parallel Inheritance Hierarchies)
- ํํ ์์ ๊ตฌ์กฐ๋ ์ค์ ๋ก ์ฐํ์ด ์์ ์ ํน๋ณํ ๊ฒฝ์ฐ์ด๋ค.
- ํ ํด๋์ค์ ์๋ธํด๋์ค๋ฅผ ๋ง๋ค๋ฉด, ๋ค๋ฅธ ๊ณณ์๋ ๋ชจ๋ ์๋ธํด๋์ค๋ฅผ ๋ง๋ค์ด ์ฃผ์ด์ผ ํ๋ค.
- ํ์ชฝ ์์ ๊ตฌ์กฐ์์ ํด๋์ค ์ด๋ฆ์ ์ ๋์ด์ ๊ฐ์ ๊ฒฝ์ฐ์ ์ด ๋์๋ฅผ ์ธ์ํ ์ ์๋ค.
๊ฒ์ผ๋ฅธ ํด๋์ค(Lazy Class)
- ํด๋์ค๋ฅผ ์์ฑํ ๋๋ง๋ค ๊ทธ๊ฒ์ ์ ์งํ๊ณ , ์ดํดํ๊ธฐ ์ํ ๋น์ฉ์ด ๋ฐ์ํ๋ค.
- ์ด ๋น์ฉ์ ๊ฐ๋นํ ๋งํผ ์ถฉ๋ถํ ์ผ์ ํ์ง ์๋ ํด๋์ค๋ ์ญ์ ๋์ด์ผ ํ๋ค.
- ๊ฑฐ์ ํ์์๋ ํด๋์ค์ ๋ํด์๋ Inline Class๋ฅผ ์ ์ฉํด์ผ ํ๋ค.
์ถ์ธก์ฑ ์ผ๋ฐํ(Speculative Generality)
- ๋ง์ฝ ๋ณ๋ก ํ๋ ์ผ์ด ์๋ ์ถ์ ํด๋์ค๊ฐ ์์ผ๋ฉด ์์๊ด๊ณ๋ฅผ ์์ ๋ผ.
- ๋ถํ์ํ ์์(delegation)์ Inline Class๋ก ์ ๊ฑฐ๋ ์ ์๋ค.
- ๋ฉ์๋์ ์ฌ์ฉ๋์ง ์๋ ํ๋ผ๋ฏธํฐ๋ ์ง์ฐ๊ณ . ๋ฉ์๋ ์ด๋ฆ์ด ์ด์ํ๊ณ ์ถ์์ ์ผ ๋๋ ๊ตฌ์ฒด์ ์ธ ์ด๋ฆ์ผ๋ก ๋ฐ๊พธ์.
์์ ํ๋(Temporary Field)
- ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๋ ๋ณ์๊ฐ ์ ์๋์ง๋ฅผ ์ดํดํ๋ ค๊ณ ํ๋ ๊ฒ์ ๋งค์ฐ ์ง์ฆ๋๋ ์ผ์ด๋ค.
- ๋ณต์กํ ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ๋ฌ ๋ณ์๋ฅผ ํ์๋ก ํ ๋ ํํ ๋ํ๋๋ค. ์๋ํ๋ฉด ์์ฃผ ๋ง์ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋๊ธฐ๋ ๊ฒ์ ์์น ์๊ธฐ ๋๋ฌธ.
- ์ด๋ฌํ ๊ฒฝ์ฐ ํ์ํ ๋ณ์์ ๋ฉ์๋๋ฅผ ๋ฌถ์ด ํ๋์ ํด๋์ค๋ก ์ถ์ถํ ์ ์๋ค.
๋ฉ์์ง ์ฒด์ธ (Message Chains)
- ํด๋ผ์ด์ธํธ๊ฐ ์ด๋ค ๊ฐ์ฒด๋ฅผ ์ป๊ธฐ ์ํด ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ฌผ์ด๋ณด๊ณ ๋ค๋ฅธ ๊ฐ์ฒด๋ ๋ ๋ค์ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ฌผ์ด๋ณด๊ณ ๊ทธ ๊ฐ์ฒด๋ ๋ค์ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ฌผ์ด๋ณด๊ณ โฆ ์ด๋ฐ ๊ฒฝ์ฐ ๋ฉ์์ง ์ฒด์ธ์ ๋ณผ ์ ์๋ค.
- ์ด๊ฒ์ ๊ธด ์ค์ getThis ๋ฉ์๋ ๋๋ ์์๋ณ์์ ์ํ์ค๋ก ๋ณผ ์ ์๋ค. ์ด๋ฐ ์์ผ๋ก ์งํ๋๋ค๋ ๊ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ํด๋์ค ๊ตฌ์กฐ์ ๊ฒฐํฉ๋์ด ์๋ค๋ ๊ฒ์ ๋ปํ๋ค. ์ค๊ฐ์ ์ด๋ค ๊ด๊ณ๊ฐ ๋ณํ๋ค๋ฉด ํด๋ผ์ด์ธํธ ์ฝ๋๋ ๋ณ๊ฒฝ๋์ด์ผ ํ๋ค.
- ์ด ๊ฒฝ์ฐ Hide Delegate๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ฒด์ธ์ ์ฌ๋ฌ ์ง์ ์์ ์ด๊ฒ์ ์ ์ฉํ ์ ์๋ค.
- ์์น์ ์ผ๋ก๋ ์ฒด์ธ ๋ด์ ๋ชจ๋ ๊ฐ์ฒด์ ์ ์ฉํ ์ ์์ง๋ง, ์ด ๊ฒฝ์ฐ ์ข ์ข ์ค๊ฐ์ ์๋ ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ๋ฏธ๋ค ๋งจ(middle man)์ผ๋ก ๋ง๋๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์๋ค.
- ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ์ฝ๋์ ์กฐ๊ฐ์ ์ทจํด Extract Method๋ฅผ ์ฌ์ฉํ ์ ์๋์ง ๋ณด๊ณ Move Method๋ก ๊ทธ๊ฒ์ ์ฒด์ธ์ ๋ฐ์ผ๋ก ๋ฐ์ด๋ฃ๋๋ค.
๋ฏธ๋ค ๋งจ (Middle Man)
- ๊ฐ์ฒด์ ์ฃผ์ ํน์งํ๋๊ฐ ์บก์ํ(encapsulation - ๋ด๋ถ์ ์์ธ์ฌํญ์ ์ธ๋ถ๋ก๋ถํฐ ์จ๊ธฐ๋ ๊ฒ)์ด๋ค. ์บก์ํ๋ ๋ณดํต ์์(delegation)๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ค.
- ํด๋์ค์ ์ธํฐํ์ด์ค๋ฅผ ๋ณด๋ ๋ฉ์๋์ ํ๋ฐ์ด ๋ค๋ฅธ ํด๋์ค๋ก ์์ํ๊ณ ์๋ค๋ฉด Remove Middle Man์ ์ฌ์ฉํด์ฌ ๊ทธ ๊ฐ์ฒด์ ์ค์ ๋ก ๋ญ๊ฐ ์ด๋ป๊ฒ ๋์ด๊ฐ๊ณ ์๋์ง ์๊ฒ ํด์ค ๋์ด๋ค.
- ๋ช๋ช ๋ฉ์๋๊ฐ ๋ง์ ์ผ์ ํ์ง ์๋๋ค๋ฉด Inline Method๋ฅผ ์ฌ์ฉํ์ฌ ํธ์ถํ๋ ๊ณณ์ ์ฝ๋๋ฅผ ์ฝ์ ํ ์ ์๋ค.
- ์ถ๊ฐ ๋์์ด ์๋ค๋ฉด Replace Delegation with Inheritance์ ์ฌ์ฉํ์ฌ ๋ฏธ๋ค๋งจ์ ์ค์ ๊ฐ์ฒด์ ์๋ธํด๋์ค๋ก ๋ฐ๊ฟ ์๋ ์๋ค.
- ๊ฒ์ดํธ์จ์ด ์ญํ ๋ง ํ๋ ํด๋์ค(ํจ์)
- ๋ถ์ ์ ํ ์น๋ฐ
- ๋์ ์์กด๋ ํน์ ํ์์๋ ๋ถ๋ฆฌ
๋ถ์ ์ ํ ์น๋ฐ(Inappropriate Intimacy)
- ํด๋์ค๊ฐ ์ง๋์น๊ฒ ์น๋ฐํ๊ฒ ๋์ด ์๋ก ์ฌ์ ์ธ ๋ถ๋ถ์ ํ๊ณ ๋๋๋ผ ๋๋ฌด ๋ง์ ์๊ฐ์ ์๋ชจํ ์ ์๋ค.
- ์กฐ๊ฐ์ผ๋ก ๋๋๊ณ , ์น๋ฐํจ์ ์ค์ฌ์ผ ํ๋ค. ๊ณตํต ๊ด์ฌ์ฌ๊ฐ ์๋ค๋ฉด ๊ณตํต๋ ๋ถ๋ถ์ ์์ ํ ๊ณณ์ผ๋ก ๋นผ๋ด์ ํ๋์ ํด๋์ค๋ก ๋ง๋ค์ด๋ผ.
- ์์์ ์ข ์ข ๊ณผ๋ํ ์น๋ฐ์ ์ ๋ํ ์ ์๋ค. ์๋ธํด๋์ค๋ ํญ์ ๊ทธ ๋ถ๋ชจ๊ฐ ์๋ ค์ฃผ๊ณ ์ถ์ ๊ฒ๋ณด๋ค ๋ง์ ๊ฒ์ ์๋ ค๊ณ ํ๋ค.
๋ค๋ฅธ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ๋์ฒด ํด๋์ค(Alternative Classes with Different Interface)
- ๊ฐ์ ์์ ์ ํ์ง๋ง ๋ค๋ฅธ ์๊ทธ๋์ฒ(signature)๋ฅผ ๊ฐ์ง๋ ๋ฉ์๋์ ๋ํด์๋ Rename Method๋ฅผ ์ฌ์ฉํ๋ผ.
- ๋ถ์กฑํ๋ค๊ณ ๋๋ผ๋ฉด ํด๋์ค๊ฐ ์ฌ์ ํ ์ถฉ๋ถํ ์์ ์ ํ์ง ์์ ๊ฒฝ์ฐ์ด๋ค.
- ํ๋กํ ์ฝ์ด ๊ฐ์์ง ๋๊น์ง Move Method๋ฅผ ์ด์ฉํ์ฌ ๋์์ ์ด๋์์ผ๋ผ.
๋ถ์์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋์ค(Incomplete Library Class)
- ์ฌ์ฌ์ฉ์ ์ข ์ข ๊ฐ์ฒด์ ๋ชฉ์ ์ผ๋ก ์ ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ์ฌ์ฉ์ด ๊ณผ๋ํ๊ฐ ๋์๋ค๊ณ ์๊ฐํ๋ค.
- ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ง๋๋ ์ฌ๋์ด๋ผ๊ณ ๋ชจ๋ ๊ฒ์ ๋ค ์๋ ๊ฒ์ ์๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ข ์ข ๋์ ํํ์ด๊ณ , ์ํ๋ ๊ฒ์ ํ๊ธฐ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋์ค๋ฅผ ์์ ํ๋ ๊ฒ์ ๊ฑฐ์ ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ.
๋ฐ์ดํฐ ํด๋์ค(Data Class)
- ํ๋์ ๊ฐ ํ๋์ ๋ํ get/set ๋ฉ์๋๋ง ๊ฐ์ง๊ณ , ๋ค๋ฅธ ๊ฒ์ ์๋ฌด๊ฒ๋ ์๋ ํด๋์ค๋ ์๋ค.
- ์ฌ์ฉํ๊ณ ์๋ ๊ฐ์ฒด์ ํ์๋ฅผ ๋ฐ์ดํฐ ์ชฝ์ผ๋ก ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ค.
- ๋ฐ์ดํฐ ํด๋์ค๋ ์์ด๋ค๊ณผ ๊ฐ๋ค. ์ฒ์ ์์ํ ๋๋ ๊ด์ฐฎ์ง๋ง, ์ด๋ฅธ ๊ฐ์ฒด๋ก ์ฐธ์ฌํ๊ธฐ ์ํด์๋ ์ฝ๊ฐ์ ์ฑ ์์ ๊ฐ์ง ํ์๊ฐ ์๋ค.
๊ฑฐ๋ถ๋ ์ ์ฐ (Refused Bequest)
- ์๋ธํด๋์ค๋ ๋ฉ์๋์ ๋ฐ์ดํฐ๋ฅผ ๊ทธ ๋ถ๋ชจํด๋์ค๋ก๋ถํฐ ์์ ๋ฐ๋๋ค ๋ง์ฝ ์๋ธํด๋์ค๊ฐ ๊ทธ๋ค์๊ฒ ์ฃผ์ด์ง ๊ฒ์ ์ํ์ง ์๋๋ค๊ฑฐ๋ ํ์ํ์ง ์๋๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ์ ํต์ ์ธ ๊ด์ ์์ ์ด๊ฒ์ ํด๋์ค ์์ ๊ตฌ์กฐ๊ฐ ์๋ชป ๋์๋ค๋ ๊ฒ์ ๋ปํ๋ค.
- ์ํ์ง ์๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ์๋ธํด๋์ค๋ก ์์์ ํด์ผํ๋ฉฐ ๋ถ๋ชจ ํด๋์ค๋ ๊ณตํต์ ์ธ ๋ถ๋ถ๋ง ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
์ฃผ์(Comment)
์ฃผ์์ ์จ์ผ ํ ๊ฒ ๊ฐ์ ์๊ฐ์ด ๋ค๋ฉด, ๋จผ์ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋ง ํ์ฌ ์ฃผ์์ด ๋ถํ์ํ๋๋ก ํ๋ผ.