Skip to content

Latest commit

ย 

History

History

ch12

โฌ…๏ธ 11์žฅ | 1์žฅ โžก๏ธ

12์žฅ ์ƒ์† ๋‹ค๋ฃจ๊ธฐ

Note

'์ƒ์† ๋‹ค๋ฃจ๊ธฐ' ์ฑ•ํ„ฐ๋Š” ๋‹ค์Œ ์งˆ๋ฌธ์„ ์ค‘์‹ฌ์œผ๋กœ ์ฝ์–ด๋‚˜๊ฐ€์‹œ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

  1. ์–ธ์ œ ์ƒ์†ํ•ด์•ผ ํ•˜๋Š”๊ฐ€
  2. ์Šˆํผํด๋ž˜์Šค์™€ ์„œ๋ธŒํด๋ž˜์Šค์˜ ์š”์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ ์ •๋ฆฌํ•ด์•ผ ํ•˜๋Š”๊ฐ€
  3. ์ƒ์†์„ ์˜ค์šฉํ–ˆ๋‹ค๋ฉด ์–ด๋–ค ๋Œ€์•ˆ์ด ์žˆ๋Š”๊ฐ€

12.1 ๋ฉ”์„œ๋“œ ์˜ฌ๋ฆฌ๊ธฐ

p.476

๋ฉ”์„œ๋“œ ์˜ฌ๋ฆฌ๊ธฐ๋ฅผ ์ ์šฉํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฌ์šด ์ƒํ™ฉ์€ ๋ฉ”์„œ๋“œ๋“ค์˜ ๋ณธ๋ฌธ ์ฝ”๋“œ๊ฐ€ ๋˜‘๊ฐ™์„ ๋•Œ๋‹ค. ์ด๋Ÿด ๋• ๊ทธ๋ƒฅ ๋ณต์‚ฌํ•ด ๋ถ™์—ฌ๋„ฃ์œผ๋ฉด ๋์ด๋‹ค.

p.477

๋ฉ”์„œ๋“œ ์˜ฌ๋ฆฌ๊ธฐ๋ฅผ ์ ์šฉํ•˜๊ธฐ์— ๊ฐ€์žฅ ์ด์ƒํ•˜๊ณ  ๋ณต์žกํ•œ ์ƒํ™ฉ์€ ํ•ด๋‹น ๋ฉ”์„œ๋“œ์˜ ๋ณธ๋ฌธ์—์„œ ์ฐธ์กฐํ•˜๋Š” ํ•„๋“œ๋“ค์ด ์„œ๋ธŒํด๋ž˜์Šค์—๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ๋ผ๋ฉด ํ•„๋“œ๋“ค ๋จผ์ € ์Šˆํผํด๋ž˜์Šค๋กœ ์˜ฌ๋ฆฐ ํ›„์— ๋ฉ”์„œ๋“œ๋ฅผ ์˜ฌ๋ ค์•ผ ํ•œ๋‹ค.

๐Ÿ’ก ์˜๊ฒฌ

12.2 ํ•„๋“œ ์˜ฌ๋ฆฌ๊ธฐ

p.479

์„œ๋ธŒํด๋ž˜์Šค๋“ค์ด ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ๊ฑฐ๋‚˜ ๋’ค๋Šฆ๊ฒŒ ํ•˜๋‚˜์˜ ๊ณ„์ธต๊ตฌ์กฐ๋กœ ๋ฆฌํŽ™ํ„ฐ๋ง๋œ ๊ฒฝ์šฐ๋ผ๋ฉด ์ผ๋ถ€ ๊ธฐ๋Šฅ์ด ์ค‘๋ณต๋˜์–ด ์žˆ์„ ๋•Œ๊ฐ€ ์™•์™• ์žˆ๋‹ค. ํŠนํžˆ ํ•„๋“œ๊ฐ€ ์ค‘๋ณต๋˜๊ธฐ ์‰ฝ๋‹ค. ํ•„๋“œ๋“ค์ด ๋น„์Šทํ•œ ๋ฐฉ์‹์œผ๋กœ ์“ฐ์ธ๋‹ค๊ณ  ํŒ๋‹จ๋˜๋ฉด ์Šˆํผํด๋ž˜์Šค๋กœ ๋Œ์–ด์˜ฌ๋ฆฌ์ž. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‘ ๊ฐ€์ง€ ์ค‘๋ณต์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค. ์ฒซ์งธ, ๋ฐ์ดํ„ฐ ์ค‘๋ณต ์„ ์–ธ์„ ์—†์•จ ์ˆ˜ ์žˆ๋‹ค. ๋‘˜์งธ, ํ•ด๋‹น ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋™์ž‘์„ ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ์Šˆํผํด๋ž˜์Šค๋กœ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.

