- μΆμ λ©μλ(Abstract Method)λ μ μΈλΆλ μλλ° κ΅¬νλΆκ° μλ λ©μλμ΄λ€.
- μΆμ λ©μλλ₯Ό ν¬ν¨νλ ν΄λμ€λ λ°λμ μΆμ ν΄λμ€(Abstract Class)μ¬μΌ νλ€.
- λ¬Όλ‘ μΆμ λ©μλ μμ΄λ μΆμν΄λμ€λ₯Ό μ μΈν μ μλ€.
- μΆμ ν΄λμ€λ κ°μ²΄λ₯Ό λ§λ€ μ μλ€. β‘οΈ newλ₯Ό μ¬μ©ν μ μλ€.
- μΆμ λ©μλλ νμ ν΄λμ€μκ² λ©μλμ ꡬνμ κ°μ νλ€. (μ€λ²λΌμ΄λ© κ°μ )
public abstract class λλ¬Ό{
abstract void μΈμ΄λ³΄μΈμ();
}
public class κ³ μμ΄ extends λλ¬Ό{
void μΈμ΄λ³΄μΈμ(){
System.out.println("λλ κ³ μμ΄. μΌμΉ.");
}
}
public class Driver{
public static void main(String[] args){
λλ¬Ό cat = new κ³ μμ΄();
λλ¬Ό dog = new κ°μμ§();
cat.μΈμ΄λ³΄μΈμ();
dog.μΈμ΄λ³΄μΈμ();
}
}
μΆμ λ©μλλ₯Ό μ¬μ©ν¨μΌλ‘μ¨ κ° λλ¬Όλ€μ λ€λ₯΄κ² μΈ μ μλ€. (λ€νμ±)
- ν΄λμ€μ μΈμ€ν΄μ€(κ°μ²΄)λ₯Ό λ§λ€ λ λ§λ€ new ν€μλλ₯Ό μ¬μ©νλ©°
ν΄λμ€λͺ (...)
μ μμ±μλΌκ³ νλ€.λλ¬Ό animal = new λλ¬Ό();
- μμ±μ = κ°μ²΄ μμ±μ λ©μλ
- λ§μ½ κ°λ°μκ° μλ¬΄λ° μμ±μλ λ§λ€μ§ μμΌλ©΄, μλ°λ μΈμμλ κΈ°λ³Έ μμ±μλ₯Ό μλμΌλ‘ λ§λ€μ΄μ€λ€.
- μΈμκ° μλ μμ±μλ₯Ό νλλΌλ λ§λ λ€λ©΄ μλ°λ κΈ°λ³Έ μμ±μλ₯Ό λ§λ€μ΄ μ£Όμ§ μλλ€.
- μμ±μλ κ°λ°μκ° νμν λ§νΌ μ€λ²λ‘λ©ν΄μ λ§λ€ μ μλ€.
- static block : ν΄λμ€κ° μ€νν± μμμ λ°°μΉλ λ μ€νλλ μ½λλΈλ‘
public class λλ¬Ό{
static{
System.out.println("λλ¬Ό ν΄λμ€ λ λ μ¨!");
}
}
- ν΄λμ€κ° μ€νν± μμμ λ°°μΉλλ κ²½μ°
- ν΄λμ€μ μ μ μμ±μ μ¬μ©ν λ
- ν΄λμ€μ μ μ λ©μλλ₯Ό μ¬μ©ν λ
- ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ΅μ΄λ‘ λ§λ€ λ
- μ νλ‘κ·Έλ¨ μ€ν μ λ°λ‘ ν΄λμ€ μ 보λ₯Ό static μμμ λ‘λ©νμ§ μμκΉ?
- μ€νν± μμλ λ©λͺ¨λ¦¬μ΄κΈ° λλ¬Έμ΄λ€.
- λ©λͺ¨λ¦¬λ μ΅λν λ¦κ² μ¬μ©μ μμνκ³ μ΅λν 빨리 λ°ννλ κ²μ΄ μ μμ΄λ€.
- λ¬Όλ‘ μλ°λ static μμμ νλ² μ¬λΌκ°λ©΄ νλ‘κ·Έλ¨μ΄ μ’ λ£λκΈ° μ κΉμ§ λ°ν λͺ»ν¨.
- κ·ΈλΌμλ μ΅λν λ¦κ² λ‘λ©ν¨μΌλ‘μ¨ λ©λͺ¨λ¦¬ μ¬μ©μ μ΅λν λ¦μΆκΈ° μν΄μλ€.
- final ν΄λμ€ : μμμ νλ½νμ§ μλ ν΄λμ€
- final λ³μ : λ³κ²½ λΆκ°λ₯ν μμ
- μ μΈ μ λλ μ΅μ΄ νλ² μ΄κΈ°ν κ°λ₯νλ€.
- ν΄λμ€ λ³μλ static λΈλ‘μμ
- λ©€λ² λ³μλ μμ±μ λλ μΈμ€ν΄μ€ λΈλ‘μμ
- μ§μ λ³μλ ν΄λΉ λ©μλ μμμ
- μ μΈ μ λλ μ΅μ΄ νλ² μ΄κΈ°ν κ°λ₯νλ€.
- final λ©μλ : μ€λ²λΌμ΄λ© κΈμ§ λ©μλ
-
μμ±λ κ°μ²΄(μ€μ κ°μ²΄)κ° νΉμ ν΄λμ€μ μΈμ€ν΄μ€μΈμ§ λ¬Όμ΄λ³΄λ μ°μ°μ.
μ°Έμ‘°λ³μ instanceof ν΄λμ€λͺ
- ν΄λμ€λ€μ μμκ΄κ³ λΏ μλλΌ μΈν°νμ΄μ€ ꡬνκ΄κ³μμλ λμΌνκ² μ μ©λλ€.
-
μ΄ μ°μ°μλ κ°λ ₯νκΈ΄ νμ§λ§, LSP(리μ€μ½ν μΉν μμΉ)μ μ΄κΈ°λ μ½λμμ μ£Όλ‘ λνλλ€.
- 보μΈλ€λ©΄ 리ν©ν°λ§ λμμ΄ μλμ§ μ κ²ν΄ λ΄μΌ νλ€.
- interfaceλ public μΆμλ©μλμ public μ μ μμλ§ κ°μ§ μ μλ€.
- κ·Έλ κΈ° λλ¬Έμ λ©μλμ publicκ³Ό abstract, μμ±μ publicκ³Ό static, finalμ λΆμ΄μ§ μμλ μλμΌλ‘ μλ°κ° λΆμ¬μ€λ€.
- νμ§λ§ μ μλ λͺ ννκ² μ λ¬νκΈ° μν΄μ ν€μλλ₯Ό λΆμ΄λΌκ³ νλ€..
μλ°8λΆν° λν΄νΈ λ©μλκ° μκ²Όλ€.
μ΄λ₯Ό ν΅ν΄ λ©μλλ₯Ό μΆκ°ν¨μΌλ‘μ¨ μ΄λ₯Ό ꡬννλ ν΄λμ€λ€μκ² κ΅¬νμ κ°μ νμ§ μμ μ μλ€.
μ½λ λ³κ²½ μμ΄λλ¨. β‘οΈ νμ₯μ ν μ μμ§λ§ λ³κ²½μ λν΄μ νμλλ OCPλ₯Ό μ§ν¬ μ μμ΄μ§.
- μ§μ λ³μμ μμ±(κ°μ²΄ λ³μ, μ μ λ³μ)μ μ΄λ¦μ΄ κ°μ κ²½μ° μ§μ λ³μκ° μ°μ νλ€.
- κ°μ²΄ λ³μμ μ΄λ¦μ΄ κ°μ μ§μ λ³μκ° μλ κ²½μ° κ°μ²΄ λ³μλ₯Ό μ¬μ©νλ €λ©΄
this
λ₯Ό μ λμ¬λ‘ μ¬μ©νλ€. - μ μ λ³μμ μ΄λ¦μ΄ κ°μ μ§μ λ³μκ° μλ κ²½μ° μ μ λ³μλ₯Ό μ¬μ©νλΌλ©΄ ν΄λμ€λͺ μ μ λμ¬λ‘ μ¬μ©νλ€.
- super ν€μλλ₯Ό μ΄μ©ν΄ μμν΄λμ€μ μΈμ€ν΄μ€ λ©μλλ₯Ό νΈμΆν μ μλ€.
- νμ§λ§ super.super ννλ‘ μμμ μμ ν΄λμ€μ μΈμ€ν΄μ€μλ μ κ·Ό λΆκ°λ₯νλ€.
- κ°μ²΄ λ©€λ² λ©μλλ κ° κ°μ²΄λ³λ‘ λ¬λΌμ§μ§ μλλ€.
- μμ± κ°λ§ λ€λ₯Ό λΏμ΄λ€.
- κ°μ²΄μ λ©μλλ₯Ό heapμμμ λ§λλ κ²μ μ¬κ°ν λ©λͺ¨λ¦¬ λλΉκ° λ κ²μ΄λ€.
- μ§λ₯μ μΌλ‘ JVMμ κ°μ²΄ λ©€λ² λ©μλλ₯Ό staticμμμ λ¨ νλλ§ λ³΄μ νλ€.
- κ·Έλ¦¬κ³ λ©μλ νΈμΆ μ κ°μ²΄ μμ μ λνλ΄λ this κ°μ²΄ μ°Έμ‘° λ³μλ₯Ό λκΈ΄λ€.
- κΈ°μ‘΄ μ½λ
class νκ·{ void test(){ System.out.println("ν μ€νΈ λ©μλ"); } }
public class Driver{ public static void main(String[] args){ νκ· λ½λ‘λ‘ = new νκ·(); λ½λ‘λ‘.test(); } }
- JVMμ΄ λ³κ²½νλ μ½λ
class νκ·{ static void test(νκ· this){ System.out.println("ν μ€νΈ λ©μλ"); } }
public class Driver{ public static void main(String[] args){ νκ· λ½λ‘λ‘ = new νκ·(); νκ·.test(λ½λ‘λ‘); } }