Ch3. ์ฝ๋์์ ๋๋ ์ ์ทจ
๋ฆฌํฉํฐ๋ง์ด ํ์ํ, ๋๋ก๋ ์์ฃผ ์ ์คํ ์ฝ๋๋ค์ ์ผ์ ํ ํจํด์ด ์๋ค
1. ๊ธฐ์ดํ ์ด๋ฆ(Mysterious Name)
- ๋ง๋
ํ ์ด๋ฆ์ด ๋ ์ค๋ฅด์ง ์์ผ๋ฉด ์ค๊ณ์ ๋ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ ๊ฐ ์จ์ด์์ ์ ์๋ค
2. ์ค๋ณต ์ฝ๋(Duplicated Code)
3. ๊ธด ํจ์(Long Function)
- ๊ฐ์ ํธ์ถ์ ํจ๊ณผ, ์ฝ๋๋ฅผ ์ดํดํ๊ณ , ๊ณต์ ํ๊ณ , ์ ํํ๊ธฐ ์ฌ์์ง๋ค๋ ์ฅ์ ์ ํจ์๋ฅผ ์งง๊ฒ ๊ตฌ์ฑํ ๋ ๋์จ๋ค
- ์ฃผ์์ ๋ฌ์์ผ ํ ๋งํ ๋ถ๋ถ์ ๋ฌด์กฐ๊ฑด ํจ์๋ก ๋ง๋ ๋ค. ํจ์ ์ด๋ฆ์ ๋์ ๋ฐฉ์์ด ์๋ ์๋๊ฐ ๋๋ฌ๋๊ฒ ์ง๋๋ค
- ์กฐ๊ฑด๋ฌธ์ด๋ ๋ฐ๋ณต๋ฌธ๋ ์ถ์ถ ๋์์ ์ค๋ง๋ฆฌ๋ฅผ ์ ๊ณตํ๋ค
4. ๊ธด ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก(Long Parameter List)
5. ์ ์ญ ๋ฐ์ดํฐ(Global Data)
- ์ ์ญ ๋ฐ์ดํฐ๋ ์ฝ๋๋ฒ ์ด์ค ์ด๋์์๋ ๊ฑด๋๋ฆด ์ ์๊ณ ๊ฐ์ ๋๊ฐ ๋ฐ๊ฟจ๋์ง ์ฐพ์๋ผ ๋ฉ์ปค๋์ฆ์ด ์๋ค.
- ์ ์๋ ์ ์ญ ๋ฐ์ดํฐ๊ฐ ์์ฃผ ์กฐ๊ธ๋ง ์๋๋ผ๊ณ ํจ์๋ก ๊ฐ์ธ ์บก์ํํ๋ ํธ์ด๋ค.
6. ๊ฐ๋ณ ๋ฐ์ดํฐ(Mutable Data)
7. ๋ค์ํจ ๋ณ๊ฒฝ(Divergent Change)
- ๋ค์ํจ ๋ณ๊ฒฝ์ ๋จ์ผ ์ฑ ์ ์์น(SRP)์ด ์ ๋๋ก ์ง์ผ์ง์ง ์์ ๋ ๋ํ๋๋ค.
8. ์ฐํ์ด ์์ (Shotgun Surgery)
- ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ ๋๋ง๋ค ์์ํ๊ฒ ์์ ํด์ผ ํ๋ ํด๋์ค๊ฐ ๋ง์ ๋ ์ผ์ด๋๋ค.
- ๋ณ๊ฒฝํ ๋ถ๋ถ์ด ์ฝ๋ ์ ๋ฐ์ ํผ์ ธ ์๋ค๋ฉด ์ฐพ๊ธฐ๋ ์ด๋ ต๊ณ ๊ผญ ์์ ํด์ผ ํ ๊ณณ์ ์ง๋์น๊ธฐ ์ฝ๋ค
9. ๊ธฐ๋ฅ ํธ์ (Feature Envy)
- ๊ธฐ๋ฅ ํธ์ ๋ ํํ ์ด๋ค ํจ์๊ฐ ์๊ธฐ๊ฐ ์ํ ๋ชจ๋์ ํจ์๋ ๋ฐ์ดํฐ๋ณด๋ค ๋ค๋ฅธ ๋ชจ๋์ ํจ์๋ ๋ฐ์ดํฐ์ ์ํธ์์ฉ ํ ์ผ์ด ๋ ๋ง์ ๋ ์ผ์ด๋๋ค.
10. ๋ฐ์ดํฐ ๋ญ์น(Data Clumps)
- ๋ฐ์ดํฐ ํญ๋ชฉ ์๋ ๊ฐ๊ฐ ์ฌ๋ฌ ๊ณณ์์ ํญ์ ํจ๊ป ๋ญ์ณ ๋ค๋๋
- ๋ฐ์ดํฐ ๋ญ์น์ธ์ง ํ๋ณํ๊ธฐ ์ํด ๊ฐ ํ๋๋ฅผ ์ญ์ ํด๋ณด๋ผ -> ๊ทธ๋ฌ์ ๋ ๋๋จธ์ง ๋ฐ์ดํฐ๋ง์ผ๋ก๋ ์๋ฏธ๊ฐ ์๋ค๋ฉด ๊ฐ์ฒด๋ก ํ์ํ๊ธธ ๊ฐ๋งํ๋ ๋ฐ์ดํฐ ๋ญ์น์ด๋ค.
11. ๊ธฐ๋ณธํ ์ง์ฐฉ(Primitive Obsession)
- ๋ฌธ์์ด์ ๋ค๋ฃจ๋ ์ฝ๋์์ ํนํ ํํ๋ค.
-> (๊ธฐ๋ณธํ์ ๊ฐ์ฒด๋ก ๋ฐ๊พธ๊ธฐ 7.3์ ์ ์ฝ์ด๋ณด์)
12. ๋ฐ๋ณต๋๋ switch๋ฌธ(Repeated Switches)
- ๋ฐ๋ณต๋๋ switch๋ฌธ์ด ๋ฌธ์ ๊ฐ ๋๋ ์ด์ ๋ ์กฐ๊ฑด์ ํ๋ ์ถ๊ฐํ ๋๋ง๋ค ๋ค๋ฅธ switch๋ฌธ๋ค๋ ๋ชจ๋ ์ฐพ์์ ํจ๊ป ์์ ํด์ผ ํ๊ธฐ ๋๋ฌธ
13. ๋ฐ๋ณต๋ฌธ(Loops)
- ๋ฐ๋ณต๋ฌธ๋ณด๋ค ํ์ดํ๋ผ์ธ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค
14. ์ฑ์ ์๋ ์์(Lazy Element)
- ํ๋ก๊ทธ๋จ ์์๋ฅผ ์ด์ฉํ๋ ๊ฒ
15. ์ถ์ธก์ฑ ์ผ๋ฐํ(Speculative Generality)
- '๋์ค์ ํ์ํ ๊ฑฐ์ผ'๋ผ๋ ์๊ฐ์ผ๋ก ๋น์ฅ์ ํ์ ์๋ ๋ชจ๋ ์ข ๋ฅ์ ํํน ํฌ์ธํธ์ ํน์ด ์ผ์ด์ค ์ฒ๋ฆฌ ๋ก์ง์ ์์ฑํด๋ ์ฝ๋์์ ์ถ์ธก์ฑ ์ผ๋ฐํ๊ฐ ๋ํ๋๋ค. -> ์ดํดํ๊ฑฐ๋ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์์ง ์ฝ๋๊ฐ ๋๋ค.
16. ์์ ํ๋(Temporary Field)
- ํน์ ์ํฉ์์๋ง ๊ฐ์ด ์ค์ ๋๋ ํ๋๋ฅผ ๊ฐ์ง ํด๋์ค
17. ๋ฉ์์ง ์ฒด์ธ(Message Chains)
- ํด๋ผ์ด์ธํธ๊ฐ ํ ๊ฐ์ฒด๋ฅผ ํตํด ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ป์ ๋ค ๋ฐฉ๊ธ ์ป์ ๊ฐ์ฒด์ ๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฒญํ๋ ์์ผ๋ก, ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์ฒญํ๋ ์์ ์ด ์ฐ์์ ์ผ๋ก ์ด์ด์ง๋ ์ฝ๋
- getSomething() ๊ฐ์ ๊ฒํฐ๊ฐ ๊ผฌ๋ฆฌ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ฌผ๊ณ ์ด์ด์ง๊ฑฐ๋ ์์ ๋ณ์๋ค์ด ์ค์ค์ด ๋์ด๋๋ ์ฝ๋
18. ์ค๊ฐ์(Middle Man)
- ํด๋์ค๊ฐ ์ ๊ณตํ๋ ๋ฉ์๋ ์ค ์ ๋ฐ์ด ๋ค๋ฅธ ํด๋์ค์ ๊ตฌํ์ ์์ํ๊ณ ์์ ๋
19. ๋ด๋ถ์ ๊ฑฐ๋(Insider Trading)
- ์ฌ๋ฌ ๋ชจ๋์ด ๊ฐ์ ๊ด์ฌ์ฌ๋ฅผ ๊ณต์
- ์์ ๊ตฌ์กฐ์์ ๋ถ๋ชจ ์์ ์ฌ์ด์ ๊ฒฐํ์ด ์๊ธธ๋
20. ๊ฑฐ๋ํ ํด๋์ค(Large Class)
- ํ ํด๋์ค๊ฐ ๋๋ฌด ๋ง์ ์ผ์ ํ๋ ค๋ค ๋ณด๋ ํ๋ ์๊ฐ ๋ง์์ ธ ์ค๋ณต ์ฝ๋๊ฐ ์๊ธฐ๊ฒ ๋๋ ๊ฒฝ์ฐ
- ์ฝ๋๋ใ ์ด ๋๋ฌด ๋ง์ ํด๋์ค ์ญ์ ์ค๋ณต ์ฝ๋์ ํผ๋์ ์ผ์ผํฌ ์ฌ์ง๊ฐ ํฌ๋ค.
21. ์๋ก ๋ค๋ฅธ ์ธํฐํ์ด์ค์ ๋์ ํด๋์ค๋ค(Alternative Classes with Different Interfaces)
- ํด๋์ค๋ ์ธ์ ๋ ๋ค๋ฅธ ํด๋์ค๋ก ๊ต์ฒดํ ์ ์์ง๋ง ๊ต์ฒดํ๋ ค๋ฉด ์ธํฐํ์ด์ค๊ฐ ๊ฐ์์ผ ํ๋ค. ์ด๋ ๋ฆฌํํฐ๋ง์ด ํ์ํ๋ค.
22. ๋ฐ์ดํฐ ํด๋์ค(Data Class)
- ๋ฐ์ดํฐ ํ๋์ ๊ฒํฐ/์ธํฐ ๋ฉ์๋๋ก๋ง ๊ตฌ์ฑ๋ ๋ฐ์ดํฐ ํด๋์ค์ public ํ๋๊ฐ ์์ ๋ ๋ ์ฝ๋ ์บก์ํํ๊ธฐ๋ก ์จ๊ฒจ์ผ ํ๋ค.
- ๋ค๋ฅธ ํด๋์ค์์ ๋ฐ์ดํฐ ํด๋์ค์ ๊ฒํฐ๋ ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฉ์๋๋ฅผ ์ฐพ์์ ํจ์์ฎ๊ธฐ๊ธฐ๋ก ๊ทธ ๋ฉ์๋๋ฅผ ๋ฐ์ดํฐ ํด๋์ค๋ก ์ฎ๊ธธ ์ ์๋์ง ์ดํด๋ด์ผํ๋ค.
23. ์์ ํฌ๊ธฐ(Refused Bequest)
- ์๋ธํด๋์ค๊ฐ ๋ถ๋ชจ์ ๋์์ ํ์๋กํ์ง๋ง ์ธํฐํ์ด์ค๋ ๋ฐ๋ฅด๊ณ ์ถ์ง ์์ ๋
24. ์ฃผ์(Comments)
- ์ฃผ์์ ๋ฌ๋ฉด ์๋๋ ๊ฑด ์๋์ง๋ง ์ฃผ์์ด ์ฅํฉํ๊ฒ ๋ฌ๋ฆฐ ์์ธ์ด ์ฝ๋๋ฅผ ์๋ชป ํ๊ธฐ ๋๋ฌธ์ธ ๊ฒฝ์ฐ๊ฐ ์์ธ๋ก ๋ง๋ค.
- ์ฃผ์์ ๋จ๊ฒจ์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค๋ฉด, ๊ฐ์ฅ ๋จผ์ ์ฃผ์์ด ํ์ ์๋ ์ฝ๋๋ก ๋ฆฌํฉํฐ๋ง ํด๋ด์ผ ํ๋ค.
- ๋ญ ํ ์ง ๋ชจ๋ฅผ ๋, ํ์คํ์ง ์์ ๋ถ๋ถ, ์ฝ๋๋ฅผ ์ง๊ธ์ฒ๋ผ ์์ฑํ ์ด์ ๋ฅผ ์ค๋ช ํ๋ ์ฉ๋๋ก ์ฃผ์์ ์ฌ์ฉํ๋ ๊ฒ์ ๋์ค์ ์ฝ๋๋ฅผ ์์ ํด์ผ ํ๋ ์ฌ๋์๊ฒ ์ข๋ค.
'๊ฐ๋ฐ๋์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฆฌํฉํฐ๋ง 2ํ] ๋ฆฌํฉํฐ๋ง ์นดํ๋ก๊ทธ ๋ณด๋ ๋ฒ(ch5) (0) | 2025.05.01 |
---|---|
[๋ฆฌํฉํฐ๋ง 2ํ] action point(ch4) (0) | 2025.04.30 |
[ํจ๊ป์๋ผ๊ธฐ] action point (2) | 2025.04.30 |
[๋ฆฌํฉํฐ๋ง 2ํ] action point(ch2) (2) | 2025.04.27 |
[๋ฆฌํฉํฐ๋ง 2ํ] action point(ch1) (0) | 2025.04.26 |