- 12.1 ๋ฉ์๋ ์ฌ๋ฆฌ๊ธฐ
- 12.2 ํ๋ ์ฌ๋ฆฌ๊ธฐ
- 12.3 ์์ฑ์ ๋ณธ๋ฌธ ์ฌ๋ฆฌ๊ธฐ
- 12.4 ๋ฉ์๋ ๋ด๋ฆฌ๊ธฐ
- 12.5 ํ๋ ๋ด๋ฆฌ๊ธฐ
- 12.6 ํ์ ์ฝ๋๋ฅผ ์๋ธํด๋์ค๋ก ๋ฐ๊พธ๊ธฐ
- 12.7 ์๋ธํด๋์ค ์ ๊ฑฐํ๊ธฐ
- 12.8 ์ํผํด๋์ค ์ถ์ถํ๊ธฐ
- 12.9 ๊ณ์ธต ํฉ์น๊ธฐ
- 12.10 ์๋ธํด๋์ค๋ฅผ ์์์ผ๋ก ๋ฐ๊พธ๊ธฐ
- 12.11 ์ํผํด๋์ค๋ฅผ ์์์ผ๋ก ๋ฐ๊พธ๊ธฐ
Note
'์์ ๋ค๋ฃจ๊ธฐ' ์ฑํฐ๋ ๋ค์ ์ง๋ฌธ์ ์ค์ฌ์ผ๋ก ์ฝ์ด๋๊ฐ์๋ฉด ์ข์ต๋๋ค.
- ์ธ์ ์์ํด์ผ ํ๋๊ฐ
- ์ํผํด๋์ค์ ์๋ธํด๋์ค์ ์์๋ฅผ ์ด๋ป๊ฒ ์ ๋ฆฌํด์ผ ํ๋๊ฐ
- ์์์ ์ค์ฉํ๋ค๋ฉด ์ด๋ค ๋์์ด ์๋๊ฐ
p.476
๋ฉ์๋ ์ฌ๋ฆฌ๊ธฐ๋ฅผ ์ ์ฉํ๊ธฐ ๊ฐ์ฅ ์ฌ์ด ์ํฉ์ ๋ฉ์๋๋ค์ ๋ณธ๋ฌธ ์ฝ๋๊ฐ ๋๊ฐ์ ๋๋ค. ์ด๋ด ๋ ๊ทธ๋ฅ ๋ณต์ฌํด ๋ถ์ฌ๋ฃ์ผ๋ฉด ๋์ด๋ค.
p.477
๋ฉ์๋ ์ฌ๋ฆฌ๊ธฐ๋ฅผ ์ ์ฉํ๊ธฐ์ ๊ฐ์ฅ ์ด์ํ๊ณ ๋ณต์กํ ์ํฉ์ ํด๋น ๋ฉ์๋์ ๋ณธ๋ฌธ์์ ์ฐธ์กฐํ๋ ํ๋๋ค์ด ์๋ธํด๋์ค์๋ง ์๋ ๊ฒฝ์ฐ๋ค. ์ด๋ฐ ๊ฒฝ์ฐ๋ผ๋ฉด ํ๋๋ค ๋จผ์ ์ํผํด๋์ค๋ก ์ฌ๋ฆฐ ํ์ ๋ฉ์๋๋ฅผ ์ฌ๋ ค์ผ ํ๋ค.
๐ก ์๊ฒฌ
- ํ ํ๋ฆฟ ๋ฉ์๋ ๋ง๋ค๊ธฐ: https://refactoring.com/catalog/formTemplateMethod.html
p.479
์๋ธํด๋์ค๋ค์ด ๋ ๋ฆฝ์ ์ผ๋ก ๊ฐ๋ฐ๋์๊ฑฐ๋ ๋ค๋ฆ๊ฒ ํ๋์ ๊ณ์ธต๊ตฌ์กฐ๋ก ๋ฆฌํํฐ๋ง๋ ๊ฒฝ์ฐ๋ผ๋ฉด ์ผ๋ถ ๊ธฐ๋ฅ์ด ์ค๋ณต๋์ด ์์ ๋๊ฐ ์์ ์๋ค. ํนํ ํ๋๊ฐ ์ค๋ณต๋๊ธฐ ์ฝ๋ค. ํ๋๋ค์ด ๋น์ทํ ๋ฐฉ์์ผ๋ก ์ฐ์ธ๋ค๊ณ ํ๋จ๋๋ฉด ์ํผํด๋์ค๋ก ๋์ด์ฌ๋ฆฌ์. ์ด๋ ๊ฒ ํ๋ฉด ๋ ๊ฐ์ง ์ค๋ณต์ ์ค์ผ ์ ์๋ค. ์ฒซ์งธ, ๋ฐ์ดํฐ ์ค๋ณต ์ ์ธ์ ์์จ ์ ์๋ค. ๋์งธ, ํด๋น ํ๋๋ฅผ ์ฌ์ฉํ๋ ๋์์ ์๋ธํด๋์ค์์ ์ํผํด๋์ค๋ก ์ฎ๊ธธ ์ ์๋ค.
p.481
์๋ธํด๋์ค๋ค์์ ๊ธฐ๋ฅ์ด ๊ฐ์ ๋ฉ์๋๋ค์ ๋ฐ๊ฒฌํ๋ฉด ํจ์ ์ถ์ถํ๊ธฐ์ ๋ฉ์๋ ์ฌ๋ฆฌ๊ธฐ๋ฅผ ์ฐจ๋ก๋ก ์ ์ฉํ์ฌ ๋ง๋ํ ์ํผํด๋์ค๋ก ์ฎ๊ธฐ๊ณค ํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ทธ ๋ฉ์๋๊ฐ ์์ฑ์๋ผ๋ฉด ์คํ ์ด ๊ผฌ์ธ๋ค. ์์ฑ์๋ ํ ์ ์๋ ์ผ๊ณผ ํธ์ถ ์์์ ์ ์ฝ์ด ์๊ธฐ ๋๋ฌธ์ ์กฐ๊ธ ๋ค๋ฅธ ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋ค.
p.485
ํน์ ์๋ธํด๋์ค ํ๋(ํน์ ์์)์๋ง ๊ด๋ จ๋ ๋ฉ์๋๋ ์ํผํด๋์ค์์ ์ ๊ฑฐํ๊ณ ํด๋น ์๋ธํด๋์ค(๋ค)์ ์ถ๊ฐํ๋ ํธ์ด ๊น๋ํ๋ค. ๋ค๋ง, ์ด ๋ฆฌํํฐ๋ง์ ํด๋น ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ์๋ธํด๋์ค๊ฐ ์ ํํ ๋ฌด์์ธ์ง๋ฅผ ํธ์ถ์๊ฐ ์๊ณ ์์ ๋๋ง ์ ์ฉํ ์ ์๋ค.
p.486
์๋ธํด๋์ค ํ๋(ํน์ ์์)์์๋ง ์ฌ์ฉํ๋ ํ๋๋ ํด๋น ์๋ธํด๋์ค(๋ค)๋ก ์ฎ๊ธด๋ค.
๐ก ์๊ฒฌ
- ์ผ์ชฝ ์๋ฌธ์๋ private์ด์๋๋ฐ ์ค๋ฅธ์ชฝ ์๋ฌธ์์ ์ protected๊ฐ ๋์์๊น์? ๐ค
- ์บก์ํ๊ฐ ์ค์ํ๊ธฐ ๋๋ฌธ์ ๋ณดํต private์ผ๋ก ์ ์ธํ๊ณ ๊ฒํฐ์ ์ธํฐ๋ฅผ ์ฌ์ฉํ๋๋ฐ ์๋ธํด๋์ค๋ก ํ๋๋ฅผ ์ฎ๊ฒผ์ผ๋ฏ๋ก ์ํผํด๋์ค์์ ์ ๊ทผ์ด ๊ฐ๋ฅํ๋๋ก protected๋ก ์ ์ธํ ๊ฒ ๊ฐ์ต๋๋ค. protected ํค์๋๋ก ์ ์ธํ ํ๋๋ ๊ฐ์ ํจํค์ง ๋๋ ์๋ธํด๋์ค์์ ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ํค์๋ protected (TypeScript) https://www.typescriptlang.org/docs/handbook/2/classes.html#protected
p.487
์ํํธ์จ์ด ์์คํ ์์๋ ๋น์ทํ ๋์๋ค์ ํน์ ํน์ฑ์ ๋ฐ๋ผ ๊ตฌ๋ถํด์ผ ํ ๋๊ฐ ์์ฃผ ์๋ค. ์ด๋ฐ ์ผ์ ๋ค๋ฃจ๋ ์๋จ์ผ๋ก๋ ํ์ ์ฝ๋Type Code ํ๋๊ฐ ์๋ค. ํ์ ์ฝ๋๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๋ฐ๋ผ ์ด๊ฑฐํ์ด๋ ์ฌ๋ณผ, ๋ฌธ์์ด, ์ซ์ ๋ฑ์ผ๋ก ํํํ๋ฉฐ, ์ธ๋ถ ์๋น์ค๊ฐ ์ ๊ณตํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃจ๋ ค ํ ๋ ๋ธ๋ ค์ค๋ ์ผ์ด ํํ๋ค. ํ์ ์ฝ๋๋ง์ผ๋ก๋ ํน๋ณํ ๋ถํธํ ์ํฉ์ ๋ณ๋ก ์์ง๋ง ๊ทธ ์ด์์ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํ ๋๊ฐ ์๋ค. ์ฌ๊ธฐ์ '๊ทธ ์ด์'์ด๋ผ ํ๋ฉด ๋ฐ๋ก ์๋ธํด๋์ค๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์๋ธํด๋์ค๋ ๋ ๊ฐ์ง ๋ฉด์์ ํนํ ๋งค๋ ฅ์ ์ด๋ค. ์ฒซ์งธ, ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํ๋๋ก ํด์ฃผ๋ ๋คํ์ฑ์ ์ ๊ณตํ๋ค. ๋ ๋ฒ์งธ ๋งค๋ ฅ์ ํน์ ํ์ ์์๋ง ์๋ฏธ๊ฐ ์๋ ๊ฐ์ ์ฌ์ฉํ๋ ํ๋๋ ๋ฉ์๋๊ฐ ์์ ๋ ๋ฐํ๋๋ค.
๐ก ์๊ฒฌ
- ๋์์ธํจํด
- ์ํ ํจํด: https://refactoring.guru/ko/design-patterns/state
- ์ ๋ต ํจํด: https://refactoring.guru/ko/design-patterns/strategy
- ์ฟผ๋ฆฌ ๋น๋๋ ์ ์ฌํ ๋์์ธ ํจํด์ ์ฌ์ฉํ๋ ๊ฑธ๊น์?
- ๋น๋ ํจํด: https://refactoring.guru/ko/design-patterns/builder
- ์ ๋ต์ด๋ ์ํ์ ๋ฐ๋ผ ์ปจํ ์คํธ๋ฅผ ๋ฐ๊พผ๋ค๋ ์ ์ด OAuth๋ฅผ ๋ ์ฌ๋ฆฌ๊ฒ ํฉ๋๋ค.
p.495
์๋ธํด๋์ค๋ก ๋ง๋ ๋ณ์ข ์ด ๋ค๋ฅธ ๋ชจ๋๋ก ์ด๋ํ๊ฑฐ๋ ์์ ํ ์ฌ๋ผ์ง๊ธฐ๋ ํ๋ฉด์ ๊ฐ์น๊ฐ ๋ฐ๋์ง๊ธฐ๋ ํ๋ค. ์๋ธํด๋์ค๋ ๊ฒฐ๊ตญ ํ ๋ฒ๋ ํ์ฉ๋์ง ์๊ธฐ๋ ํ๋ฉฐ, ๋๋ก ์๋ธํด๋์ค๋ฅผ ํ์๋ก ํ์ง ์๋ ๋ฐฉ์์ผ๋ก ๋ง๋ค์ด์ง ๊ธฐ๋ฅ์์๋ง ์ฐ์ด๊ธฐ๋ ํ๋ค. ๋ ์ด์ ์ฐ์ด์ง ์๋ ์๋ธํด๋์ค์ ๋ง์ฃผํ๋ ํ๋ก๊ทธ๋๋จธ๋ ๊ฐ์น ์๋ ๊ฒ์ ์ดํดํ๋๋ผ ์๋์ง๋ฅผ ๋ญ๋นํ ๊ฒ์ด๋ค. ์ด๋ฐ ์ ๋๊น์ง ๋๋ฉด ์๋ธํด๋์ค๋ฅผ ์ํผํด๋์ค์ ํ๋๋ก ๋์ฒดํด ์ ๊ฑฐํ๋ ๊ฒ ์ต์ ์ด๋ค.
p.502
์ํผํด๋์ค ์ถ์ถํ๊ธฐ์ ๋์์ผ๋ก๋ ํด๋์ค ์ถ์ถํ๊ธฐ๊ฐ ์๋ค. ์ด๋ ๊ฒ์ ์ ํํ๋๋๋ ์ค๋ณต ๋์์ ์์์ผ๋ก ํด๊ฒฐํ๋๋ ์์์ผ๋ก ํด๊ฒฐํ๋๋์ ๋ฌ๋ ธ๋ค.
p.507
๊ณ์ธต๊ตฌ์กฐ๋ ์งํํ๋ฉด์ ์ด๋ค ํด๋์ค์ ๊ทธ ๋ถ๋ชจ๊ฐ ๋๋ฌด ๋น์ทํด์ ธ์ ๋๋ ๋ ๋ฆฝ์ ์ผ๋ก ์กด์ฌํด์ผ ํ ์ด์ ๊ฐ ์ฌ๋ผ์ง๋ ๊ฒฝ์ฐ๊ฐ ์๊ธฐ๊ธฐ๋ ํ๋ค. ๋ฐ๋ก ๊ทธ ๋์ ํ๋๋ก ํฉ์ณ์ผ ํ ์์ ์ด๋ค.
๋ฏธ๋๋ฅผ ์๊ฐํ์ฌ ๋ ์ ํฉํ ์ด๋ฆ์ ํด๋์ค๋ฅผ ๋จ๊ธฐ์. ๋ ๋ค ์ ์ ์น ์๋ค๋ฉด ์์๋ก ํ๋๋ฅผ ๊ณ ๋ฅธ๋ค.
๐ก ์๊ฒฌ
- ์์์ is-a ๊ด๊ณ์ผ ๊ฒฝ์ฐ ์ฌ์ฉํ๊ณ , ํฉ์ฑ(์์)์ has-a ๊ด๊ณ์ผ ๋ ์ฌ์ฉํฉ๋๋ค.
- ๊ฒฐํฉ๋๋ ์์(inheritance) > ์์(delegation) > ํฉ์ฑ(composition) ์์ผ๋ก ๋๋ค๊ณ ํฉ๋๋ค.
p.508
ํ์ง๋ง ์์์๋ ๋จ์ ์ด ์๋ค. ๊ฐ์ฅ ๋ช ํํ ๋จ์ ์ ํ ๋ฒ๋ง ์ธ ์ ์๋ ์นด๋๋ผ๋ ๊ฒ์ด๋ค.
์์ปจ๋ ์ฌ๋ ๊ฐ์ฒด์ ๋์์ '๋์ด๋'์ '์๋ ์์ค'์ ๋ฐ๋ผ ๋ฌ๋ฆฌ ํ๊ณ ์ถ๋ค๋ฉด ์๋ธํด๋์ค๋ ์ ์์ด์ ์ด๋ฅด์ ์ด ๋๊ฑฐ๋, ํน์ ๋ถ์์ ์๋ฏผ์ด ๋์ด์ผ ํ๋ค. ๋ ๋ค๋ ์ ๋๋ค.
๐ก ์๊ฒฌ
- Java, JavaScript๋ ๋ค์ค ์์์ ์ง์ํ์ง ์์ผ๋ฉฐ, C++์ ๋ค์ค ์์์ ์ง์ํ๋ค.
- ๋ค์ค์์์ ์์ ๋ฐ์ ํ๋๋ ๋ฉ์๋๋ช ์ด ๋์ผํ ๊ฒฝ์ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ค์ค์์์ ์ง์ํ์ง ์๋๋ค. (๊ด๋ จ ํฌ์คํ )
p.509
๋ ๋ค๋ฅธ ๋ฌธ์ ๋ก, ์์์ ํด๋์ค๋ค์ ๊ด๊ณ๋ฅผ ์์ฃผ ๊ธด๋ฐํ๊ฒ ๊ฒฐํฉํ๋ค.
(ํด๋์ค) ์์๋ณด๋ค๋ (๊ฐ์ฒด) ์ปดํฌ์ง์ ์ ์ฌ์ฉํ๋ผ!
p.512
์์์ ํ ๋ฒ๋ง ์ฌ์ฉํ ์ ์๋ ๋๊ตฌ๋ค. ๋ฐ๋ผ์ ์์์ ์ฌ์ฉํด์ผ ํ ๋ค๋ฅธ ์ด์ ๊ฐ ์๊ธด๋ค๋ฉด, ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ด์ ๊ฐ ํ๋ฆฌ๋ฏธ์ ์์ฝ ์๋ธํด๋์ค๋ณด๋ค ๊ฐ์น๊ฐ ํฌ๋ค๊ณ ์๊ฐ๋๋ค๋ฉด ํ๋ฆฌ๋ฏธ์ ์์ฝ์ (์์์ด ์๋) ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ํํํด์ผ ํ ๊ฒ์ด๋ค. ๋ํ, ๊ธฐ๋ณธ ์์ฝ์์ ํ๋ฆฌ๋ฏธ์ ์์ฝ์ผ๋ก ๋์ ์ผ๋ก ์ ํํ ์ ์๋๋ก ํด์ผ ํ ์๋ ์๋ค.
p.517
์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๊ฐ์ฒด์ ์กด์ฌํ์ง ์๋ ์์ฑ์ ์ ๊ทผํ๋ ค ํ๋ฉด
undefined
๋ฅผ ๋ฐํํ๋ฏ๋ก ์์ ์ฝ๋๋ ๊ทธ๋ ๊ฒ ์ฒ๋ฆฌํ๋ค.
class Booking {
// ...
get hasDinner() {
return this._premiumDelegate ? this._premiumDelegate.hasDinner : undefined;
}
}
๐ก ์๊ฒฌ
- ๊ฒฝ์ง: ์์ ์ฝ๋์์๋
undefined
๋ฅผ ๋ฐํํด์ฃผ์๋๋ฐ ์ ์๋ค๋ฉด ๋น ๊ฐ์ ๋ช ์์ ์ผ๋ก ๋ํ๋ด๋null
์ ์ฌ์ฉํ์ ๊ฒ ๊ฐ์ต๋๋ค. ๋ค๋ฅธ ๋ถ๋ค์undefined
์null
์ ์ฌ์ฉ์ ๊ตฌ๋ถํ๋ ๊ธฐ์ค์ด ์๋์? - ์ด์: ์์ ์ฝ๋์์๋ PremiumBooking๊ณผ ๋ฌ๋ฆฌ Booking์๋
hasDinner
๋ผ๋ ๋ฉ์๋ ์์ฒด๊ฐ ์กด์ฌํ์ง ์์์ผ๋ฏ๋กundefined
๋ฅผ ๋ฐํํ ๊ฒ ๊ฐ์ต๋๋ค. - ํ์: Optional Chaining์ ์ฌ์ฉํด์
this._premiumDelegate?.hasDinner
๋ก ์ถ์ฝํ ์๋ ์์ ๊ฒ ๊ฐ์ต๋๋ค.
๐ก ์๊ฒฌ
- ์ด์: React๋ ํฉ์ฑ ๋ชจ๋ธ์ ์ง์ํฉ๋๋ค. (๋งํฌ)
- ๊ฒฝ์ง: Vue์ slots๊ณผ ๋น์ทํ ๊ฒ ๊ฐ์ต๋๋ค.
p.529
์์์ ์๋ชป ์ ์ฉํ ์๋ก๋ ์๋ฐ์ ์คํ ํด๋์ค๊ฐ ์ ๋ช ํ๋ค.
๋ฆฌ์คํธ์ ์ฐ์ฐ ์ค ์คํ์๋ ์ ์ฉ๋์ง ์๋ ๊ฒ ๋ง์์๋ ๊ทธ ๋ชจ๋ ์ฐ์ฐ์ด ์คํ ์ธํฐํ์ด์ค์ ๊ทธ๋๋ก ๋ ธ์ถ๋๋ ๊ฒ ์๋๊ฐ! ์ด๋ณด๋ค๋ ์คํ์์ ๋ฆฌ์คํธ ๊ฐ์ฒด๋ฅผ ํ๋์ ์ ์ฅํด๋๊ณ ํ์ํ ๊ธฐ๋ฅ๋ง ์์ํ๋ค๋ฉด ๋ ๋ฉ์ก์ ๊ฒ์ด๋ค.
์ ๋๋ก ๋ ์์์ด๋ผ๋ฉด ์๋ธํด๋์ค๊ฐ ์ํผํด๋์ค์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํจ์ ๋ฌผ๋ก , ์๋ธํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์ํผํด๋์ค์ ์ธ์คํด์ค๋ก๋ ์ทจ๊ธํ ์ ์์ด์ผ ํ๋ค.
p.530
์ด๋ฆ๊ณผ ์์ง ํฌ๊ธฐ ๋ฑ์ ์์ฑ์ผ๋ก ๊ฐ๋ ์๋์ฐจ ๋ชจ๋ธ ํด๋์ค(ํ์ )๊ฐ ์๋ค๊ณ ํ์. ๊ทธ๋ฌ๋ฉด ์ฌ๊ธฐ์ ์ฐจ๋ ์๋ณ ๋ฒํธ์ ์ ์กฐ์ผ์ ๋ฉ์๋๋ฅผ ๋ํ๋ฉด ๋ฌผ๋ฆฌ์ ์ธ ์๋์ฐจ(์ธ์คํด์ค)๋ฅผ ํํํ๋ ๋ฐ ์ฌํ์ฉํ ์ ์์ ๊ฑฐ๋ผ ์ฐฉ๊ฐํ ์ ์๋ค. ์ด๋ ํํ๊ณ ๋ฏธ๋ฌํ ๋ชจ๋ธ๋ง ์ค์๋ก, ๋ด๊ฐ ํ์ -์ธ์คํด์ค ๋ํ์ด์์ดtype-instance homonym๋ผ๊ณ ๋ถ๋ฅด๋ ๊ฒ์ด๋ค.
๐ก ์๊ฒฌ
- ๊ฒฝ์ง: ๋ ผ๋ฆฌ์ ์ธ ๋ชจ๋ธ ํด๋์ค์ ๋ฌผ๋ฆฌ์ ์ธ ์ธ์คํด์ค๋ฅผ ํผ์ฉํ์ง ๋ง๋ผ๋ ์๋ฏธ๋ก ์ดํดํ๋๋ฐ, ํผ์ ๊ตฌํํ๋๋ผ๋ฉด ์ฌํ์ฉํ์ ๊ฒ ๊ฐ์์ ์ฌ์ค ๋ฌด์จ ๋ง์ธ์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ํผ ์๋ธ/ํด๋์ค๋ ๊ฐํ๊ฒ ๊ฒฐํฉ๋ ๊ด๊ณ๋ผ์ ์ํผํด๋์ค๋ฅผ ์์ ํ๋ฉด ์๋ธํด๋์ค๊ฐ ๋ง๊ฐ์ง๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ด๋ค.
์์์ ๊ธฐ๋ฅ์ ์ด์ฉํ ํธ์คํธ์ ํจ์ ๋ชจ๋๋ฅผ ์ ๋ฌ ํจ์forwarding function์ผ๋ก ๋ง๋ค์ด์ผ ํ๋ค๋ ์ ์ด๋ค.
๐ก ์๊ฒฌ
- ๊ฒฝ์ง: ์ ๋ฌ ํจ์๋ ํจ์์ ์ธ์๋ฅผ ์ ๋ฌํ๋ฉด์ ํจ์๋ฅผ ํธ์ถํ๋ ๋ก์ง์ ๊ฐ์ง ํจ์๋ฅผ ๋งํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
- ํ์: p.522์ ๊ฐ์ด '์์์ ์ํด ํธ์ถ๋ง ํ๋ ํจ์'๋ฅผ ๋งํ๋ ๊ฒ ๊ฐ์ต๋๋ค.
class Bird {
// ...
selectSpeciesDelegate(data) {
switch (data.type) {
case "์ ๋ฝ ์ ๋น":
return new EuropeanSwallowDelegate();
case "์ํ๋ฆฌ์นด ์ ๋น":
return new AfricanSwallowDelegate(data);
case "๋
ธ๋ฅด์จ์ด ํ๋ ์ต๋ฌด":
return new NorwegianBlueParrotDelegate(data);
default:
return null;
}
}
}