12.3 ์ƒ์„ฑ์ž ๋ณธ๋ฌธ ์˜ฌ๋ฆฌ๊ธฐ

p.481

์„œ๋ธŒํด๋ž˜์Šค๋“ค์—์„œ ๊ธฐ๋Šฅ์ด ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋“ค์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ํ•จ์ˆ˜ ์ถ”์ถœํ•˜๊ธฐ์™€ ๋ฉ”์„œ๋“œ ์˜ฌ๋ฆฌ๊ธฐ๋ฅผ ์ฐจ๋ก€๋กœ ์ ์šฉํ•˜์—ฌ ๋ง๋”ํžˆ ์Šˆํผํด๋ž˜์Šค๋กœ ์˜ฎ๊ธฐ๊ณค ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ ๋ฉ”์„œ๋“œ๊ฐ€ ์ƒ์„ฑ์ž๋ผ๋ฉด ์Šคํ…์ด ๊ผฌ์ธ๋‹ค. ์ƒ์„ฑ์ž๋Š” ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๊ณผ ํ˜ธ์ถœ ์ˆœ์„œ์— ์ œ์•ฝ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ๋‹ค๋ฅธ ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•œ๋‹ค.

12.4 ๋ฉ”์„œ๋“œ ๋‚ด๋ฆฌ๊ธฐ

p.485

ํŠน์ • ์„œ๋ธŒํด๋ž˜์Šค ํ•˜๋‚˜(ํ˜น์€ ์†Œ์ˆ˜)์™€๋งŒ ๊ด€๋ จ๋œ ๋ฉ”์„œ๋“œ๋Š” ์Šˆํผํด๋ž˜์Šค์—์„œ ์ œ๊ฑฐํ•˜๊ณ  ํ•ด๋‹น ์„œ๋ธŒํด๋ž˜์Šค(๋“ค)์— ์ถ”๊ฐ€ํ•˜๋Š” ํŽธ์ด ๊น”๋”ํ•˜๋‹ค. ๋‹ค๋งŒ, ์ด ๋ฆฌํŽ™ํ„ฐ๋ง์€ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ์„œ๋ธŒํด๋ž˜์Šค๊ฐ€ ์ •ํ™•ํžˆ ๋ฌด์—‡์ธ์ง€๋ฅผ ํ˜ธ์ถœ์ž๊ฐ€ ์•Œ๊ณ  ์žˆ์„ ๋•Œ๋งŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

12.5 ํ•„๋“œ ๋‚ด๋ฆฌ๊ธฐ

p.486

์„œ๋ธŒํด๋ž˜์Šค ํ•˜๋‚˜(ํ˜น์€ ์†Œ์ˆ˜)์—์„œ๋งŒ ์‚ฌ์šฉํ•˜๋Š” ํ•„๋“œ๋Š” ํ•ด๋‹น ์„œ๋ธŒํด๋ž˜์Šค(๋“ค)๋กœ ์˜ฎ๊ธด๋‹ค.

