λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ‹œλ„/ꡭ비지원

[D+58] μžλ°”ν”„λ‘œκ·Έλž˜λ°4 (상속, LSP, μΈν„°νŽ˜μ΄μŠ€)

by πŸ‡λ°•λ΄‰λ΄‰πŸ‡ 2022. 12. 13.

 

ꡭ비지원 D+58

- μžλ°”ν”„λ‘œκ·Έλž˜λ°4 -

 


 

상속

- μ½”λ“œμ˜ μž¬ν™œμš©μ„±μ„ 높이고 곡톡적 κ·œμ•½μ„ μ œκ³΅ν•˜κΈ° μœ„ν•œ 객체지ν–₯의 νŠΉμ„±(상속성)을 λ‚˜νƒ€λ‚Έλ‹€.
- λΆ€λͺ¨ν΄λž˜μŠ€λ₯Ό ν™•μž₯ν•˜κ³  μžμ‹ν΄λž˜μŠ€λ₯Ό λ§Œλ“œλŠ” 기법이닀.
- 상속을 λ§Œλ“€λ•Œμ—λŠ” μ–΄λŠμ •λ„ λ³Όλ₯¨μ΄ μžˆμ–΄μ•Ό ν•˜λ©°, λ³Όλ₯¨μ΄ μ—†λŠ” μƒνƒœλ‘œ 상속을 ν•œλ‹€λ©΄ μ½”λ“œμ˜ λ³΅μž‘λ„κ°€ 였히렀 μ˜¬λΌκ°€κ³  λ¦¬λ”λΉŒλ¦¬ν‹°κ°€ λ–¨μ–΄μ§ˆ 수 μžˆλ‹€.

 

상속 λ©”λͺ¨λ¦¬λ§΅

 

μƒμ„±μžμ˜ 호좜 μˆœμ„œ

μœ„μ˜ 그림을 ν†΅ν•΄μ„œ μƒμ„±μžμ˜ ν˜ΈμΆœμˆœμ„œλ₯Ό μ•Œμ•„λ³΄λ©΄, λΆ€λͺ¨ν΄λž˜μŠ€μ˜ μƒμ„±μžκ°€ λ¨Όμ € ν˜ΈμΆœλ κ²ƒ 처럼 λ³΄μ΄μ§€λ§Œ Dog의 μƒμ„±μžκ°€ λ¨Όμ € 호좜이 λœλ‹€.
μ΄λ•Œ, DogλŠ” λ‹¨μˆœνžˆ 호좜만되고 μ‹€ν–‰λ˜μ§€ μ•Šκ³  λ°”λ‘œ λΆ€λͺ¨ν΄λž˜μŠ€μΈ Animal둜 λ“€μ–΄κ°€μ„œ Animal의 μƒμ„±μžκ°€ μ‹€ν–‰λ˜κ³ λ‚˜μ„œ Dog의 μƒμ„±μžκ°€ κ·Έ 이후에 μ‹€ν–‰λœλ‹€.

이처럼 μš°λ¦¬λŠ” 각 μƒμ„±μžκ°€ 호좜과 μ‹€ν–‰μ˜ 차이 μžˆλ‹€λŠ” 것을 λͺ…ν™•νžˆ μ•Œμ•„μ•Ό ν•  ν•„μš”κ°€ μžˆλ‹€.

 

• super()

ν•˜μœ„ 클래슀의 μƒμ„±μžμ—μ„œ μƒμœ„ 클래슀의 μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν• λ•Œ μ‚¬μš©ν•˜λŠ” ν‚€μ›Œλ“œμ΄λ‹€.
μ΄λ•Œ, super()λ₯Ό μ‚¬μš©ν•  λ•Œ μ–΄λ– ν•œ μ½”λ“œλ„ μ‘΄μž¬ν•΄μ„œλŠ” μ•ˆλœλ‹€.(μ»΄νŒŒμΌμ—λŸ¬λ°œμƒ)

 

• μƒμ†μ—μ„œμ˜ static

