π Today I Learned - μ€λ λ΄κ° 곡λΆν κ²μ μ 리ν©λλ€.
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μ λνμ μΈ νΉμ§
νλ‘κ·Έλλ°μμ λ€νμ±μ ν κ°μ²΄κ° μ¬λ¬ νμ
μ κ°μ²΄λ‘ μ·¨κΈλ μ μλ λ₯λ ₯μ λ»νλ€.
= νλμ κ°μ²΄κ° λ€λ₯Έ νμ
μΌλ‘ μ¬μ©λ μ μλ€λ λ»
μλ°μμ λΆλͺ¨ νμ μ μμ μ λ¬Όλ‘ μ΄κ³ , μμ μ κΈ°μ€μΌλ‘ λͺ¨λ μμ νμ μ μ°Έμ‘°ν μ μλ€. μ΄κ²μ΄ λ°λ‘ λ€μν ννλ₯Ό μ°Έμ‘°ν μ μλ€κ³ ν΄μ λ€νμ μ°Έμ‘°λΌ νλ€.
package poly.basic;
public class PolyMain {
public static void main(String[] args) {
// λΆλͺ¨ λ³μκ° μμ μΈμ€ν΄μ€ μ°Έμ‘°(λ€νμ μ°Έμ‘°)
System.out.println("Parent -> Child");
Parent poly = new Child();
poly.parentMethod();
// poly.childMethod(); // μμμ κΈ°λ₯μ νΈμΆν μ μλ€. μ»΄νμΌ μ€λ₯ λ°μ
// Child child1 = new Parent(); // μμμ λΆλͺ¨λ₯Ό λ΄μ μ μλ€.
}
}

μμ κ°μ²΄μ λ©μλλ₯Ό νΈμΆνκ³ μΆμΌλ©΄ μ΄λ»κ² ν΄μΌν κΉ? = μΊμ€ν (Casting)

λΆλͺ¨λ μμμ λ΄μ μ μμ§λ§ μμμ λΆλͺ¨λ₯Ό λ΄μ μ μλ€.
λΆλͺ¨ νμ μ μ¬μ©νλ λ³μλ₯Ό μμ νμ μ λμ νλ €κ³ νλ©΄ μ»΄νμΌ μ€λ₯ λ°μ
μ΄λ, λ€μ΄μΊμ€ν μ΄λΌλ κΈ°λ₯μ μ¬μ©ν΄μ λΆλͺ¨ νμ μ μ κΉ μμ νμ μΌλ‘ λ³κ²½νλ©΄ λλ€.
package poly.basic;
// λ€μ΄μΊμ€ν
μ μλμΌλ‘ νμ§ μλ μ΄μ
public class CastingMain4 {
public static void main(String[] args) {
Parent parent1 = new Child();
Child child1 = (Child) parent1;
child1.childMethod(); // λ¬Έμ μμ
Parent parent2 = new Parent();
Child child2 = (Child) parent2; // λ°νμ μ€λ₯ - ClassCastException
child2.childMethod(); // μ€ν λΆκ°
}
}
parent2 λ Parentλ‘ μμ±μ΄ λμλ€. λ°λΌμ λ©λͺ¨λ¦¬ μμ Child μμ²΄κ° μ‘΄μ¬νμ§ μλλ€.
μλ°μμλ μ΄λ κ² μ¬μ©ν μ μλ νμ μΌλ‘ λ€μ΄μΊμ€ν νλ κ²½μ°μ ClassCastException μ΄λΌλ μμΈλ₯Ό λ°μμν¨λ€. μμΈκ° λ°μνλ©΄ λ€μ λμμ΄ μ€νλμ§ μκ³ , νλ‘κ·Έλ¨μ΄ μ’ λ£λλ€.
λ€μ΄μΊμ€ν μ μννκΈ° μ λ¨Όμ instanceof λ₯Ό μ¬μ©ν΄μ μνλ νμ μΌλ‘ λ³κ²½μ΄ κ°λ₯νμ§ νμΈ
parent instanceof Child // parentλ Parentμ μΈμ€ν΄μ€
new Parent() instanceof Child // false
μ°Έκ³ λ‘ instanceof ν€μλλ μ€λ₯Έμͺ½ λμμ μμ νμ μ μΌμͺ½μμ μ°Έμ‘°νλ κ²½μ°μλ true λ°ν
parent instanceof Parent
new Parent() instanceof Parent // parent κ° Parentμ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ κ²½μ°: true
new Child() instanceof Parent // parent κ° Childμ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°νλ κ²½μ°: true

β¨Β μ€λ²λΌμ΄λ© λ λ©μλλ νμ μ°μ κΆμ κ°μ§λ€.
μ€λ²λΌμ΄λ©μ λΆλͺ¨ νμ μμ μ μν κΈ°λ₯μ μμ νμ μμ μ¬μ μνλ κ²μ΄λ€. λ§μ½ μμμμλ μ€λ²λΌμ΄λ©νκ³ μμμμλ κ°μ λ©μλλ₯Ό μ€λ²λΌμ΄λ©νλ©΄ μμμ μ€λ²λΌμ΄λ© λ©μλκ° μ°μ κΆμ κ°μ§λ€. λ νμ μμμ μ€λ²λΌμ΄λ© λ λ©μλκ° μ°μ κΆμ κ°μ§λ κ²μ΄λ€.
package poly.overriding;
public class OverridingMain {
public static void main(String[] args) {
// λΆλͺ¨ λ³μκ° μμ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°(λ€νμ μ°Έμ‘°)
Parent poly = new Child();
System.out.println("Parent -> Child");
System.out.println("value = " + poly.value); // λ³μλ μ€λ²λΌμ΄λ©X
poly.method(); // λ©μλ μ€λ²λΌμ΄λ©!
}
}
π 5μ£Όμ°¨λ₯Ό μμνλ©΄μ λ³ΈμΊ νμ λ€μ΄κ° μ€λΉλ₯Ό νκ³ μλ€. μ‘°μλ€κ³Ό λλ΄λ μ€λͺ°ν ν¬μ²λΌ μ¬μ μμ λ κ°μΈμ μΌλ‘ λΆμ‘±ν μ μ μ΅λν μ±μ°κ³ κ° μ μκΈΈ λ°λλ€.