π»
Java νλ‘κ·Έλλ° - μμ(inheritance) / λ©μλ μ¬μ μ(μ€λ²λΌμ΄λ© Overriding) λ³Έλ¬Έ
Java νλ‘κ·Έλλ° - μμ(inheritance) / λ©μλ μ¬μ μ(μ€λ²λΌμ΄λ© Overriding)
λν¨λ 2020. 5. 7. 10:05ν΄λμ€μ νΉμ§ 3κ°μ§
β μλν -> public λ³΄λ€ privateλ₯Ό μ¬μ©νλ€.
β‘ μ€λ³΅μ± -> μ€λ³΅ (ν¨μμ€λ³΅/μμ±μμ€λ³΅)
β’ μμμ± -> λΆλͺ¨ν΄λμ€μ λ©€λ²λ₯Ό μμμκ² λ¬Όλ €μ€λ€.
μλ°μμ λ§λ€μ΄μ§ λͺ¨λ ν΄λμ€λ Object ν΄λμ€λ₯Ό μμλ°λλ€.
μλ°λ λ€μ€ μμμ νμ©νμ§ μλλ€. μ¦, μ¬λ¬ κ°μ λΆλͺ¨ν΄λμ€λ₯Ό μμν μ μμΌλ―λ‘ extends λ€μλ νλμ λΆλͺ¨ν΄λμ€λ§ μμΌνλ€.
μμ
: μμμ΄λ? κΈ°μ‘΄μ ν΄λμ€λ₯Ό μ¬μ¬μ©νμ¬ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±νλ κ²μ΄λ€. μμμ ν΅ν΄μ ν΄λμ€λ₯Ό μμ±νλ©΄ μ μ μμ μ½λλ‘ μλ‘μ΄ ν΄λμ€λ₯Ό μμ±ν μ μκ³ μ½λλ₯Ό 곡ν΅μ μΌλ‘ κ΄λ¦¬ν μ μκΈ° λλ¬Έμ μ½λμ μΆκ° λ° λ³κ²½μ΄ μ©μ΄νλ€. μ΄λ¬ν νΉμ§μ μ½λμ μ¬μ¬μ©μ±μ λμ΄κ³ μ½λμ μ€λ³΅μ μ κ±°νμ¬ νλ‘κ·Έλ¨μ μμ°μ±κ³Ό μ μ§λ³΄μμ κΈ°μ¬νλ€.
- λ³μ, ν¨μ, μμ±μλ₯Ό κ°μ§κ³ μλ€.
- λ€λ₯Έ κ°μ²΄μ§ν₯μΈμ΄μΈ C++μμλ λ€μ€μμμ΄ κ°λ₯νμ§λ§ μλ°μμλ λ¨μΌ μμλ§μ νμ©νλ€.
- μμμ μ₯λ¨μ
μ₯μ : ν¨μ¨μ μ΄κ³ κ°λ°μκ°μ μ€μΈλ€.
μ μ§λ³΄μ μκ°μ μ€μΌ μ μλ€.(λΆλͺ¨ ν΄λμ€μ μμ μΌλ‘ λͺ¨λ μμ ν΄λμ€λ€μ μμ ν¨κ³Ό)
λ¨μ : μμκ΅¬μ‘°κ° λ³΅μ‘ν΄μ§λ©΄ μ΄ν΄νκΈ° νλ€κ³ νλ‘κ·Έλ¨μ΄ 무거μμ§λ€.
- ν΄λμ€ μμ
μμ 1)
λΆλͺ¨ν΄λμ€μ privateλ‘ μ μΈλ νλμ λ©μλλ μμ λμμμ μ μΈλλ€.
- μΈλΆμμ μ κ·Όμ΄ λΆκ°λ₯ νλ©΄μ μμν΄μ€ μ μλ μ κ·Όμ μ΄μ => protected
λΆλͺ¨λ‘λΆν° μμλ°μ μμ±λ€μ λ΄ κ²μ²λΌ(this) μΈ μ μλ€.
μμλ°μ κ²μ νν΄μ super λ₯Ό μ¬μ©ν΄μ λΆλͺ¨νλμ λΆλͺ¨ν¨μλ₯Ό μ¬μ©ν μ μλ€.
super λ μμ ν΄λμ€μμ μ‘°μ ν΄λμ€λ‘λΆν° μμλ°μ λ©€λ²λ₯Ό μ°Έμ‘°νλλ° μ¬μ©λλ μ°Έμ‘°λ³μμ΄λ€. λ©€λ²λ³μμ μ§μλ³μμ μ΄λ¦μ΄ κ°μ λ thisλ₯Ό λΆμ¬μ ꡬλ³νλ―μ΄ μμλ°μ λ©€λ²μ μμ μ ν΄λμ€μ μ μλ λ©€λ²μ μ΄λ¦μ΄ κ°μ λλ superλ₯Ό λΆμ¬μ ꡬλ³ν μ μλ€.
μ‘°μ ν΄λμ€λ‘λΆν° μμλ°μ λ©€λ²λ μμ ν΄λμ€ μμ μ λ©€λ²μ΄λ―λ‘ thisλ₯Ό μ¬μ©ν μ μμ§λ§, ꡬλ³νκΈ° μν΄μ superλ₯Ό μ¬μ©νλ κ²μ΄ μ’λ€.
μμ 2)
<ν΄λμ€ λ€μ΄μ΄κ·Έλ¨>
κ΄κ³(Relationship)
1. μ μ
- ꡬμ±μμλ€κ°μ μλ―Έ μλ μ°κ΄μ±μ νν
- μΌλ°μ μΌλ‘ ν΄λμ€λ€κ°μ κ΄κ³ νν μ μ¬μ©λλ€.
2. μ’ λ₯
- μΌλ°νκ΄κ³(Generalization Relationship)
- μ€μ²΄ν, μ€νν κ΄κ³(Realization Relationship)
- μμ‘΄κ΄κ³(Dependency Relationship)
- μ°κ΄κ΄κ³(Association Relationship)
- μ§ν©μ°κ΄(Aggregation Relationship)
- 볡ν©μ°κ΄(Composition Relationship)
μμ 3)
- λΆλͺ¨μμ±μ νΈμΆ
μμ 4)
DSonμ΄λΌλ ν΄λμ€μ κ°μ²΄λ‘ aλ₯Ό μμ±ν΄μ μμ±μλ₯Ό μ°Ύμκ°λ€.
μκΈ°κ±° μ°Ύμμ default μμ±μ μμ΄. λΆλͺ¨κΊΌ μ¬λΌκ°μ μμΌλ©΄ defaultμμ±μ
μ¦, μμν΄λμ€μμ μκΈ° μμ μ μμ±μκ° μμΌλ©΄ λΆλͺ¨μμ±μλ₯Ό μ°Ύμκ°λ€. (λ§μ½ μκΈ° μμ μ μμ±μκ° μ‘΄μ¬νλ©΄ μμν΄λμ€ μμ±μκ° μ°μ )
μμμ μμ±μλ super λΌλ ν€μλλ‘ μ κ·Όνλ€.
super() : defaultμμ±μ
super()λ λΆλͺ¨μ κΈ°λ³Έ μμ±μλ₯Ό νΈμΆνλ€.
super(10): intλ₯Ό νμ μΌλ‘ νλΌλ―Έν° νκ°λ₯Ό κ°μ§κ³ μλ μμ±μ.
μμ 5)
μμ 6)
// ν΄λμ€, μΆμν΄λμ€, μΈν°νμ΄μ€ ν¨μ μ¬μ μκ° κ°λ₯νλ€.
// μΈν°νμ΄μ€λ λ°λμ μ¬μ μν΄μΌνλ€.
μ€λ²λΌμ΄λ©
:μ€λ²λΌμ΄λ©μ΄λ? μ‘°μ ν΄λμ€λ‘λΆν° μμλ°μ λ©μλμ λ΄μ©μ λ³κ²½νλ κ²μ μ€λ²λΌμ΄λ©μ΄λΌκ³ νλ€. μμλ°μ λ©μλλ₯Ό κ·Έλλ‘ μ¬μ©νκΈ°λ νμ§λ§, μμ ν΄λμ€ μμ μ λ§κ² λ³κ²½ν΄μΌνλ κ²½μ°κ° λ§λ€. μ΄λ΄ λ μ‘°μμ λ©μλλ₯Ό μ€λ²λΌμ΄λ©νλ€.
쑰건 μμ ν΄λμ€μμ μ€λ²λΌμ΄λ©νλ λ©μλλ μ‘°μ ν΄λμ€μ λ©μλμ 1) μ΄λ¦μ΄ κ°μμΌνλ€. 2) 맀κ°λ³μκ° κ°μμΌνλ€. 3) λ°ννμ μ΄ κ°μμΌνλ€.
- ν¨μ(λ©μλ) μ¬μ μ(Overriding)
λΆλͺ¨ν΄λμ€μ λͺ¨λ λ©μλκ° μμ ν΄λμ€μκ² λ§κ² μ€κ³λμλ€λ©΄ κ°μ₯ μ΄μμ μΈ μμμ΄μ§λ§, μ΄λ€ λ©μλλ μμ ν΄λμ€κ° μ¬μ©νκΈ°μ μ ν©νμ§ μμ μλ μλ€. μ΄ κ²½μ° μμλ μΌλΆ λ©μλλ μμν΄λμ€μμ λ€μ μμ ν΄μ μ¬μ©ν μ μλ€.
λ©μλ μ€λ²λΌμ΄λ©μ μμλ λ©μλμ λ΄μ©μ΄ μμ ν΄λμ€μ λ§μ§ μμ κ²½μ°, μμ ν΄λμ€μμ λμΌν λ©μλλ₯Ό μ¬μ μνλ κ²μ λ§νλ€.
μμ 1)
λ©μλκ° μ€λ²λΌμ΄λ©λμλ€λ©΄ λΆλͺ¨ κ°μ²΄μ λ©μλλ μ¨κ²¨μ§κΈ° λλ¬Έμ, μμ κ°μ²΄μμ λ©μλλ₯Ό νΈμΆνλ©΄ μ€λ²λΌμ΄λ©λ μμ λ©μλκ° νΈμΆλλ€.
μμ 2)
λ€νμ±
:λ€νμ±μ΄λ? μμκ³Ό ν¨κ» κ°μ²΄μ§ν₯κ°λ μ μ€μν νΉμ§ μ€μ νλμ΄λ€. κ°μ²΄μ§ν₯κ°λ μμ 'λ€νμ±' μ΄λ μ¬λ¬κ°μ§ ννλ₯Ό κ°μ§ μ μλ λ₯λ ₯μ μλ―Ένλ©°, μλ°μμλ ν νμ μ μ°Έμ‘°λ³μλ‘ μ¬λ¬ νμ μ κ°μ²΄λ₯Ό μ°Έμ‘°ν μ μλλ‘ νλ κ²μ΄λ€. ꡬ체μ μΌλ‘ λ§νμλ©΄, λΆλͺ¨ν΄λμ€μ νμ μ μ°Έμ‘°λ³μλ‘ μμν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλλ‘ νμλ€λ κ²μ΄λ€.
μλμ μμμμ HParents r = new HSon(1, 2); -> λΆλͺ¨ νμ μ μ°Έμ‘°λ³μλ‘ μμ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°
- μ°Έμ‘°λ³μμ νλ³ν
λΆλͺ¨ν΄λμ€μμ μμν΄λμ€λ‘ μ μΊμ€ν ν μ μλ€. κ·Έλ¬λ μμμ λΆλͺ¨ν΄λμ€λ₯Ό λ΄μ μ μλ€.
κ·Έλ κ² μμ±ν κ°μ²΄λ‘ ν¨μμ¬μ μ ν μμν¨μλ₯Ό μ¬μ©ν μ μλ€. κ·Έλ¬λ μμν΄λμ€μμ μμ±ν ν¨μλ μ¬μ©ν μ μλ€.
upCasting ν μμν΄λμ€λ§ λ€μ downCasting ν μ μλ€.
[μ 리]
- λΆλͺ¨ν΄λμ€λ μμν΄λμ€λ₯Ό λ΄μμ€ μ μλ€. μ€λ²λΌμ΄λ©λ ν¨μλ₯Ό κ°μ Έλ€κ° μΈ μ μλ€.
- μ μΊμ€ν λ μμν΄λμ€λ λ€μ΄μΊμ€ν ν μ μλ€.
μμνμ -> μ‘°μνμ (Upcasting) : νλ³ν μλ΅κ°λ₯
μμνμ <- μ‘°μνμ (DownCasting) : νλ³ν μλ΅λΆκ°
μμ 3)
μμ 4)
λ°°μ΄μ μ΄μ©ν΄μ μ¬μ©ν μ μλ€.
final μ ν¨μ μ¬μ μκ° μλλ€.
μ¬μ μλ§κ³ λΆλͺ¨ν¨μμ final λ©μλλ₯Ό κ°μ Έλ€ μ°λ κ²μ κ°λ₯νλ€.
[μ°Έκ³ ] μ€λ²λ‘λ© vs μ€λ²λΌμ΄λ©
μ€λ²λ‘λ©(Overloading): κΈ°μ‘΄μ μλ μλ‘μ΄ λ©μλλ₯Ό μ μνλ κ²
μ€λ²λΌμ΄λ©(Overriding): μμλ°μ λ©μλμ λ΄μ©μ λ³κ²½νλ κ²