상속은 heap λ©”λͺ¨λ¦¬μ— 자리λ₯Ό 작게 λ˜λŠ”λ° 반면 static을 μ‚¬μš©ν•˜κ²Œ 되면 μ „μ—­μ˜μ—­μ— μœ„μΉ˜ν•˜κ²Œ 되기 λ•Œλ¬Έμ— static을 μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λŠ” μƒμ†λ²”μœ„ μ•ˆμ— μžˆμ–΄λ„ μƒμ†μ˜ λŒ€μƒμ΄ μ•„λ‹ˆλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μƒμ†λœ 클래슀λ₯Ό κ°μ²΄ν™”ν•΄μ„œ λ³€μˆ˜λ‚˜ λ©”μ†Œλ“œλ₯Ό λΆˆλŸ¬λ‚Όλ•Œ 객체λͺ…μœΌλ‘œ λΆˆλŸ¬λ‚΄λŠ” λ‹€λ₯Έ λ©”μ†Œλ“œμ™€ λ³€μˆ˜μ™€λ‹¬λ¦¬ "클래슀λͺ….staticλ³€μˆ˜" 둜 μ ‘κ·Όν•΄μ•Ό ν•œλ‹€.

 

• instanceof μ—°μ‚°μž

ν•΄λ‹Ή μΈμŠ€ν„΄μŠ€κ°€ μ–΄λ–€ 클래슀의 μΈμŠ€ν„΄μŠ€μΈμ§€λ₯Ό ν™•μΈν•˜λŠ” μ—°μ‚°μžλ‘œ μƒμœ„ 클래슀둜 instanceofλ₯Ό 해도 확인이 κ°€λŠ₯ν•˜λ‹€.

 

• μ˜€λ²„λΌμ΄λ”© (Overriding)

λΆ€λͺ¨ 클래슀의 λ©”μ†Œλ“œλ₯Ό μžμ‹ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 기법이닀.
μ˜€λ²„λΌμ΄λ”©μ€ λ©”μ†Œλ“œλ§Œ κ°€λŠ₯ν•˜λ©° λ³€μˆ˜λŠ” λΆˆκ°€λŠ₯ν•˜λ‹€.
λ¦¬ν„΄ν˜•, ν•¨μˆ˜λͺ…, νŒŒλΌλ―Έν„°κ°€ μ™„μ „νžˆ κ°™κ²Œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•œλ‹€.


LSP (Liskov Substitution Principle)

μžλ£Œν˜• Sκ°€ μžλ£Œν˜• T의 ν•˜μœ„ν˜•μ΄λΌλ©΄ ν•„μš”ν•œ ν”„λ‘œκ·Έλž¨μ˜ μ†μ„±μ˜ 변경없이 μžλ£Œν˜• T의 객체λ₯Ό μžλ£Œν˜• S의 객체둜 ꡐ체할 수 μžˆμ–΄μ•Ό ν•œλ‹€λŠ” 원칙이닀.
즉, LSPλŠ” λΆ€λͺ¨ν΄λž˜μŠ€μ˜ 섀계원칙을 μžμ‹λ„ λ”°λΌμ•Όν•˜λ©° 그것은 μ˜€λ²„λΌμ΄λ”©μ„ ν•˜λ”λΌλ„ μ€€μˆ˜λ˜μ–΄μ•Ό 함을 μ˜λ―Έν•œλ‹€.

 


μΈν„°νŽ˜μ΄μŠ€

- 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ κ·œμ•½μ„ μ§€μ›ν•˜κΈ° μœ„ν•œ λ°μ΄ν„°νƒ€μž…μ΄λ‹€.

- 클래슀 μ‚¬μš©μžμ—κ²Œ 클래슀의 κΈ°λŠ₯ λͺ…μ„Έλ₯Ό μ œκ³΅ν•œλ‹€.
- κΈ°λŠ₯λͺ…μ„Έμ˜ μ œκ³΅μ€ μ‚¬μš©μžμ—κ²Œ 클래슀λ₯Ό νŽΈν•˜κ²Œ μ‚¬μš©ν•˜λ„λ‘ ν•œλ‹€.
- κΈ°λŠ₯λͺ…μ„Έμ˜ μ œκ³΅μ€ κ·Έ κΈ°λŠ₯이 λ°˜λ“œμ‹œ κ΅¬ν˜„λ˜μ–΄μ•Ό ν•˜λŠ” 약속(κ·œμ•½)을 μ „μ œν•œλ‹€.
- κΈ°μ‘΄ μƒμ†μ˜ κ°œλ…μ—μ„œ κ°•μ œμ„±μ΄ μΆ”κ°€ 된 것이닀. (μž‘μ„±ν•˜μ§€ μ•Šμ„ 경우 컴파일 λ‹¨κ³„μ—μ„œλΆ€ν„° μ—λŸ¬λ₯Ό λ°œμƒν•œλ‹€)

 

νŠΉμ§•

