Javaμ μμ
μμ
β’
κΈ°μ‘΄ ν΄λμ€μ μμ°(λ©€λ²)μ μμ ν΄λμ€μμ μ¬μ¬μ©νκΈ° μν κ²
β’
λΆλͺ¨μ μμ±μμ μ΄κΈ°ν λΈλ‘(Initializer)λ μμλμ§ μλλ€
β’
κΈ°μ‘΄ ν΄λμ€μ λ©€λ²λ₯Ό λ¬Όλ €λ°κΈ° λλ¬Έμ μ½λμ μ κ° ν¨κ³Όκ° μλ€
β’
λΆλͺ¨μ μ½λλ₯Ό λ³κ²½νλ©΄ λͺ¨λ μμλ€μκ² μ μ©λλ€ β μ μ§λ³΄μμ± ν₯μ
β’
μμμ κ΄κ³λ is a κ΄κ³λ‘ μ΄λ£¨μ΄μ§λ€. (ex. μ¬λ is a ν¬μ λ₯)
λ¨μΌ μμ
β’
νλμ ν΄λμ€λ μ€μ§ νλμ λΆλͺ¨ ν΄λμ€λ§ μμν μ μμ
β’
λ€μ€μμμ κ²½μ° μ€λ³΅λλ λ³μμ λ©μλκ° μμλλ λ¬Έμ κ° λ°μν μ μμ΄ μλ°μμλ λ¬Έλ²μ μΌλ‘ λ¨μΌμμλ§μ νμ©νλ€.
ν¬ν¨ κ΄κ³
β’
μμ μ΄μΈμ ν΄λμ€λ₯Ό μ¬νμ©νλ λ°©λ²
β’
2κ° μ΄μ ν΄λμ€μμ νΉμ±μ κ°μ Έμ€λ κ²½μ° νλλ μμ, λλ¨Έμ§λ λ©€λ² λ³μλ‘ μ²λ¦¬
super ν€μλ
super ν€μλ
β’
thisλ₯Ό ν΅ν΄ μμ κ°μ²΄μ μ κ·Όνλ―μ΄, superλ₯Ό ν΅ν΄ μ‘°μ ν΄λμ€ λ©€λ²μ μ κ·Όνλ€.
λ³μμ μ€μ½ν
β’
μ¬μ©λ μμΉμμ μ μ νμ₯ν΄κ°λ©° μ²μ λ§λ μ μΈλΆμ μ°κ²°λλ€.
β’
method λ΄λΆ β ν΄λΉ ν΄λμ€μ λ©€λ²λ³μ β μ‘°μ ν΄λμ€ λ©€λ²λ³μ
super()
β’
μ‘°μ ν΄λμ€μ μμ±μλ₯Ό νΈμΆνλ€
β’
μμ ν΄λμ€ μμ±μμ 첫μ€μμλ§ νΈμΆ κ°λ₯νλ€
β’
λͺ
μμ μΌλ‘ this() λλ super()λ₯Ό νΈμΆνμ§ μμ κ²½μ° μ»΄νμΌλ¬κ° μλμΌλ‘ super()λ₯Ό
μ½μ
νλ€ β κ²°λ‘ μ μΌλ‘ ObjectκΉμ§ κ°μ²΄ μ λΆ μμ±!
λ©μλ μ€λ²λΌμ΄λ©
β’
λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ¬μ¬μ©νμ§ μκ³ μλ‘κ² μ μνμ¬ μ¬μ©νλ κ²
β’
μμ ν΄λμ€μμ μ¬μ μλ λ©μλλ λΆλͺ¨ ν΄λμ€μ λ©μλμ λ©μλ μ΄λ¦, 맀κ°λ³μμ μ ν λ° κ°μκ° λμΌν΄μΌ νλ€.
β’
μ€λ²λΌμ΄λ©κ³Ό μ€λ²λ‘λ©μ μ ꡬλΆμ§μ΄μ μ¬μ©ν΄μΌ νλ€.
(μλμ μμλ Overridingμ΄ μλ Overloading!)
superλ₯Ό ν΅ν λ©μλ μ€λ²λΌμ΄λ©
β’
Overridingμ λΆλͺ¨μ λ©μλλ₯Ό μμμ΄ μλ‘κ² μ μνκ² λ€λ μλ―Έμ΄λ―λ‘ λΆλͺ¨κ° κ°μ§ λ©μλλ μμλμ§ μλλ€.
β’
λ©μλλ₯Ό Overridingνλ©΄μ λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μ¬μ©νκ³ μΆμ κ²½μ°μ superλ₯Ό μ¬μ©νμ¬ λͺ
μμ μΌλ‘ νΈμΆν μ μλ€.
λ€μ΄λλ―Ή λ©μλ λμ€ν¨μΉ(Dynamic Method Dispatch)
β’
λ°νμμμ μ€μ κ°μ²΄ νμΈ ν κ°μ²΄μ λ°μΈλ©
β’
Javaμ λ€νμ±μ΄ κ°λ₯νλλ‘ ν΄μ£Όλ λ°λ°νμ΄λ€
β’
ex)
Employee e = new Engineer();
e.getInformation()
Compile time : Employeeμ getInfoλ‘ κ°μ£Ό
Runtime : Engineerμ getInfoλ‘ κ°μ£Ό (μμ±ν μ£Όμ²΄κ° EngineerλκΉ EngineerκΊΌλ‘!!)
β’
μλλ μμ νμ
μΌλ‘ νμ νμ
κ°μ²΄λ₯Ό μ°Έμ‘°ν λ μμ νμ
μ κΈ°λ₯λ°μ μ¬μ© λΆκ°
(μ»΄νμΌλ¬κ° νμ©μ μν΄μ)
β λμ λ°μΈλ©μ ν΅ν΄ νμ ν΄λμ€μμ μ¬μ μλ λ©μλ μ¬μ© κ°λ₯!!
β μ€λ²λΌμ΄λ©μ μ€μμ± ( λΆλͺ¨ ν΄λμ€μμ κ»λ°κΈ°λΌλ λ§λλ μ΄μ )
μΆμ ν΄λμ€(abstract class)
β’
μΆμ λ©μλ
γ΄ μμ ν΄λμ€μμ λ°λμ μ¬μ μν΄μ μ¬μ©λκΈ° λλ¬Έμ μ‘°μμ ꡬνμ΄ λ¬΄μλ―Έν λ©μλ
γ΄ λ©μλμ μ μΈλΆλ§ λ¨κΈ°κ³ , ꡬνλΆλ μΈλ―Έμ½λ‘ μΌλ‘ λ체
㴠ꡬνλΆκ° μλ€λ μλ―Έλ‘ abstract ν€μλλ₯Ό λ©μλ μ μΈλΆμ μΆκ°
γ΄ κ°μ²΄λ₯Ό μμ±ν μ μλ ν΄λμ€λΌλ μλ―Έλ‘ ν¬λμ€ μ μΈλΆμ abstract μΆ
β’
μΆμ ν΄λμ€μ νΉμ§
γ΄ ν΄λμ€μ ꡬνλΆκ° μλ λ©μλκ° μμΌλ―λ‘ κ°μ²΄λ₯Ό μμ±ν μ μμ
γ΄ νμ§λ§ μμ ν΄λμ€ νμ
μΌλ‘μ¨ μμ μ°Έμ‘°λ κ°λ₯!
ex) Vehicle v = new Vehicle(); β X
Vehicle v = new DiselSUV(); β O
β’
μΆμ ν΄λμ€λ₯Ό μ¬μ©νλ μ΄μ
γ΄ abstract classλ ꡬνμ κ°μ λ₯Ό ν΅ν΄ νλ‘κ·Έλ¨μ μμ μ±μ ν₯μμν΄
γ΄ μΈν°νμ΄μ€μ μλ λ©μλ μ€ κ΅¬νν μ μλ λ©μλλ₯Ό ꡬνν΄ νΈμλ₯Ό μ§μ
final ν€μλ
β’
μμ νμ
β¦
λ‘컬 μμ λ³μμ finalλ‘ μ μΈνλ©΄ νλ² μ΄κΈ°νλ λ³μλ λ³κ²½ν μ μλ μμκ°μ΄ λ©λλ€.
@Test
public void test_final_primitive_variables() {
final int x = 1;
//x = 3; //νλ² assignλλ©΄ λ³κ²½ν μ μμ.
}
Java
볡μ¬
β’
κ°μ²΄ νμ
β¦
κ°μ²΄ λ³μμ finalλ‘ μ μΈνλ©΄ κ·Έ λ³μμ λ€λ₯Έ μ°Έμ‘° κ°μ μ§μ ν μ μμ΅λλ€. μμ νμ
κ³Ό λμΌνκ² νλ² μ°μ¬μ§ λ³μλ μ¬λ³κ²½ λΆκ°ν©λλ€. λ¨, κ°μ²΄ μμ²΄κ° immutableνλ€λ μλ―Έλ μλλλ€. κ°μ²΄μ μμ±μ λ³κ²½ κ°λ₯ν©λλ€.
@Test
public void test_final_reference_variables() {
final Pet pet = new Pet();
// pet = new Pet(); //λ€λ₯Έ κ°μ²΄λ‘ λ³κ²½ν μ μμ
pet.setWeight(3); //κ°μ²΄ νλλ λ³κ²½ν μ μμ
}
Java
볡μ¬
β’
λ©μλ μΈμ
β¦
λ©μλ μΈμμ final ν€μλλ₯Ό λΆμ΄λ©΄, λ©μλ μμμ λ³μκ°μ λ³κ²½ν μ μμ΅λλ€.
public class Pet {
int weight;
public void setWeight(final int weight) {
// weight = 1; //final μΈμλ λ©μλμμμ λ³κ²½ν μ μμ
}
}
Java
볡μ¬
Object ν΄λμ€
μ΅μμ ν΄λμ€μ΄λ©°, λͺ¨λ ν΄λμ€λ 묡μμ μΌλ‘ Object ν΄λμ€λ₯Ό μμλ°κ² λλ€.
μ£Όμ λ©μλ
β’
equals(), toString(), clone() λ± μ νΈ λ©μλ
β’
wait(), notify(), notifyAll() λ± μ€λ λ κ΄λ ¨ λ©μλ
β’
finalize() : GC μ 리μμ€λ₯Ό λ°ννκΈ° μν λ©μλ
β’
hashcode() : ν΄λΉ κ°μ²΄μ μ°Έμ‘° κ°μ λνλ΄λ λ©μλ