๐Ÿ’ก ์˜๊ฒฌ

  • ์™ผ์ชฝ ์˜ˆ๋ฌธ์—๋Š” private์ด์—ˆ๋Š”๋ฐ ์˜ค๋ฅธ์ชฝ ์˜ˆ๋ฌธ์—์„  ์™œ protected๊ฐ€ ๋˜์—ˆ์„๊นŒ์š”? ๐Ÿค”
  • ์บก์Аํ™”๊ฐ€ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณดํ†ต private์œผ๋กœ ์„ ์–ธํ•˜๊ณ  ๊ฒŒํ„ฐ์™€ ์„ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์„œ๋ธŒํด๋ž˜์Šค๋กœ ํ•„๋“œ๋ฅผ ์˜ฎ๊ฒผ์œผ๋ฏ€๋กœ ์Šˆํผํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก protected๋กœ ์„ ์–ธํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. protected ํ‚ค์›Œ๋“œ๋กœ ์„ ์–ธํ•œ ํ•„๋“œ๋Š” ๊ฐ™์€ ํŒจํ‚ค์ง€ ๋˜๋Š” ์„œ๋ธŒํด๋ž˜์Šค์—์„œ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ํ‚ค์›Œ๋“œ protected (TypeScript) https://www.typescriptlang.org/docs/handbook/2/classes.html#protected

12.6 ํƒ€์ž… ์ฝ”๋“œ๋ฅผ ์„œ๋ธŒํด๋ž˜์Šค๋กœ ๋ฐ”๊พธ๊ธฐ

p.487

์†Œํ”„ํŠธ์›จ์–ด ์‹œ์Šคํ…œ์—์„œ๋Š” ๋น„์Šทํ•œ ๋Œ€์ƒ๋“ค์„ ํŠน์ • ํŠน์„ฑ์— ๋”ฐ๋ผ ๊ตฌ๋ถ„ํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์ž์ฃผ ์žˆ๋‹ค. ์ด๋Ÿฐ ์ผ์„ ๋‹ค๋ฃจ๋Š” ์ˆ˜๋‹จ์œผ๋กœ๋Š” ํƒ€์ž… ์ฝ”๋“œType Code ํ•„๋“œ๊ฐ€ ์žˆ๋‹ค. ํƒ€์ž…์ฝ”๋“œ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋”ฐ๋ผ ์—ด๊ฑฐํ˜•์ด๋‚˜ ์‹ฌ๋ณผ, ๋ฌธ์ž์—ด, ์ˆซ์ž ๋“ฑ์œผ๋กœ ํ‘œํ˜„ํ•˜๋ฉฐ, ์™ธ๋ถ€ ์„œ๋น„์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋ ค ํ•  ๋•Œ ๋”ธ๋ ค์˜ค๋Š” ์ผ์ด ํ”ํ•˜๋‹ค. ํƒ€์ž… ์ฝ”๋“œ๋งŒ์œผ๋กœ๋„ ํŠน๋ณ„ํžˆ ๋ถˆํŽธํ•œ ์ƒํ™ฉ์€ ๋ณ„๋กœ ์—†์ง€๋งŒ ๊ทธ ์ด์ƒ์˜ ๋ฌด์–ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ '๊ทธ ์ด์ƒ'์ด๋ผ ํ•˜๋ฉด ๋ฐ”๋กœ ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์„œ๋ธŒํด๋ž˜์Šค๋Š” ๋‘ ๊ฐ€์ง€ ๋ฉด์—์„œ ํŠนํžˆ ๋งค๋ ฅ์ ์ด๋‹ค. ์ฒซ์งธ, ์กฐ๊ฑด์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋„๋ก ํ•ด์ฃผ๋Š” ๋‹คํ˜•์„ฑ์„ ์ œ๊ณตํ•œ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋งค๋ ฅ์€ ํŠน์ • ํƒ€์ž…์—์„œ๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋Š” ํ•„๋“œ๋‚˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์„ ๋•Œ ๋ฐœํ˜„๋œ๋‹ค.

๐Ÿ’ก ์˜๊ฒฌ

12.7 ์„œ๋ธŒํด๋ž˜์Šค ์ œ๊ฑฐํ•˜๊ธฐ

p.495