- μΈν„°νŽ˜μ΄μŠ€λ‚΄μ— λ©”μ†Œλ“œμ˜ κ΅¬ν˜„λΆ€λ₯Ό μž‘μ„±ν–ˆμ„ 경우 λ°˜λ“œμ‹œ μž‘μ„±ν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ— public으둜 μ„€μ •λ˜μ–΄μ•Όλ§Œ ν•œλ‹€.
(μƒλž΅ν–ˆμ„ κ²½μš°μ—λ„ public으둜 μ„€μ •λ˜μ–΄μžˆλ‹€.)

 

- μΈν„°νŽ˜μ΄μŠ€ λ‚΄μ—μ„œ λ³€μˆ˜μ„ μ–Έμ€ λΆˆκ°€ν•˜μ§€λ§Œ static을 μ‚¬μš©ν•  경우 μ „μ—­μ˜μ—­μ— μ˜¬λΌκ°€κΈ° λ•Œλ¬Έμ— μ‚¬μš©κ°€λŠ₯ν•˜λ‹€.
- λ˜ν•œ static으둜 μ„ μ–Έν•œ λ©”μ†Œλ“œλ„ κ΅¬ν˜„κ°€λŠ₯ν•˜λ‹€.

 

μΈν„°νŽ˜μ΄μŠ€ 상속

예λ₯Ό λ“€μ–΄ κΈ°μ‘΄ ν”„λ¦°νŠΈμ—μ„œ μ»¬λŸ¬ν”„λ¦°νŠΈ κΈ°λŠ₯을 μΆ”κ°€ν•˜κΈ°μœ„ν•΄ κΈ°μ‘΄ μΈν„°νŽ˜μ΄μŠ€μ— μ»¬λŸ¬ν”„λ¦°νŠΈλ₯Ό μΆ”κ°€ν•˜κ²Œλ˜λ©΄ μ΄μ „λ²„μ „μ˜ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜κ³ μžˆλŠ” ν΄λž˜μŠ€λ“€μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν•˜κ²Œλœλ‹€.
κ·Έλ ‡κΈ° λ•Œλ¬Έμ— μ»¬λŸ¬ν”„λ¦°νŠΈμ—μ„œ μΆ”κ°€λœ κΈ°λŠ₯을 λ”°λ‘œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό λ§Œλ“ λ‹€μŒμ— κ·Έ μΈν„°νŽ˜μ΄μŠ€μ— μƒμ†μœΌλ‘œ μ—°κ²°ν•΄ κ΅¬ν˜„μ΄ κ°€λŠ₯ν•˜λ‹€.
즉, μš”κ΅¬μ‘°κ±΄μ˜ λ³€ν™” λ°œμƒμ„ μΈν„°νŽ˜μ΄μŠ€μ˜ μƒμ†μœΌλ‘œ ν•΄κ²°ν•  수 μžˆλ‹€.

 

닀쀑 μΈν„°νŽ˜μ΄μŠ€

μΈν„°νŽ˜μ΄μŠ€λŠ” ν•˜λ‚˜μ˜ ν΄λž˜μŠ€μ— ν•˜λ‚˜λ§Œ μ“Έμˆ˜ μžˆλŠ”κ²ƒμ΄ μ•„λ‹ˆλΌ μ—¬λŸ¬κ°œ μ‚¬μš©ν•  수 μžˆλ‹€.

 

μΈν„°νŽ˜μ΄μŠ€μ˜ instanceof μ—°μ‚°

instanceof연산을 μ‚¬μš©ν•΄ ν•΄λ‹Ή ν΄λž˜μŠ€κ°€ μ–΄λ–€ μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜μ˜€λŠ”μ§€ ꡬ별할 수 μžˆλ‹€.
(booleanν˜•νƒœμ˜ 값을 λ‚΄λ³΄λ‚΄κ²Œ λœλ‹€)

마컀 μΈν„°νŽ˜μ΄μŠ€

마컀 μΈν„°νŽ˜μ΄μŠ€λŠ” λΉ„μ–΄μžˆλŠ” μΈν„°νŽ˜μ΄μŠ€λ‘œ 의미λ₯Ό μ „λ‹¬ν•΄μ£ΌκΈ°μœ„ν•΄ λ§Œλ“€μ–΄μ§„ κ²ƒμœΌλ‘œ 주석과 λΉ„μŠ·ν•œ κ°œλ…μ„ 가진닀.


λ°˜μ‘ν˜•

λŒ“κΈ€