<Javaμ μ μ κ°μ 3ν>μ κΈ°λ³ΈμΌλ‘ λ°°μ΄ λ΄μ©μ λλ€.
λͺ©μ°¨
- 1. λ€νμ±
- 2. μΆμν΄λμ€
- 3. μΈν°νμ΄μ€
- 4. λ΄λΆν΄λμ€
1. λ€νμ± polymorphism
1-1) λ€νμ±μ΄λ?
- νλμ κ°μ²΄κ° μ¬λ¬ κ°μ§ νμ μ κ°μ§ μ μλ κ²
- μλ°μμλ μ΄λ¬ν λ€νμ±μ λΆλͺ¨ ν΄λμ€ νμ μ μ°Έμ‘° λ³μλ‘ μμ ν΄λμ€ νμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλλ‘ νμ¬ κ΅¬ννλ€.
- λ€νμ±μ μμ, μΆμνμ λλΆμ΄ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μ ꡬμ±νλ μ€μν νΉμ§ μ€ νλμ΄λ€.
1-2) μ°Έμ‘° λ³μμ λ€νμ±
- λΆλͺ¨ ν΄λμ€ νμ μ μ°Έμ‘° λ³μλ‘ μμ ν΄λμ€ νμ μ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ€.
- μ΄λ μ°Έμ‘° λ³μκ° μ¬μ©ν μ μλ λ©€λ²μ κ°μκ° μ€μ μΈμ€ν΄μ€μ λ©€λ² κ°μλ³΄λ€ κ°κ±°λ μ μ΄μΌ μ°Έμ‘°ν μ μλ€.
class Parent { ... }
class Child extends Parent { ... }
...
Parent pa = new Parent(); // νμ©
Child ch = new Child(); // νμ©
Parent pc = new Child(); // νμ©
Child cp = new Parent(); // (μ€λ₯ λ°μ)μ°Έμ‘° λ³μκ° μ¬μ©ν μ μλ λ©€λ²μ κ°μ > μ€μ μΈμ€ν΄μ€μ λ©€λ² κ°μ
//κ°μ νμ
μ μΈμ€ν΄μ€λ€
Child ch = new Child();
Parent pc = new Child();
1-3) μ°Έμ‘° λ³μμ νμ λ³ν : μ°Έμ‘°λ³μμ νλ³νμ ν΅ν΄, μ°Έμ‘°νκ³ μλ λ©€λ²μ κ°μλ₯Ό μ‘°μ ν μ μλ€.
(λ³νν νμ
μν΄λμ€μ΄λ¦) λ³νν μ°Έμ‘°λ³μ
쑰건 1. μλ‘ μμ κ΄κ³μ μλ ν΄λμ€ μ¬μ΄μλ§ νμ λ³νμ ν μ μλ€. 2. μμ ν΄λμ€ νμ μμ λΆλͺ¨ ν΄λμ€ νμ μΌλ‘μ νμ λ³νμ μλ΅ν μ μλ€. 3. νμ§λ§ λΆλͺ¨ ν΄λμ€ νμ μμ μμ ν΄λμ€ νμ μΌλ‘μ νμ λ³νμ λ°λμ λͺ μν΄μΌνλ€. |
1-4) instanceof μ°μ°μ
- μ°Έμ‘° λ³μκ° μ°Έμ‘°νκ³ μλ μΈμ€ν΄μ€μ μ€μ νμ μ νμΈν μ μλ μ°μ°μ
- μΌμͺ½μ μ λ¬λ μ°Έμ‘° λ³μκ° μ€μ λ‘ μ°Έμ‘°νκ³ μλ μΈμ€ν΄μ€μ νμ μ΄ μ€λ₯Έμͺ½μ μ λ¬λ ν΄λμ€ νμ μ΄λ©΄ trueλ₯Ό λ°ννκ³ , μλλ©΄ falseλ₯Ό λ°ννλ€. λ§μ½μ μ°Έμ‘° λ³μκ° nullμ κ°λ¦¬ν€κ³ μμΌλ©΄ falseλ₯Ό λ°ννλ€
μ°Έμ‘°λ³μ instanceof ν΄λμ€μ΄λ¦
2. μΆμν΄λμ€ abstract method : λ―Έμμ± μ€κ³λ
2-1) μΆμ λ©μλ(abstract method)
- μμ ν΄λμ€μμ λ°λμ μ€λ²λΌμ΄λ©ν΄μΌλ§ μ¬μ©ν μ μλ λ©μλ
- μΆμ λ©μλκ° ν¬ν¨λ ν΄λμ€λ₯Ό μμλ°λ μμ ν΄λμ€κ° λ°λμ μΆμ λ©μλλ₯Ό ꡬννλλ‘ νκΈ° μν΄ μ¬μ©νλ€.
- μΆμ λ©μλλ μ μΈλΆλ§μ΄ μ‘΄μ¬νλ©°, ꡬνλΆλ μμ±λμ΄ μμ§ μλ€. λ°λ‘ μ΄ μμ±λμ΄ μμ§ μμ ꡬνλΆλ₯Ό μμ ν΄λμ€μμ μ€λ²λΌμ΄λ©νμ¬ μ¬μ©νλ κ²μ΄λ€.
abstract λ°ννμ
λ©μλμ΄λ¦();
2-2) μΆμ ν΄λμ€(abstract class)
- νλ μ΄μμ μΆμ λ©μλλ₯Ό ν¬ν¨νλ ν΄λμ€
- μΆμ ν΄λμ€λ κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°μμ μ€μν νΉμ§μΈ λ€νμ±μ κ°μ§λ λ©μλμ μ§ν©μ μ μν μ μλλ‘ ν΄μ€λλ€.
- λ°λμ μ¬μ©λμ΄μΌ νλ λ©μλλ₯Ό μΆμ ν΄λμ€μ μΆμ λ©μλλ‘ μ μΈν΄ λμΌλ©΄, μ΄ ν΄λμ€λ₯Ό μμλ°λ λͺ¨λ ν΄λμ€μμλ μ΄ μΆμ λ©μλλ₯Ό λ°λμ μ¬μ μν΄μΌνλ€.
- μΆμ ν΄λμ€λ λμμ΄ μ μλμ΄ μμ§ μμ μΆμ λ©μλλ₯Ό ν¬ν¨νκ³ μμΌλ―λ‘, μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλ€. μΆμν΄λμ€μμ μΈμ€ν΄μ€λ μμμ ν΅ν΄μ μμν΄λμ€μ μν΄μλ§ μμ±ν μ μλ€.
- μΆμ ν΄λμ€λ μΆμ λ©μλ(λ―Έμμ± λ©μλ)λ₯Ό ν¬ν¨νκ³ μλ€λ μ μ μ μΈνλ©΄, μΌλ° ν΄λμ€μ λͺ¨λ μ μ΄ κ°λ€.
abstract class ν΄λμ€μ΄λ¦ {
...
abstract λ°ννμ
λ©μλμ΄λ¦(); //μΆμλ©μλ
...
}
3. μΈν°νμ΄μ€ interface : κΈ°λ³Έμ€κ³λ
3-1) μΈν°νμ΄μ€(interface)
- μλ°μμλ ν΄λμ€λ₯Ό ν΅ν λ€μ€ μμμ μ§μνμ§ μμ§λ§, λ€μ€ μμμ μ΄μ μ λ²λ¦΄ μλ μκΈ°μ μλ°μμλ μΈν°νμ΄μ€λΌλ κ²μ ν΅ν΄ λ€μ€ μμμ μ§μνκ³ μλ€.
- μΈν°νμ΄μ€(interface)λ λ€λ₯Έ ν΄λμ€λ₯Ό μμ±ν λ κΈ°λ³Έμ΄ λλ νμ μ 곡νλ©΄μ, λ€λ₯Έ ν΄λμ€ μ¬μ΄μ μ€κ° λ§€κ° μν κΉμ§ λ΄λΉνλ μΌμ’ μ μΆμ ν΄λμ€μ΄λ€.
- μλ°μμ μΆμ ν΄λμ€λ μΆμ λ©μλλΏλ§ μλλΌ μμ±μ, νλ, μΌλ° λ©μλλ ν¬ν¨ν μ μλ€. νμ§λ§ μΈν°νμ΄μ€λ μ€λ‘μ§ μΆμ λ©μλμ μμλ§μ ν¬ν¨ν μ μλ€.
3-2) μ μΈ
- μΈν°νμ΄μ€λ₯Ό μ μΈν λμλ μ κ·Ό μ μ΄μμ ν¨κ» interface ν€μλλ₯Ό μ¬μ©νλ©΄ λλ€.
- ν΄λμ€μλ λ¬λ¦¬ μΈν°νμ΄μ€μ λͺ¨λ νλλ public static finalμ΄μ΄μΌ νλ©°, λͺ¨λ λ©μλλ public abstractμ΄μ΄μΌ νλ€. μ΄ λΆλΆμ λͺ¨λ μΈν°νμ΄μ€μ 곡ν΅μΌλ‘ μ μ©λλ λΆλΆμ΄λ―λ‘ μ΄ μ μ΄μλ μλ΅ν μ μκ³ , μ΄λ κ² μλ΅λ μ μ΄μλ μ»΄νμΌ μ μλμΌλ‘ μΆκ°λλ€.
μ κ·Όμ μ΄μ interface μΈν°νμ΄μ€μ΄λ¦ {
public static final νμ
μμμ΄λ¦ = κ°;
...
public abstract λ©μλμ΄λ¦(맀κ°λ³μλͺ©λ‘);
...
}
3-3) ꡬν
μΈν°νμ΄μ€λ μΆμ ν΄λμ€μ λ§μ°¬κ°μ§λ‘ μμ μ΄ μ§μ μΈμ€ν΄μ€λ₯Ό μμ±ν μλ μλ€. λ°λΌμ μΈν°νμ΄μ€κ° ν¬ν¨νκ³ μλ μΆμ λ©μλλ₯Ό ꡬνν΄ μ€ ν΄λμ€λ₯Ό μμ±ν΄μΌνλ€.
class ν΄λμ€μ΄λ¦ implements μΈν°νμ΄μ€μ΄λ¦ { ... } //ꡬν
class ν΄λμ€μ΄λ¦ implements μΈν°νμ΄μ€μ΄λ¦ extend μμν΄λμ€μ΄λ¦ { ... } //ꡬν+μμ
λ€μμ μΈν°νμ΄μ€λ₯Ό μ¬μ©ν λ€μ€ μμμ μμ μ΄λ€.
interface Animal { public abstract void cry(); }
interface Pet { public abstract void play(); }
class Cat implements Animal, Pet {
public void cry() {
System.out.println("λμΉλμΉ!");
}
public void play() {
System.out.println("μ₯ μ‘κΈ° λμ΄νμ~!");
}
}
class Dog implements Animal, Pet {
public void cry() {
System.out.println("λ©λ©!");
}
public void play() {
System.out.println("μ°μ±
κ°μ~!");
}
}
public class Polymorphism04 {
public static void main(String[] args) {
Cat c = new Cat();
Dog d = new Dog();
c.cry();
c.play();
d.cry();
d.play();
}
}
3-4) μ₯μ
- λκ·λͺ¨ νλ‘μ νΈ κ°λ° μ μΌκ΄λκ³ μ ννλ κ°λ°μ μν νμ€νκ° κ°λ₯νλ€.
- ν΄λμ€μ μμ±κ³Ό μΈν°νμ΄μ€μ ꡬνμ λμμ μ§νν μ μμΌλ―λ‘, κ°λ° μκ°μ λ¨μΆν μ μλ€.
- ν΄λμ€μ ν΄λμ€ κ°μ κ΄κ³λ₯Ό μΈν°νμ΄μ€λ‘ μ°κ²°νλ©΄, ν΄λμ€λ§λ€ λ 립μ μΈ νλ‘κ·Έλλ°μ΄ κ°λ₯νλ€.
4. λ΄λΆν΄λμ€ inner class
4-1) λ΄λΆ ν΄λμ€(inner class) : νλμ ν΄λμ€ λ΄λΆμ μ μΈλ λ λ€λ₯Έ ν΄λμ€
class Outer { // μΈλΆ ν΄λμ€
...
class Inner { // λ΄λΆ ν΄λμ€
...
}
...
}
λ΄λΆν΄λμ€μ μ’ λ₯ | μ μΈ μμΉ | νΉμ§ |
instance class | μΈλΆ ν΄λμ€μ λ©€λ²λ³μ μ μΈμμΉ | μΈλΆ ν΄λμ€μ μΈμ€ν΄μ€λ©€λ²μ²λΌ λ€λ€μ§κ³ , μ£Όλ‘ κ·Έμ κ΄λ ¨λ μμ μ μ¬μ©λλ€. |
static class | μΈλΆ ν΄λμ€μ λ©€λ²λ³μ μ μΈμμΉ | μΈλΆ ν΄λμ€μ staticλ©€λ²μ²λΌ λ€λ€μ§κ³ , μ£Όλ‘ κ·Έμ κ΄λ ¨λ μμ μ μ¬μ©λλ€. |
local class | μΈλΆ ν΄λμ€μ λ©μλλ μ΄κΈ°νλΈλ μ | μ μΈλ μμ λ΄λΆμμλ§ μ¬μ©λ μ μλ€. |
anonymous class | ν΄λμ€μ μ μΈκ³Ό κ°μ²΄μ μμ±μ λμμ νλ μ΄λ¦μλ ν΄λμ€(μΌνμ©) |
4-2) λ΄λΆ ν΄λμ€μ μ₯μ
- λ΄λΆ ν΄λμ€μμ μΈλΆ ν΄λμ€μ λ©€λ²μ μμ½κ² μ κ·Όν μ μλ€.
- μλ‘ κ΄λ ¨ μλ ν΄λμ€λ₯Ό λ Όλ¦¬μ μΌλ‘ λ¬Άμ΄μ ννν¨μΌλ‘μ¨, μ½λμ μΊ‘μνλ₯Ό μ¦κ°μν¨λ€.
- μΈλΆμμλ λ΄λΆ ν΄λμ€μ μ κ·Όν μ μμΌλ―λ‘, μ½λμ 볡μ‘μ±μ μ€μΌ μ μλ€.
4-3) μ΅λͺ ν΄λμ€(anonymous class)
- λ€λ₯Έ λ΄λΆ ν΄λμ€μλ λ¬λ¦¬ μ΄λ¦μ κ°μ§μ§ μλ ν΄λμ€
- μ΅λͺ ν΄λμ€λ ν΄λμ€μ μ μΈκ³Ό λμμ κ°μ²΄λ₯Ό μμ±νλ―λ‘, λ¨ νλμ κ°μ²΄λ§μ μμ±νλ μΌνμ© ν΄λμ€μ΄λ€.
- μμ±μλ₯Ό μ μΈν μλ μκ³ , μ€λ‘μ§ λ¨ νλμ ν΄λμ€λ λ¨ νλμ μΈν°νμ΄μ€λ₯Ό μμλ°κ±°λ ꡬνν μ μλ€.
- ꡬνν΄μΌ νλ λ©μλκ° λ§€μ° μ μ ν΄λμ€λ₯Ό ꡬνν λ μ¬μ©λλ€.
// μ΅λͺ
ν΄λμ€λ μ μΈκ³Ό λμμ μμ±νμ¬ μ°Έμ‘°λ³μμ λμ
ν¨.
ν΄λμ€μ΄λ¦ μ°Έμ‘°λ³μμ΄λ¦ = new ν΄λμ€μ΄λ¦(){
// λ©μλμ μ μΈ
};
'π° μΈμ΄ > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μλ°μμ μ μ©ν ν΄λμ€λ€ (0) | 2020.06.14 |
---|---|
java.lang ν¨ν€μ§ (0) | 2020.06.13 |
μλ°, κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(2) (0) | 2020.06.09 |
μλ°, κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°(1) (0) | 2020.06.04 |
switch/case문 (0) | 2020.06.04 |