์„œ๋ธŒํด๋ž˜์Šค๋กœ ๋งŒ๋“  ๋ณ€์ข…์ด ๋‹ค๋ฅธ ๋ชจ๋“ˆ๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ์™„์ „ํžˆ ์‚ฌ๋ผ์ง€๊ธฐ๋„ ํ•˜๋ฉด์„œ ๊ฐ€์น˜๊ฐ€ ๋ฐ”๋ž˜์ง€๊ธฐ๋„ ํ•œ๋‹ค. ์„œ๋ธŒํด๋ž˜์Šค๋Š” ๊ฒฐ๊ตญ ํ•œ ๋ฒˆ๋„ ํ™œ์šฉ๋˜์ง€ ์•Š๊ธฐ๋„ ํ•˜๋ฉฐ, ๋•Œ๋ก  ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ธฐ๋Šฅ์—์„œ๋งŒ ์“ฐ์ด๊ธฐ๋„ ํ•œ๋‹ค. ๋” ์ด์ƒ ์“ฐ์ด์ง€ ์•Š๋Š” ์„œ๋ธŒํด๋ž˜์Šค์™€ ๋งˆ์ฃผํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๊ฐ€์น˜ ์—†๋Š” ๊ฒƒ์„ ์ดํ•ดํ•˜๋А๋ผ ์—๋„ˆ์ง€๋ฅผ ๋‚ญ๋น„ํ•  ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฐ ์ •๋„๊นŒ์ง€ ๋˜๋ฉด ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ์Šˆํผํด๋ž˜์Šค์˜ ํ•„๋“œ๋กœ ๋Œ€์ฒดํ•ด ์ œ๊ฑฐํ•˜๋Š” ๊ฒŒ ์ตœ์„ ์ด๋‹ค.

12.8 ์Šˆํผํด๋ž˜์Šค ์ถ”์ถœํ•˜๊ธฐ

p.502

์Šˆํผํด๋ž˜์Šค ์ถ”์ถœํ•˜๊ธฐ์˜ ๋Œ€์•ˆ์œผ๋กœ๋Š” ํด๋ž˜์Šค ์ถ”์ถœํ•˜๊ธฐ๊ฐ€ ์žˆ๋‹ค. ์–ด๋А ๊ฒƒ์„ ์„ ํƒํ•˜๋А๋ƒ๋Š” ์ค‘๋ณต ๋™์ž‘์„ ์ƒ์†์œผ๋กœ ํ•ด๊ฒฐํ•˜๋А๋ƒ ์œ„์ž„์œผ๋กœ ํ•ด๊ฒฐํ•˜๋А๋ƒ์— ๋‹ฌ๋ ธ๋‹ค.


12.9 ๊ณ„์ธต ํ•ฉ์น˜๊ธฐ

p.507

๊ณ„์ธต๊ตฌ์กฐ๋„ ์ง„ํ™”ํ•˜๋ฉด์„œ ์–ด๋–ค ํด๋ž˜์Šค์™€ ๊ทธ ๋ถ€๋ชจ๊ฐ€ ๋„ˆ๋ฌด ๋น„์Šทํ•ด์ ธ์„œ ๋”๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ์กด์žฌํ•ด์•ผ ํ•  ์ด์œ ๊ฐ€ ์‚ฌ๋ผ์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๊ธฐ๋„ ํ•œ๋‹ค. ๋ฐ”๋กœ ๊ทธ ๋‘˜์„ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ์•ผ ํ•  ์‹œ์ ์ด๋‹ค.

๋ฏธ๋ž˜๋ฅผ ์ƒ๊ฐํ•˜์—ฌ ๋” ์ ํ•ฉํ•œ ์ด๋ฆ„์˜ ํด๋ž˜์Šค๋ฅผ ๋‚จ๊ธฐ์ž. ๋‘˜ ๋‹ค ์ ์ ˆ์น˜ ์•Š๋‹ค๋ฉด ์ž„์˜๋กœ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅธ๋‹ค.


12.10 ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ์œ„์ž„์œผ๋กœ ๋ฐ”๊พธ๊ธฐ

๐Ÿ’ก ์˜๊ฒฌ

  • ์ƒ์†์€ 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๊ณผ ๋น„์Šทํ•œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

12.11 ์Šˆํผํด๋ž˜์Šค๋ฅผ ์œ„์ž„์œผ๋กœ ๋ฐ”๊พธ๊ธฐ

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;
    }
  }
}

โฌ…๏ธ 11์žฅ | โฌ†๏ธ ์œ„๋กœ | 1์žฅ โžก๏ธ