OOP

๐Ÿ“Œ Child (Sub, Derive) = private ์ œ์™ธ Parent (Super, Base) + ฮฑ

White-box Reuse

๐Ÿ“Œ ์ƒ์†์„ ํ†ตํ•œ ์žฌ์‚ฌ์šฉ, Child ํด๋ž˜์Šค์—์„œ Parent ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅ
โ†” Black-box Reuse

IS-A Relationship

๐Ÿ“Œ A is-a B = A (Child) โŠ‚ B (Parent)
= Hierarchical Structure (๊ณ„์ธต ๊ตฌ์กฐ)
= ์ž์‹ ํด๋ž˜์Šค๋Š” ๊ทธ๋“ค์˜ ๋ถ€๋ชจ ํด๋ž˜์Šค๋ฅผ ์˜๋ฏธ/๋‚ด์šฉ์ ์œผ๋กœ Substitution (๋Œ€์ฒด) ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ
!= ํ”„๋กœ๊ทธ๋žจ/์ปดํŒŒ์ผ ๊ด€์ ์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค ์ž๋ฆฌ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ (์ด๋Š” OOP ์–ธ์–ด๋ผ๋ฉด ๋‹น์—ฐํ•œ ๊ฒƒ)

  • B๊ฐ€ ๊ธฐ๋Œ€๋˜๋Š” ๊ณณ์— A๋ฅผ ๋Œ€์‹  ์ „๋‹ฌํ•ด๋„ ์•„๋ฌด๋Ÿฐ ๋ฌธ์ œ X (Altering ์—†์ด ๋™์ž‘), B์˜ ์—ญํ• ์„ ๋ชจ์กฐ๋ฆฌ A๊ฐ€ ๋‹ค ํ•  ์ˆ˜ ์žˆ์Œ
    โ†” HAS-A Relationship
  • ์ƒ์†์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, Composition (ํ•ฉ์„ฑ)์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒŒ ๋” ์ข‹์Œ

Subtyping vs Implementation Inheritance

Subtyping, Interface InheritanceImplementation/Code Inheritance
๋ชฉ์  ํ˜•์„ฑ์˜๋ฏธ์  ๊ด€๊ณ„ X, ๊ตฌํ˜„์˜ Reusability (์žฌ์‚ฌ์šฉ์„ฑ)
๊ตฌํ˜„InheritanceComposition (ํ•ฉ์„ฑ)๋ถ€ํ„ฐ ๊ณ ๋ ค

์žฅ์ 

Reusability (์žฌ์‚ฌ์šฉ์„ฑ)

  1. Code Reuse
  2. โญ Concept Reuse = IS-A ๊ด€๊ณ„ ๊ตฌํ˜„
    • Generalํ•œ ๊ฐœ๋… + ฮฑ โžก Specificํ•œ ๊ฐœ๋… ์ •์˜
    • ๊ณตํ†ต ์ฝ”๋“œ๊ฐ€ ์—†๋”๋ผ๋„, ํด๋ž˜์Šค๋ฅผ ๋™์ผํ•œ ๊ฐœ๋…์œผ๋กœ ๋ฌถ์–ด ์ •์˜๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Œ

๋‹จ์ 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• = ์žฅ์ 

  1. โญ ํด๋ž˜์Šค ๊ฐ„ Coupling (๊ฒฐํ•ฉ๋„) ์ฆ๊ฐ€
  2. ๋ถˆํ•„์š”ํ•œ ๊ธฐ๋Šฅ ์ƒ์†
  3. Dynamic Binding (๋™์  ๋ฐ”์ธ๋”ฉ) Overhead โžก ๋А๋ฆฐ ์†๋„
  4. ๋‹จ์ผ ์ƒ์†๋งŒ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ, ์˜คํžˆ๋ ค ์ค‘๋ณต ์ฝ”๋“œ๊ฐ€ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ์Œ

๋‹ค์ค‘ ์ƒ์† ๋ฌธ์ œ (Diamond Prob)

๐Ÿ“ŒTodo

๋ฌธ๋ฒ•

Java

โ€œ๋‚ด๊ฐ€ ์ž๋ฐ”๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ๊ฐ€์žฅ ํ›„ํšŒํ•˜๋Š” ์ผ์€ ์ƒ์†์„ ๋งŒ๋“  ์ ์ด๋‹คโ€

  • ์ œ์ž„์Šค ๊ณ ์Šฌ๋ง(James Arthur Gosling), Java ์ฐฝ์‹œ์ž
  • class ํด๋ž˜์Šค/์ธํ„ฐํŽ˜์ด์Šค๋ช… extends ํด๋ž˜์Šค/์ธํ„ฐํŽ˜์ด์Šค๋ช… { };
  • ๋‹จ์ผ ์ƒ์†๋งŒ ์ง€์›

CPP

  • class ํด๋ž˜์Šค๋ช… : ์ ‘๊ทผ์ œํ•œ์ž ํด๋ž˜์Šค๋ช…1, [์ ‘๊ทผ์ œํ•œ์ž ํด๋ž˜์Šค๋ช…2, ...] { };
  • ๋‹ค์ค‘ ์ƒ์† ์ง€์›