μΆμ²
ChatGPT
λμ λ°μΈλ©(Dynamic Binding)μ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμ λ©μλ νΈμΆ μμ μ μ€μ λ©μλμ ꡬνμ κ²°μ νλ κΈ°μ μ΄λ€. λμ λ°μΈλ©μ λ°νμ λ€νμ±μ μ§μνλ©°, μ€ν μ€ μ°Έμ‘° λ³μκ° κ°λ¦¬ν€λ κ°μ²΄μ μ€μ νμ μ λ°λΌ νΈμΆν λ©μλκ° κ²°μ λλ€. μ΄λ₯Ό ν΅ν΄ λμΌν λ©μλ νΈμΆμ΄ κ°μ²΄μ νμ μ λ°λΌ λ€λ₯΄κ² λμν μ μλ€.
λμ λ°μΈλ©μ λμ λ°©μ
1. μ»΄νμΌ νμκ³Ό λ°νμμ μ°¨μ΄
μ»΄νμΌ νμ λ°μΈλ©
λ©μλ νΈμΆμ΄ μ»΄νμΌ μμ μ κ²°μ λλ€. μ΄λ μ£Όλ‘ λ©μλ μ€λ²λ‘λ©μμ λ°μνλ€. λ©μλ μ€λ²λ‘λ©μ 맀κ°λ³μμ νμ μ΄λ κ°μμ λ°λΌ νΈμΆλλ λ©μλ£κ° κ²°μ λλ κ²μΌλ‘, λ°νμ λ€νμ±κ³Όλ κ΄λ ¨μ΄ μλ€.
λ°νμ λ°μΈλ©
λ©μλ νΈμΆμ΄ μ€ν μμ μ κ²°μ λλ€. μ΄λ μ£Όλ‘ λ©μλ μ€λ²λΌμ΄λ©μμ λ°μνλ©°, κ°μ²΄μ μ€μ νμ μ λ°λΌ νΈμΆλ λ©μλκ° κ²°μ λλ€.
2. λ©μλ μ€λ²λΌμ΄λ©
- μμ ν΄λμ€μμ μ μλ λ©μλλ₯Ό νμ ν΄λμ€μμ μ¬μ μ(μ€λ²λΌμ΄λ©)ν¨μΌλ‘μ¨ λμ λ°μΈλ©μ΄ μ΄λ£¨μ΄μ§λ€.
- μμ ν΄λμ€μ μ°Έμ‘° λ³μκ° νμ ν΄λμ€μ κ°μ²΄λ₯Ό μ°Έμ‘°ν λ, λ©μλ νΈμΆ μ μ€μ κ°μ²΄μ νμ μ λ°λΌ μ€λ²λΌμ΄λλ λ©μλκ° μ€νλλ€.
3. λ©λͺ¨λ¦¬ ꡬ쑰
λ©μλ ν μ΄λΈ Method Table
JVMμ κ° ν΄λμ€μ λν΄ λ©μλ ν μ΄λΈμ μ μ§νλ€. μ΄ ν μ΄λΈμ λ©μλ μ΄λ¦κ³Ό κ·Έ λ©μλμ μ€μ ꡬν μ£Όμλ₯Ό 맀ννλ€.
λμ€ν¨μΉ ν μ΄λΈ Dispatch Table
κ°μ²΄μ μ€μ νμ μ λ°λΌ λ©μλ ν μ΄λΈμμ ν΄λΉ λ©μλμ ꡬνμ μ°Ύλ κ³Όμ μ΄λ€. λ°νμμ κ°μ²΄μ μ€μ νμ μ λ°λΌ μ μ ν λ©μλκ° μ νλλ€.
λμ λ°°μΈλ©μ μμ μ½λ
class Animal {
void makeSound() {
System.out.println("Some generic animal sound");
}
}
class Dog extends Animal {
@Override
void makeSound() {
System.out.println("Bark");
}
}
class Cat extends Animal {
@Override
void makeSound() {
System.out.println("Meow");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Dog(); // Animal νμ
μ μ°Έμ‘° λ³μκ° Dog κ°μ²΄λ₯Ό μ°Έμ‘°
myAnimal.makeSound(); // λ°νμ μμ Dog ν΄λμ€μ makeSound() νΈμΆλ¨
myAnimal = new Cat(); // Animal νμ
μ μ°Έμ‘° λ³μκ° Cat κ°μ²΄λ₯Ό μ°Έμ‘°
myAnimal.makeSound(); // λ°νμ μμ Cat ν΄λμ€μ makeSound() νΈμΆλ¨
}
}
μ₯μ
1. μ μ°μ±
μμ ν΄λμ€ νμ μ μ°Έμ‘° λ³μλ‘ νμ ν΄λμ€ κ°μ²΄λ₯Ό λ€λ£° μ μμΌλ©°, μ½λμ μ μ°μ±κ³Ό νμ₯μ±μ΄ ν₯μλλ€.
2. μ½λ μ¬μμ©μ±
λμΌν μμ ν΄λμ€ νμ μ μ°Έμ‘° λ³μλ₯Ό μ¬μ©ν΄ λ€μν νμ ν΄λμ€ κ°μ²΄λ₯Ό μ²λ¦¬ν μ μμΌλ―λ‘ μ½λμ μ¬μ¬μ©μ±μ΄ λμμ§λ€.
3. λͺ¨λν
ꡬν μΈλΆ μ¬νμ μ¨κΈ°κ³ , μμ ν΄λμ€μ μΈν°νμ΄μ€λ₯Ό ν΅ν΄ μν ν΄λμ€μ ꡬ체μ μΈ κ΅¬νμ μμ‘΄νμ§ μλ μ½λ μμ±μ΄ κ°λ₯νλ€.
λ¨μ
1. μ±λ₯ λ¬Έμ
λμ λ°μΈλ©μ λ°νμμ λ©μλλ₯Ό κ²°μ νκΈ° λλ¬Έμ, μ μ λ°μΈλ©μ λΉν΄ μ±λ₯μ΄ λ¨μ΄μ§ μ μλ€.
2. λλ²κΉ μ μ΄λ €μ
μ€ν μμ μ λ©μλκ° κ²°μ λλ―λ‘, λλ²κΉ μ μ΄λ€ λ©μλκ° νΈμΆλ μ§ μμΈ‘νκΈ° μ΄λ ΅λ€.
λμ λ°μΈλ©κ³Ό κ΄λ ¨λ μ©μ΄
λ€νμ± Polymorphism
λ°νμ λ€νμ± λλ λμ λ°μΈλ©μ ν΅ν΄ κ°μΌ λ©μλ νΈμΆμ΄ λ€μν ννλ‘ μ€νλ μ μλ κ°λ μ΄λ€.
λ©μλ ν μ΄λΈ Method Table
JVMμμ κ° ν΄λμ€μ λ©μλμ ꡬν μ£Όμλ₯Ό 맀νν ν μ΄λΈμ΄λ€.
κ°μ λ©μλ ν μ΄λΈ Virtual Method Table
κ°μ²΄μ μ€μ νμ μ λ°λΌ νΈμΆν λ©μλλ₯Ό κ²°μ νλ λ° μ¬μ©λλ ν μ΄λΈμ΄λ€.
κ²°λ‘
λμ λ°μΈλ©μ λ°νμ μμ μ λ©μλ νΈμΆμ κ²°μ νλ λ©μ»€λμ¦μΌλ‘, κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμ λ°νμ λ€νμ±μ μ§μνλ μ€μν κΈ°λ₯μ΄λ€. μ΄λ₯Ό ν΅ν΄ λμΌν λ©μλ νΈμΆμ΄ κ°μ²΄μ νμ μ λ°λΌ λ€λ₯΄κ² λμν μ μμΌλ©°, μ½λμ μ μ°μ±κ³Ό μ¬μ¬μ©μ±μ λμΌ μ μλ€. νμ§λ§ μ±λ₯ μ νμ λλ²κΉ μ μ΄λ €μμ΄ μμ μ μμΌλ―λ‘, μ΄λ₯Ό κ³ λ €ν μ€κ³κ° νμνλ€.
'λΉ κ΅¬λ© μ±μ°κΈ°' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μ μΊμ€ν , λ€μ΄μΊμ€ν (0) | 2024.09.04 |
---|---|
[OOP] λ°νμ λ€νμ± (0) | 2024.09.04 |
[Java] HashSet ꡬν (0) | 2024.09.04 |
[Java] μ HashSet λ΄λΆμμ μ¬μ©λλ HashMapμ transient μμ½μ΄λ₯Ό μ¨μ μ μΈλμκΉ (4) | 2024.09.04 |
[Java] transient μμ½μ΄ (0) | 2024.09.04 |