๐ Child (Sub, Derive) = private ์ ์ธ Parent (Super, Base) + ฮฑ
- ๋ชฉ์ : IS-A Relationship != ๋จ์ ์ฝ๋ Reusability (์ฌ์ฌ์ฉ์ฑ)
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 Inheritance | Implementation/Code Inheritance | |
|---|---|---|
| ๋ชฉ์ | ํ์ฑ | ์๋ฏธ์ ๊ด๊ณ X, ๊ตฌํ์ Reusability (์ฌ์ฌ์ฉ์ฑ) |
| ๊ตฌํ | Inheritance | Composition (ํฉ์ฑ)๋ถํฐ ๊ณ ๋ ค |
์ฅ์
- Code Reuse
- Extensibility (ํ์ฅ์ฑ), Polymorphism (๋คํ์ฑ): ๊ธฐ์กด ์ฝ๋์ ๋ณํ ์์ด, ๊ธฐ๋ฅ์ ์ถ๊ฐ/์ฌ์ ์ํ์ฌ ์ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์์ โก ๊ฐ๋ฐ ์๊ฐ ๋จ์ถ
- Reliable (์ ๋ขฐ์ฑ): ์ด๋ฏธ ์ ํ ์คํธ๋ ์ฝ๋ โก ๋๋ฒ๊น ์๊ฐ ๋จ์ถ
- Maintainability (์ ์ง๋ณด์์ฑ): ์ฝ๋์ ์ค๋ณต ์ ๊ฑฐ
- Interface Consistency (์ผ๊ด์ฑ)
- โญ Concept Reuse = IS-A ๊ด๊ณ ๊ตฌํ
- Generalํ ๊ฐ๋ + ฮฑ โก Specificํ ๊ฐ๋ ์ ์
- ๊ณตํต ์ฝ๋๊ฐ ์๋๋ผ๋, ํด๋์ค๋ฅผ ๋์ผํ ๊ฐ๋ ์ผ๋ก ๋ฌถ์ด ์ ์๋ฅผ ๊ณต์ ํ ์ ์์
๋จ์
ํด๊ฒฐ ๋ฐฉ๋ฒ = ์ฅ์
- โญ ํด๋์ค ๊ฐ Coupling (๊ฒฐํฉ๋) ์ฆ๊ฐ
- Less Data Abstraction, Encapsulation (์บก์ํ), Information Hiding (์ ๋ณด ์๋):
protected, Parent์ ๋ด๋ถ๊ฐ Child์๊ฒ ๊ณต๊ฐ๋จ - Bad Extensibility (ํ์ฅ์ฑ), Flexibility (์ ์ฐ์ฑ): Child๋ Parent์ ๊ตฌํ์ ์ข ์๋จ, Parent์ ๋ณ๊ฒฝ/์ค๋ฅ๊ฐ Child๋ก ์ ํ โก ๋ณ๊ฒฝ/์ค๋ฅ ๋ฒ์ ์ปค์ง
- Bad Readability (๊ฐ๋ ์ฑ): Child ํด๋์ค๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ Parent ํด๋์ค์ ๋ํด ๋จผ์ ์์์ผ ํจ
- ํด๋์ค/์กฐํฉ ํญ๋ฐ (Class/Combination Explosion): ํ์ ์ด์์ผ๋ก ๋ง์ ํด๋์ค๋ฅผ ์ ์ํ๊ฒ ๋๋ ๋ฌธ์
- SW Complexity (SW Crisis) ์ฆ๊ฐ
- ์์ธ: ์์ ๊ด๊ณ๋ ์ปดํ์ผ ํ์์ ๊ฒฐ์ ๋๊ธฐ ๋๋ฌธ
- Less Data Abstraction, Encapsulation (์บก์ํ), Information Hiding (์ ๋ณด ์๋):
- ๋ถํ์ํ ๊ธฐ๋ฅ ์์
- Dynamic Binding (๋์ ๋ฐ์ธ๋ฉ) Overhead โก ๋๋ฆฐ ์๋
- ๋จ์ผ ์์๋ง ์ง์ํ๋ ๊ฒฝ์ฐ, ์คํ๋ ค ์ค๋ณต ์ฝ๋๊ฐ ๋์ด๋ ์ ์์
๋ค์ค ์์ ๋ฌธ์ (Diamond Prob)
๐Todo
๋ฌธ๋ฒ
โ๋ด๊ฐ ์๋ฐ๋ฅผ ๋ง๋ค๋ฉด์ ๊ฐ์ฅ ํํํ๋ ์ผ์ ์์์ ๋ง๋ ์ ์ด๋คโ
- ์ ์์ค ๊ณ ์ฌ๋ง(James Arthur Gosling), Java ์ฐฝ์์
class ํด๋์ค/์ธํฐํ์ด์ค๋ช extends ํด๋์ค/์ธํฐํ์ด์ค๋ช { };- ๋จ์ผ ์์๋ง ์ง์
class ํด๋์ค๋ช : ์ ๊ทผ์ ํ์ ํด๋์ค๋ช 1, [์ ๊ทผ์ ํ์ ํด๋์ค๋ช 2, ...] { };- ๋ค์ค ์์ ์ง์