-
Notifications
You must be signed in to change notification settings - Fork 92
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1321 from JoYouMe/master
- Loading branch information
Showing
1 changed file
with
145 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,145 @@ | ||
# Chapter 03 ์ฝ๋์์ ๋๋ ์ ์ทจ | ||
|
||
> ๋์ ๋๋ฉด ๋น์ฅ ๊ฐ์๋ผ. ์ผํธ๋ฒก ํ๋จธ๋์ ์ก์ ์์น | ||
๋ฆฌํฉํฐ๋ง์ '์ ์ฉ-๋ฐฉ๋ฒ'์ ์๊ณ ์๋ ๊ฒ๊ณผ '์ ๋ ์ ์ฉํ ์ค ์๋ ๊ฒ'์ ๋ค๋ฅด๋ค. ๋ฆฌํฉํฐ๋ง์ ์์ํ๊ณ ๋ฉ์ถ ๋๋ฅผ ํ๋จํ๋ ๊ฒ์ ๋ฆฌํฉํฐ๋ง์ ์๋์๋ฆฌ๋ฅผ ์ดํดํ๋ ๊ฒ๊ณผ ์ค์ํ๋ค. ๋ฆฌํฉํฐ๋งํ ์์ ์ ํ๋จํ๋ ๋ฐ '๋์'๋ผ๋ ํํ์ ์ฌ์ฉํ ์ ์๋ค. ๋ฆฌํฉํฐ๋ง์ ๋ฉ์ถ๋ ๊ธฐ์ค์ ์ ํํ ๊ธฐ์ค์ด ์๋๋ผ ๋ฌธ์ ์ ์งํ๋ฅผ ์ ์ํ๊ณ , ๊ฒฝํ์ ํตํด ๊ฐ์ ํค์์ผ ํ๋ค. ๋ฆฌํฉํฐ๋ง ๊ธฐ๋ฒ์ ์ ์ฉํ ๋๋ ๋์๋ฅผ ์ฐพ๊ณ , ์ด ์ฑ ์ ๋ด์ฉ๊ณผ ๋ถ๋ก B๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ ์ ์๋ค. | ||
|
||
--- | ||
|
||
#### 1. ๊ธฐ์ดํ ์ด๋ฆ (Mysterious Name) | ||
|
||
์ฝ๋์ ๊ฐ๋ ์ฑ์ ๋์ด๊ธฐ ์ํด ์ด๋ฆ์ ๋ช ๋ฃํ๊ณ ์ ์คํ๊ฒ ์ง์ด์ผ ํ๋ค. ์ด๋ฆ ๋ฐ๊พธ๊ธฐ๋ ๋ฆฌํฉํฐ๋ง์ ์ผํ์ผ๋ก, ํจ์, ๋ณ์, ํ๋์ ์ด๋ฆ์ ๋ฐ๊พธ๋ ๊ฒ์ด ์ค์ํ๋ค. ์ด๋ฆ์ ์ ์ง์ผ๋ฉด ์ฝ๋์ ์ดํด์ ์ ์ง๋ณด์๊ฐ ์ฉ์ดํด์ง๋ค. | ||
|
||
#### 2. ์ค๋ณต ์ฝ๋ (Duplicated Code) | ||
|
||
์ฝ๋ ์ค๋ณต์ ํผํ๊ธฐ ์ํด ๋ฆฌํฉํ ๋ง์ ์ฌ์ฉํ์ฌ ์ค๋ณต ์ฝ๋๋ฅผ ํตํฉํ๊ณ ๊ฐ์ ํ ์ ์๋ค. ์ค๋ณต๋ ์ฝ๋๋ฅผ ์์ ํ ๋๋ ํจ์ ์ถ์ถํ๊ธฐ์ ๋ฌธ์ฅ ์ฌ๋ผ์ด๋ํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋ชจ์์ ์ ์ฉํ ์ ์๋ค. ๋ํ, ๋ถ๋ชจ ํด๋์ค์์ ํ์๋ ์๋ธํด๋์ค์ ์ค๋ณต ์ฝ๋๋ ๋ฉ์๋ ์ฌ๋ฆฌ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ถ๋ชจ๋ก ์ฎ๊ธธ ์ ์๋ค. | ||
|
||
#### 3. ๊ธด ํจ์ (Long Function) | ||
|
||
ํ๋ก๊ทธ๋จ์ ์ ์ง๋ณด์์ฑ์ ๋์ด๊ธฐ ์ํด ์งง์ ํจ์๋ก ๊ตฌ์ฑ๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ง๋ค๊ณ , ํจ์ ์ด๋ฆ์ ์ ์ง์ด์ ์ฝ๋๋ฅผ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค์ด์ผ ํ๋ค. ํจ์ ์ถ์ถํ๊ธฐ๋ฅผ ํตํด ์ฝ๋ ๋ฉ์ด๋ฆฌ๋ฅผ ์ฐพ์๋ด๊ณ , ๋งค๊ฐ๋ณ์์ ์์ ๋ณ์๋ฅผ ์ค์ด๊ธฐ ์ํด ๋ฆฌํฉํฐ๋ง ๊ธฐ๋ฒ์ ์ ์ฉํ ์ ์๋ค. ์ฃผ์์ด๋ ์กฐ๊ฑด๋ฌธ, ๋ฐ๋ณต๋ฌธ๋ ์ถ์ถ ๋์์ ์ฐพ๋ ๋ฐ ๋์์ด ๋๋ค. | ||
|
||
#### 4. ๊ธด ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก (Long Parameter List) | ||
|
||
ํจ์์ ํ์ํ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก์ด ๊ธธ์ด์ง๋ฉด ์ดํดํ๊ธฐ ์ด๋ ค์์ง๋ฏ๋ก, ๋งค๊ฐ๋ณ์๋ฅผ ์ง์ ํจ์๋ก ๋ฐ๊พธ๊ฑฐ๋ ๊ฐ์ฒด ํต์งธ๋ก ๋๊ธฐ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋งค๊ฐ๋ณ์๋ฅผ ์ค์ผ ์ ์๋ค. ๋งค๊ฐ๋ณ์ ๊ฐ์ฒด ๋ง๋ค๊ธฐ๋ก ํจ๊ป ์ ๋ฌ๋๋ ๋งค๊ฐ๋ณ์๋ค์ ๋ฌถ๊ณ , ํ๋๊ทธ ์ธ์ ์ ๊ฑฐํ๊ธฐ๋ก ํ๋๊ทธ ์ญํ ์ ๋งค๊ฐ๋ณ์๋ฅผ ์์จ ์ ์๋ค. ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋งค๊ฐ๋ณ์ ๋ชฉ๋ก์ ์ค์ด๊ณ , ํจ์๋ค์ด ๊ณตํต์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ์ ํด๋์ค์ ํ๋๋ก ์ ์ํ ์ ์๋ค. | ||
|
||
#### 5. ์ ์ญ ๋ฐ์ดํฐ (Global Data) | ||
|
||
์ ์ญ ๋ฐ์ดํฐ ์ฌ์ฉ์ ์ฃผ์ํด์ผ ํ๋ฉฐ, ๋ณ์ ์บก์ํํ๊ธฐ ๋ฆฌํฉํฐ๋ง์ ํตํด ๋ฐ์ดํฐ ์ค์ผ์ ๋ฐฉ์งํ๊ณ ์ ๊ทผ์ ํต์ ํ ์ ์๋ค. ์ ์ญ ๋ฐ์ดํฐ๊ฐ ๊ฐ๋ณ์ผ ๊ฒฝ์ฐ ๋ค๋ฃจ๊ธฐ ์ด๋ ต์ง๋ง, ์ ์ ์์ ์ ์ญ ๋ฐ์ดํฐ๋ผ๋ ์บก์ํํ๋ ๊ฒ์ด ์ข๋ค. | ||
|
||
#### 6. ๊ฐ๋ณ ๋ฐ์ดํฐ (Mutable Data) | ||
|
||
๋ฐ์ดํฐ ๋ณ๊ฒฝ์ผ๋ก ์ธํ ์์์น ๋ชปํ ๊ฒฐ๊ณผ์ ๋ฒ๊ทธ๋ฅผ ํผํ๊ธฐ ์ํด ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ณต์ฌ๋ณธ์ ๋ฐํํ๋ ๊ฐ๋ ์ ์ฌ์ฉํ๋ค. ๋ณ์ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ ์ธ์ด์์๋ ๋ถ๋ณ์ฑ์ ์ฅ์ ์ ํ์ฉํ ์ ์๋ค. ๋ณ์ ์บก์ํ, ๋ณ์ ์ชผ๊ฐ๊ธฐ, ๋ฌธ์ฅ ์ฌ๋ผ์ด๋, ํจ์ ์ถ์ถํ๊ธฐ, ์ง์ ํจ์์ ๋ณ๊ฒฝ ํจ์ ๋ถ๋ฆฌํ๊ธฐ, ์ธํฐ ์ ๊ฑฐํ๊ธฐ, ํ์ ๋ณ์๋ฅผ ์ง์ ํจ์๋ก ๋ฐ๊พธ๊ธฐ, ํด๋์ค๋ก ๋ฌถ๊ธฐ, ๋ณํ ํจ์๋ก ๋ฌถ๊ธฐ, ์ฐธ์กฐ๋ฅผ ๊ฐ์ผ๋ก ๋ฐ๊พธ๊ธฐ ๋ฑ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ์์ ์ ๋ฐ๋ฅธ ์ํ์ ์ค์ผ ์ ์๋ค. | ||
|
||
#### 7. ๋ค์ํจ ๋ณ๊ฒฝ (Divergent Change) | ||
|
||
์ํํธ์จ์ด์ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๊ธฐ ์ฌ์ด ํํ๋ก ์กฐ์งํ๊ณ , ๋จ์ผ ์ฑ ์ ์์น์ ์งํค๋ฉฐ ๋ค์ํจ ๋ณ๊ฒฝ์ ํผํ๋ ๊ฒ์ด ์ค์ํ๋ค. ๋งฅ๋ฝ๋ณ๋ก ์ฝ๋๋ฅผ ๋ถ๋ฆฌํ๊ณ , ํจ์๋ฅผ ์ฎ๊ธฐ๊ณ , ํด๋์ค๋ฅผ ์ถ์ถํ์ฌ ๋งฅ๋ฝ์ ๋ช ํํ ๊ตฌ๋ถํ๋ ๊ฒ์ด ์ข๋ค. | ||
|
||
#### 8. ์ฐํ์ด ์์ (Shotgun Surgery) | ||
|
||
์ฐํ์ด ์์ ์ ์ฝ๋ ๋ณ๊ฒฝ ์ ์์ํ ์์ ์ด ํ์ํ ํด๋์ค๊ฐ ๋ง์ ๋ ๋ฐ์ํ๋ฉฐ, ํจ๊ป ๋ณ๊ฒฝ๋๋ ๋์๋ค์ ํจ์๋ ํ๋๋ก ๋ฌถ๊ฑฐ๋ ์ธ๋ผ์ธ ๋ฆฌํฉํฐ๋ง์ผ๋ก ํ๋๋ก ํฉ์น๋ ๊ฒ์ด ์ข๋ค. ์์ ํจ์์ ํด๋์ค์ ์ง์คํ๋, ์ฝ๋ ์ฌ๊ตฌ์ฑ ์ค์๋ ํฐ ๋ฉ์ด๋ฆฌ๋ก ๋ฌถ์ฌ๋ ๊ด์ฐฎ๋ค. | ||
|
||
#### 9. ๊ธฐ๋ฅ ํธ์ (Feature Envy) | ||
|
||
ํ๋ก๊ทธ๋จ์ ๋ชจ๋ํํ ๋๋ ์ํธ์์ฉ์ ์์ญ ๋ด์์ ์ต๋ํํ๊ณ ์์ญ ๊ฐ ์ํธ์์ฉ์ ์ต์ํํ๋ ๊ฒ์ด ์ค์ํ๋ค. ๊ธฐ๋ฅ ํธ์ ๋ ๋ค๋ฅธ ๋ชจ๋๊ณผ์ ์ํธ์์ฉ์ด ๋ง์ ๋ ๋ฐ์ํ๋ฉฐ, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํจ์๋ฅผ ์ฎ๊ธฐ๊ฑฐ๋ ์ถ์ถํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์๋ค. ๋ํ, ๋ณต์กํ ํจํด๊ณผ ๋์์ธ ํจํด์ ํ์ฉํ์ฌ ๋ณ๊ฒฝ ๋์๋ฅผ ์์จ ์ ์๋ค. | ||
|
||
#### 10. ๋ฐ์ดํฐ ๋ญ์น (Data Clumps) | ||
|
||
๋ฐ์ดํฐ ํญ๋ชฉ๋ค์ ํจ๊ป ๋ฌถ์ด์ ํด๋์ค๋ก ์ถ์ถํ๊ณ , ๋งค๊ฐ๋ณ์ ๊ฐ์ฒด ๋ง๋ค๊ธฐ๋ ๊ฐ์ฒด ํต์งธ๋ก ๋๊ธฐ๊ธฐ๋ฅผ ํตํด ๋ฐ์ดํฐ ๋ญ์น๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ณ ์๋ค. ๋ฐ์ดํฐ ๋ญ์น๋ฅผ ํด๋์ค๋ก ๋ง๋ค๋ฉด ์ค๋ณต์ ์์ ๊ณ ๊ฐ๋ฐ์ ๊ฐ์ํ ์ ์๋ค. | ||
|
||
#### 11. ๊ธฐ๋ณธํ ์ง์ฐฉ (Primitive Obsession) | ||
|
||
๊ธฐ๋ณธํ์ ๊ฐ์ฒด๋ก ๋์ฒดํ์ฌ ์๋ฏธ ์๋ ์๋ฃํ์ ์ฌ์ฉํจ์ผ๋ก์จ ์ฝ๋๋ฅผ ๋ ๋ช ํํ๊ฒ ๋ง๋ค ์ ์๋ค. ๊ธฐ๋ณธํ์ผ๋ก๋ง ํํ๋ ์ฝ๋๋ฅผ ๊ฐ์ฒด ์งํฅ์ ์ผ๋ก ๋ฆฌํฉํฐ๋งํ๊ณ , ๊ธฐ๋ณธํ์ ๊ฐ์ฒด๋ก ๋์ฒดํจ์ผ๋ก์จ ์กฐ๊ฑด๋ถ ๋์์ ๋คํ์ฑ์ผ๋ก ๋ฐ๊พธ๊ธฐ๋ฅผ ์ ์ฉํ ์ ์๋ค. ์์ฃผ ํจ๊ป ์ฌ์ฉ๋๋ ๊ธฐ๋ณธํ ๊ทธ๋ฃน๋ ํด๋์ค ์ถ์ถํ๊ธฐ์ ๋งค๊ฐ๋ณ์ ๊ฐ์ฒด ๋ง๋ค๊ธฐ๋ฅผ ํ์ฉํ์ฌ ๊ฐ์ ํ ์ ์๋ค. | ||
|
||
#### 12. ๋ฐ๋ณต๋๋ switch๋ฌธ (Repeated Switches) | ||
|
||
์ค๋ณต๋ switch๋ฌธ์ ์ฝ๋์ ์ ์ง๋ณด์๋ฅผ ์ด๋ ต๊ฒ ๋ง๋ค๋ฉฐ, ์๋ก์ด ์กฐ๊ฑด์ด ์ถ๊ฐ๋ ๋๋ง๋ค ์ฌ๋ฌ switch๋ฌธ์ ํจ๊ป ์์ ํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๋ค. ๋คํ์ฑ์ ํ์ฉํ์ฌ ๋ฐ๋ณต๋ switch๋ฌธ์ ์ ๊ฑฐํ๊ณ , ์ฝ๋๋ฅผ ๋ ํ๋์ ์ธ ์คํ์ผ๋ก ๋ณํํ ์ ์๋ค. | ||
|
||
#### 13. ๋ฐ๋ณต๋ฌธ(Loops) | ||
|
||
๋ฐ๋ณต๋ฌธ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ๋ ์ ํ์ฉํ์ฌ ํ์ดํ๋ผ์ธ์ผ๋ก ๋์ฒดํ ์ ์๋ค. ์ผ๊ธ ํจ์๋ฅผ ์ง์ํ๋ ์ธ์ด์์๋ ํํฐ๋ ๋งต๊ณผ ๊ฐ์ ํ์ดํ๋ผ์ธ ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋ ๋ช ํํ๊ฒ ๋ง๋ค ์ ์๋ค. | ||
|
||
#### 14. ์ฑ์ ์๋ ์์ (Lazy Element) | ||
|
||
๋ถํ์ํ ํจ์๋ ํด๋์ค๋ ์ ๊ฑฐํ๊ณ , ์ธ๋ผ์ธํ๊ธฐ๋ฅผ ํตํด ์ฝ๋๋ฅผ ๋จ์ํํ ํ์๊ฐ ์๋ค. ์์์ ์ฌ์ฉํ ํด๋์ค์ ์ญํ ์ด ์ค์ด๋ค์์ ๋๋ ๊ณ์ธต ํฉ์น๊ธฐ๋ฅผ ์ ์ฉํ์ฌ ์ ๋ฆฌํ ์ ์๋ค. | ||
|
||
#### 15. ์ถ์ธก์ฑ ์ผ๋ฐํ (Speculative Generality) | ||
|
||
๋ฏธ๋์ ํ์ํ ๊ฒ์ผ๋ก ์์ํ๋ฉฐ ์์ฑํ ์ฝ๋๋ ํ์ฌ์๋ ๋ถํ์ํ ๋ญ๋น์ผ ์ ์๋ค. ๋ถํ์ํ ์ถ์ ํด๋์ค๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋๋ ์ญ์ ํ๊ณ , ๊ฐ๋จํ๊ฒ ์ ์ง๋ณด์ ๊ฐ๋ฅํ ์ฝ๋๋ก ์ ๋ฆฌํ๋ค. | ||
|
||
#### 16. ์์ ํ๋ (Temporary Field) | ||
|
||
ํน์ ์ํฉ์์๋ง ๊ฐ์ด ์ค์ ๋๋ ํ๋๋ ํด๋์ค ์ถ์ถํ๊ธฐ๋ฅผ ํตํด ์ ์ ํ ํด๋์ค๋ก ์ด๋์ํค๊ณ , ํ์ํ ๊ฒฝ์ฐ ์ผ์ด์ค ์ถ๊ฐํ๊ธฐ๋ก ๋์ ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ ํจ์ฑ์ ๊ฒ์ฌํ ํ์ ์ ๊ฑฐํ ์ ์๋ค. | ||
|
||
#### 17. ๋ฉ์์ง ์ฒด์ธ (Message Chains) | ||
|
||
๋ฉ์์ง ์ฒด์ธ์ ํด๋ผ์ด์ธํธ๊ฐ ํ ๊ฐ์ฒด๋ฅผ ํตํด ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ป์ ๋ค ๊ณ์ํด์ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ์ฝ๋๋ฅผ ์๋ฏธํ๋ค. ์ด๋ ๋ด๋น๊ฒ์ด์ ๊ตฌ์กฐ์ ์ข ์๋์ด ์์ด์ ์ค๊ฐ ๊ฐ์ฒด๋ฅผ ์์ ํ๋ฉด ํด๋ผ์ด์ธํธ ์ฝ๋๋ ์์ ํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์์ ์จ๊ธฐ๊ธฐ๋ฅผ ํ์ฉํ๋ค. | ||
|
||
- ๋ฆฌํฉํฐ๋ง ๋ฐฉ๋ฒ: | ||
|
||
1. **์์ ์จ๊ธฐ๊ธฐ(Hide Delegate):** ์ค๊ฐ ๊ฐ์ฒด์ ๋ฉ์์ง ์ฒด์ธ์ ์จ๊ธฐ๊ธฐ ์ํด ์ต์ข ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ ๋ฉ์๋๋ฅผ ์ค๊ฐ ๊ฐ์ฒด์ ์ถ๊ฐํ๋ค. ํด๋ผ์ด์ธํธ ์ฝ๋๋ ์ด ๋ฉ์๋๋ง ํธ์ถํ๋ฉด ๋๋ฉฐ, ์ค๊ฐ ๊ฐ์ฒด์ ๋ด๋น๊ฒ์ด์ ๊ตฌ์กฐ๋ ๊ฐ์ถฐ์ง๋ค. | ||
2. **ํจ์ ์ถ์ถํ๊ธฐ(Extract Function):** ๋ฉ์์ง ์ฒด์ธ์ ๊ฒฐ๊ณผ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ ๋ฐ๋ก ํจ์๋ก ์ถ์ถํ๊ณ , ์ด๋ฅผ ํตํด ์ค๊ฐ ๊ฐ์ฒด์ ๋ด๋น๊ฒ์ด์ ์ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ ๋ค. | ||
3. **ํจ์ ์ฎ๊ธฐ๊ธฐ(Move Function):** ๋ฉ์์ง ์ฒด์ธ์ ์จ๊ธฐ๊ธฐ ์ํด ์ถ์ถํ ํจ์๋ฅผ ์ ์ ํ ์์น๋ก ์ด๋์ํจ๋ค. | ||
|
||
๋ฉ์์ง ์ฒด์ธ์ด ํ์ํ ๊ฒฝ์ฐ, ์ค๊ฐ ๊ฐ์ฒด์ ๋ด๋น๊ฒ์ด์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ถ๋ ๊ฒ์ด ์ค์ํ๋ค. ํด๋ผ์ด์ธํธ ์ฝ๋๊ฐ ์ค๊ฐ ๊ฐ์ฒด์ ๋ด๋ถ ๊ตฌ์กฐ์ ์์กดํ์ง ์๋๋ก ๋ฆฌํฉํฐ๋งํ์ฌ ์ ์ฐํ๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์ด ์ฝ๋๋ฅผ ์ ์งํ ์ ์๋ค. | ||
|
||
```typescript | ||
// ์ฎ๊ธด์ด ์์ ๋ฌธ๋จ์ 7.7 ์์ ์จ๊ธฐ๊ธฐ์ ์ฝ๊ณ ์จ ํ๋ผ๋ ํ ๋ฒ์ ์ดํดํ๊ธฐ ์ด๋ ค์ธ ๊ฒ ๊ฐ์์ | ||
// ์์๋ค ์ค๋นํ๋ค. ์ฐ์ ๋ค์ ์ฝ๋๊ฐ ๋ฉ์์ง ์ฒด์ธ์ ์ ํ์ ์ธ ์๋ค. | ||
|
||
managerName = aPerson.department.manager.name; | ||
|
||
// '์ฒด์ธ์ ๊ตฌ์ฑํ๋๋ชจ๋ ๊ฐ์ฒด์ ์์ ์จ๊ธฐ๊ธฐ๋ฅผ ์ ์ฉํ ์ ์๋ค'๊ณ ํจ์ ๋ถ์์ฅ ์ด๋ฆ์ ๋ฐ๋ก ๋ฐํํ๋ | ||
// ๋ฉ์๋๋ฅผ ์ฌ๋ ํด๋์ค์ ์ถ๊ธฐํ ์๋ ์๊ณ ๋ถ์ ํด๋์ค์ ์ถ๊ฐํ ์๋ ์๋ค๋ ๋ป์ด๋ค. ํน์ | ||
// ๋ถ์์ฅ์ ์ป๋ ๋ฉ์๋๋ฅผ ์ฌ๋ ํด๋์ค์ ์ถ๊ฐํ ์๋ ์๋ค. | ||
|
||
managerName = aPerson.department.managerName; // ๊ด๋ฆฌ์(manager)์ ์กด์ฌ๋ฅผ ์จ๊น | ||
managerNane = aPerson.manager.name; // ๋ถ์ ๊ฐ์ฒด (department)์ ์กด์ฌ๋ฅผ ์จ๊น | ||
managerName = aPerson.managerName; // ๋ถ์ ๊ฐ์ฒด์ ๊ด๋ฆฌ์ ๊ฐ์ฒด ๋ชจ๋์ ์กด์ฌ๋ฅผ ์จ๊น | ||
|
||
// ์ด ์ฒด์ธ์ ์ต์ข ๊ฒฐ๊ณผ ๊ฐ์ฒด๋ name์ด ๋ฐํํ๋ ๋ถ์์ฅ์ ์ด๋ฆ์ด๋ค. | ||
// ์ด ๊ฐ์ฒด๊ฐ ๋ค์์ฒ๋ผ ์ฐ์ธ๋ค๊ณ ํด๋ณด์. | ||
|
||
managerName = aPerson.department.manager.name; | ||
report = "${managerName}๊ป ${aPerson.name} ๋์ ์์ ๋ก๊ทธ..."; | ||
console.log(report); | ||
|
||
// ์ฌ๊ธฐ์ ๋ณด๊ณ ์ ์์ฑ ๋ก์ง์ ํจ์๋ก ์ถ์ถํ ๋ค์ ์ ๋นํ ๋ชจ๋๋ก ์ฎ๊ธฐ๋ฉด ์ฒด์ธ์ ์กด์ฌ๊ฐ ๊ฐ์ถฐ์ง๋ค. | ||
|
||
console.log(reportAutoGenerator.report(aPerson)); | ||
|
||
// ๋ง์ง๋ง์ผ๋ก ์ฒด์ธ์ ์ค๊ฐ์ธ ๋ถ์ ์ ๋ณด๋ฅผ ์ป์ด ์ฌ์ฉํ๋ ๋ค์์ ํด๋ผ์ด์ธํธ๊ฐ ๋ถ์์ฅ ์ด๋ฆ๋ ํจ๊ป | ||
// ์ฌ์ฉํ๋ค๋ฉด ๋ถ์ ํด๋์ค์ managername() ๋ฉ์๋๋ฅผ ์ถ๊ฐํ์ฌ ์ฒด์ธ์ ๋จ์ถํ ์ ์๋ค. | ||
``` | ||
|
||
#### 18. ์ค๊ฐ์ (Middle Man) | ||
|
||
๊ฐ์ฒด์ ์บก์ํ๋ ์ธ๋ถ๋ก๋ถํฐ ์ธ๋ถ์ฌํญ์ ์จ๊ธฐ๋ ๊ธฐ๋ฅ์ผ๋ก, ์์์ด ์์ฃผ ์ฌ์ฉ๋๋ค. ์ค๊ฐ์ ์ ๊ฑฐํ๊ธฐ๋ฅผ ํ์ฉํ์ฌ ์์ ๋ฉ์๋๋ฅผ ์ ๊ฑฐํ๊ณ , ํธ์ถํ๋ ์ชฝ์ผ๋ก ์ธ๋ผ์ธํ์. | ||
|
||
#### 19. ๋ด๋ถ์ ๊ฑฐ๋ (Insider Trading) | ||
|
||
์ํํธ์จ์ด ๊ฐ๋ฐ์๋ ๋ชจ๋ ์ฌ์ด์ ๊ฒฐํฉ๋๋ฅผ ๋ฎ์ถ๊ธฐ ์ํด ํจ์ ์ฎ๊ธฐ๊ธฐ, ํ๋ ์ฎ๊ธฐ๊ธฐ, ์์ ์จ๊ธฐ๊ธฐ๋ฅผ ํ์ฉํด์ผ ํ๋ค. ๋ํ, ์์ ๊ตฌ์กฐ์์๋ ์๋ธํด๋์ค๋ฅผ ์์์ผ๋ก ๋ฐ๊พธ๊ธฐ๋ ์ํผํด๋์ค๋ฅผ ์์์ผ๋ก ๋ฐ๊พธ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐํฉ๋๋ฅผ ์ต์ํํด์ผ ํ๋ค. | ||
|
||
#### 20. ๊ฑฐ๋ํ ํด๋์ค (Large Class) | ||
|
||
ํด๋์ค๊ฐ ๋๋ฌด ๋ง์ ์ผ์ ํ๊ฑฐ๋ ํ๋๊ฐ ๋๋ฌด ๋ง์ ๋๋ ํด๋์ค ์ถ์ถํ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํ๋๋ฅผ ๋ถ๋ฆฌํ๊ณ ์ค๋ณต ์ฝ๋๋ฅผ ๋ฐฉ์งํ ์ ์๋ค. ๋ํ, ์ฝ๋๋์ด ๋ง์ ํด๋์ค์์๋ ์ค๋ณต์ ์ ๊ฑฐํ๊ธฐ ์ํด ์์ ๋ฉ์๋๋ก ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค. ํด๋ผ์ด์ธํธ๊ฐ ๊ฑฐ๋ ํด๋์ค์ ํน์ ๊ธฐ๋ฅ ๊ทธ๋ฃน๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ํด๋น ๊ธฐ๋ฅ ๊ทธ๋ฃน์ ๊ฐ๋ณ ํด๋์ค๋ก ์ถ์ถํ ์ ์๋ค. | ||
|
||
#### 21. ์๋ก ๋ค๋ฅธ ์ธํฐํ์ด์ค์ ๋์ ํด๋์ค๋ค (Alternative Classes with Different Interfaces) | ||
|
||
ํด๋์ค๋ฅผ ์ฌ์ฉํ ๋์ ํฐ ์ฅ์ ์ ํ์์ ๋ฐ๋ผ ์ธ์ ๋ ๋ค๋ฅธ ํด๋์ค๋ก ๊ต์ฒดํ ์ ์๋ค๋ ๊ฒ์ด๋ค. ๋จ, ๊ต์ฒดํ๋ ค๋ฉด ์ธํฐํ์ด์ค๊ฐ ๊ฐ์์ผ ํ๋ค. ๋ฐ๋ผ์ ํจ์ ์ ์ธ ๋ฐ๊พธ๊ธฐ๋ก ๋ฉ์๋ ์๊ทธ๋์ฒ๋ฅผ ์ผ์น์ํจ๋ค. ๋๋ก๋ ์ด๊ฒ๋ง์ผ๋ก ๋ถ์กฑํ๋ฐ, ์ด๋ด ๋๋ ํจ์ ์ฎ๊ธฐ๊ธฐ๋ฅผ ์ด์ฉํ์ฌ ์ธํฐํ์ด์ค๊ฐ ๊ฐ์์ง ๋๊น์ง ํ์ํ ๋์๋ค์ ํด๋์ค ์์ผ๋ก ๋ฐ์ด ๋ฃ๋๋ค. ๊ทธ๋ฆฌ๋ค ๋์ ํด๋์ค๋ค ์ฌ์ด์ ์ค๋ณต ์ฝ๋๊ฐ ์๊ธฐ๋ฉด ์ํผํด๋์ค ์ถ์ถํ๊ธฐ๋ฅผ ์ ์ฉํ ์ง ๊ณ ๋ คํด๋ณธ๋ค. | ||
|
||
#### 22. ๋ฐ์ดํฐ ํด๋์ค (Data Class) | ||
|
||
๋ฐ์ดํฐ ํด๋์ค๋ ๋ฐ์ดํฐ ํ๋์ ๊ฒํฐ/์ธํฐ ๋ฉ์๋๋ก๋ง ๊ตฌ์ฑ๋ ํด๋์ค๋ฅผ ๋งํ๋ฉฐ, public ํ๋๊ฐ ์์ ๊ฒฝ์ฐ ๋ ์ฝ๋ ์บก์ํ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค. ๋ค๋ฅธ ํด๋์ค์์ ๋ฐ์ดํฐ ํด๋์ค์ ๊ฒํฐ๋ ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ ๋ฉ์๋๋ฅผ ์ฐพ์์ ํจ์ ์ฎ๊ธฐ๊ธฐ๋ฅผ ๊ณ ๋ คํ๊ณ , ํ์ํ ๋์์ด ์๋ฑํ ๊ณณ์ ์ ์๋์ด ์๋ค๋ฉด ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ๋ฐ์ดํฐ ํด๋์ค๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด ๊ฐ์ ์ ๋์์ด ๋๋ค. | ||
|
||
#### 23. ์์ํฌ๊ธฐ (Refused Bequest) | ||
|
||
์๋ธํด๋์ค๊ฐ ๋ถ๋ชจ์ ์ผ๋ถ ๋์์ ํ์ํ์ง๋ง ์ธํฐํ์ด์ค๋ ๋ฐ๋ฅด์ง ์์ ๋, ์์์ ํฌ๊ธฐํ๊ณ ์์์ผ๋ก ๋ฐ๊พธ๋ ๊ฒ์ด ์ข๋ค. ์ด๋ฅผ ํตํด ํ์ํ ๋์์ ์ฌํ์ฉํ๋ฉด์ ์์ ๋ฉ์ปค๋์ฆ์์ ๋ฒ์ด๋ ์ ์๋ค. | ||
|
||
#### 24. ์ฃผ์ (Comments) | ||
|
||
ํน์ ์ฝ๋ ๋ธ๋ก์ด ํ๋ ์ผ์ ์ฃผ์์ ๋จ๊ธฐ๊ณ ์ถ๋ค๋ฉด ํจ์ ์ถ์ถํ๊ธฐ๋ฅผ ์ ์ฉํด๋ณธ๋ค. ์ด๋ฏธ ์ถ์ถ๋์ด ์๋ ํจ์์์๋ ์ฌ์ ํ ์ค๋ช ์ด ํ์ํ๋ค๋ฉด ํจ์ ์ ์ธ ๋ฐ๊พธ๊ธฐ๋ก ํจ์ ์ด๋ฆ์ ๋ฐ๊ฟ๋ณธ๋ค. ์์คํ ์ด ๋์ํ๊ธฐ ์ํ ์ ํ์กฐ๊ฑด์ ๋ช ์ํ๊ณ ์ถ๋ค๋ฉด ์ด์์ ์ถ๊ฐํ๊ธฐ๊ฐ ๋๊ธฐํ๊ณ ์๋ค. | ||
|
||
> ์ฃผ์์ ๋จ๊ฒจ์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค๋ฉด, ๊ฐ์ฅ ๋ฉด์ ์ฃผ์์ด ํ์ ์๋ ์ฝ๋๋ก ๋ฆฌํฉํฐ๋งํด๋ณธ๋ค. | ||
|
||
๋ญ ํ ์ง ๋ชจ๋ฅผ ๋๋ผ๋ฉด ์ฃผ์์ ๋ฌ์๋๋ฉด ์ข๋ค. ํ์ฌ ์งํ ์ํญ๋ฟ๋ง ์๋๋ผ ํ์คํ์ง ์์ ๋ถ๋ถ์ ์ฃผ์์ ๋จ๊ธด๋ค. ์ฝ๋๋ฅผ ์ง๊ธ์ฒ๋ผ ์์ฑํ ์ด์ ๋ฅผ ์ค๋ช ํ๋ ์ฉ๋๋ก ๋ฌ ์๋ ์๋ค. ์ด๋ฐ ์ ๋ณด๋ ๋์ค์ ์ฝ๋๋ฅผ ์์ ํด์ผ ํ ํ๋ก๊ทธ๋๋จธ์๊ฒ. ํนํ ๊ฑด๋ง์ฆ์ด ์ฌํ ํ๋ก๊ทธ๋๋จธ์๊ฒ ๋์๋ ๊ฒ์ด๋ค. |