β 1. λ€νμ±
(1) λ€νμ±μ΄λ?
- λ€νμ±(ploymorphism)μ νμ ν΄λμ€ κ°μ²΄λ₯Ό μμ±νκ³ μμ ν΄λμ€ νμ μΌλ‘ λ°λ κ²μ μλ―Ένλ€.
- μ½κ²λ§ν΄, κ°μ²΄λ₯Ό μμ±ν λ ν΄λΉ κ°μ²΄μ νμ μΌλ‘ λ°λ κ²μ΄ μΌλ°μ μ΄λ€.
- νμ§λ§, μλ°μμ μ 곡νλ λ€νμ±μ νμ©ν΄ ν΄λΉ κ°μ²΄ νμ μ΄ μλ, μμν΄λμ€ νμ μΌλ‘ λ°μμ μ μ°νκ² μ΄μ© ν μ μλ€.
- μΌλ°μ μΈ λ°©μ: Dog dog = new Dog();
- λ€νμ± μ μ© λ°©μ: Animal dog = new Dog(); - μμ ν΄λμ€λ‘ μ°Έμ‘° νμ μ λ°μ μ μμ.
(2) λ€νμ± μ°λ μ΄μ
public class Animal {
public void sound() {
System.out.println("λλ¬Όμ리");
}
}
public class Cat extends Animal {
@Override
public void sound() {
System.out.println("κ³ μμ΄ μ리");
}
}
public class Dog extends Animal {
@Override
public void sound() {
System.out.println("κ°μμ§ μ리");
}
}
public class Main {
public static void main(String[] args) {
Animal cat = new Cat();
Animal dog = new Dog();
dog.sound(); // "κ°μμ§ μ리" μΆλ ₯
cat.sound(); // "κ³ μμ΄ μ리" μΆλ ₯
}
}
- μμν΄λμ€ μ°Έμ‘°λ³μκ° κ°λ¦¬ν€λ κ°μ²΄μ μ€μ μ νμ λ°λΌ μνλλ λ©μλκ° κ²°μ μ΄ λλ©°, μ΄κ²μ λμ λ°μΈλ©μ΄λΌνλ€.
- μ μ°ν¨: Animal μμ ν΄λμ€λ₯Ό μμ λ°λ Dog, Catμ Main ν΄λμ€μμ Animal νμ νλλ‘ ν΅μΌλκ² λ°μ μ μλ€.
- μ μ§λ³΄μ: μμ ν΄λμ€ νμ μΌλ‘ λ°μ μ μμ΄, μ¬λ¬ νμ ν΄λμ€λ₯Ό λ¬Άμ΄μ μ΄μ©ν μλ μλ€.
β 2. λ€νμ±μ νκ³
// Animal: μμν΄λμ€
public class Animal {
}
// Cat: νμν΄λμ€
public class Cat extends Animal {
public void run() {
System.out.println("κ³ μμ΄ κ±Έμ");
}
}
// Main
public class Main {
public static void main(String[] args) {
Animal cat = new Cat();
cat.run(); β μ»΄νμΌ μλ¬ (Animalμ runμ΄ μμΌλκΉ)
}
}
- Animalμ μμλ°λ Catμ new Cat()μΌλ‘ κ°μ²΄μμ±μ νκ² λλ©΄ Animalμ λͺ¨λ νλμ λ©μλλ₯Ό μ΄μ©ν μ μκ² λλ€.
- μ¦, Catμ Animalμ ν¬ν¨νκ³ μμΌλ―λ‘, Animal νμ μΌλ‘ Cat κ°μ²΄λ₯Ό λ°μ μ μλ€λ μλ―Έμ΄λ€. ( λ€νμ± )
- νμ§λ§, λ¬Έμ λ μ½λμμ 보면 cat.run() λν Cat κ°μ²΄λ‘ λ§λ€μκΈ° λλ¬Έμ μ¬μ©μ΄ κ°λ₯ν΄μΌ νλλ° μλλ€.
- μ΄μ λ, μ½λ λ¬Έλ§₯μμμ λ¬Έμ κ° λ°μν μ μλ€κ³ νλ¨μ΄ λκΈ° λλ¬Έμ μ»΄νμΌ κ³Όμ μμ μ€λ₯λ₯Ό λ΄λ±λ κ²μ΄λ€.
- κ·Όλ° μ¬μ€μ μλ μ»΄νμΌλ¬κ° μλλ©΄ JVM μμμλ λ¬Έμ μμ΄ νΈμΆμ΄ λλ€. μ΄κ²μ΄ νκ³μ΄λ€.
(1) μ»΄νμΌ μμ μμ λ§μλ μ΄μ
Animal a = new Cat();
a.run(); // β μ»΄νμΌ μλ¬ (Animalμ runμ΄ μμΌλκΉ)
Animal a = getRandomAnimal(); // Dog? Cat? λͺ¨λ₯΄μ§
a.run(); // β λ§μ½ Dogμ΄λ©΄ run() μμ΄μ μ§μ§λ‘ λ°νμ μλ¬ λ°μ
- μλ°λ μ»΄νμΌ νμμ νμ μμ μ±μ λ§€μ° μ€μνλ€.
- Animal νμ μΌλ‘ λ λ°μμ§ λͺ¨λ₯΄λ μν©κ³Ό ν΄λΉ ν΄λμ€μ run() λ©μλκ° μμμ§ μμμ§ λͺ¨λ₯΄κΈ° λλ¬Έμ μ€λ₯λ₯Ό λ±λλ€.
- μ¦, μ°Έμ‘° νμ μ μμν΄λμ€λ‘ λ°λ κ³Όμ μ νμ λ§ λ°λλκ±°μ§ μμ§ νμν΄λμ€μ μμν΄λμ€ λͺ¨λλ₯Ό κ°μ§κ³ μλ μνμ΄λ€.
- λ¬Έμ λ μ»΄νμΌ μμ μ μμ κ°μ λ¬Έλ§₯μ λ°μνλ λ¬Έμ λ₯Ό λ§κΈ° μν΄ νμν΄λμ€μλ§ μλ λ©μλλ νΈμΆμ΄ λΆκ°λ₯νκ² λ§λ¬
(2) μ 리
- λ€νμ±μμ νμν΄λμ€λ§ κ°μ§κ³ μλ λ©μλλ μ¬μ€μ νΈμΆμ΄ κ°λ₯νμ§λ§, μ»΄νμΌ μμ μ λ§μλ
- μ»΄νμΌ μμ μ λ¬Έλ§₯μ μμ νμ§ μλ€λ μ΄μ λ‘ λ§μλ κ²μ.
- μ¦, νμ ν΄λμ€λ§ κ°μ§ λ©μλλ μ°Έμ‘° λ³μλ₯Ό νμ ν΄λμ€ νμ μΌλ‘ λ°κΏμΌ νΈμΆμ΄ κ°λ₯νλ€λ μλ―Έμ. ( μ /λ€μ΄ μΊμ€ν )
- μ€λ²λΌμ΄λ©λ λ©μλλ κ°λ₯ν¨. μ΄μ λ, μμν΄λμ€μ μ μκ° λμ΄μλ€λ νμμ μΈ κ·μΉμ΄ μ‘΄μ¬νκΈ° λλ¬Έ
(3) λ μ€ μ 리
- κ°μ²΄λ “λ΄κ° μν ν΄λμ€ + λΆλͺ¨ ν΄λμ€”μ λͺ¨λ μ 보λ₯Ό κ°μ§κ³ μκ³ , λ€νμ±μ μ»΄νμΌ μμ μ ‘μμ ν νΈμΆ’μ μν΄ λΆλͺ¨ νμ μΌλ‘ μ ννμ§λ§, λ°νμμλ μ€μ κ°μ²΄ λ©μλλ₯Ό μ€ννλ€λ κ²!
- λ€νμ±μ μ§μ§μ§μ§ λ¨μν μ½λμ μ μ°μ±κ³Ό μ μ§λ³΄μ λλ¬Έμ λ§λ€μ΄μ‘μ§λ§, λ¬Έμ λ μλ° λ¬Έλ§₯ ꡬ쑰μμ νκ³λ‘ μ νμ λκ² λ κ²μ΄λ©°, μ΄ λλ¬Έμ λ€νμ±μ΄ μ΄λ ΅κ² λκ»΄μ§ κ² μ΄λΌκ³ μκ°μ΄ λ λ€.
μλ° λ©μλ νΈμΆ μ리
- Heapμ μμ±λ κ°μ²΄ μΈμ€ν΄μ€λ νλ(μΈμ€ν΄μ€ λ³μ) λ°μ΄ν°λ§ κ°μ§κ³ μκ³ , λ©μλλ κ°μ§κ³ μμ§ μλλ€.
- μ€μ λ©μλλ MethodArea(ν΄λμ€ μμ)μ λ€μ΄κ° μλ μ 보μ λ©μλ μ½λμ μμΉλ₯Ό μ°Έμ‘°νκ² λλ€.
- μ¦, Heap λ΄λΆμλ MethodAreaμ λ©μλλ₯Ό μ°Έμ‘°κ°λ§μ κ°μ§κ³ μλ κ²μ΄λ€.
'βJava > πJava Programming' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] μ λ€λ¦(Generic) (0) | 2025.05.23 |
---|---|
[Java] μ΅λͺ ν΄λμ€(Anonymous Class) (1) | 2025.05.22 |
[Java] μΆμν - μΆμν΄λμ€, μΆμλ©μλ, μΈν°νμ΄μ€ (0) | 2025.05.20 |
[Java] Enum μ½κ² μ΄ν΄νκΈ° (1) | 2025.05.05 |
[Java] JVMκ³Ό μλ° μ€ν μ리 (1) | 2025.04.14 |