abstract ν€μλ - μΆμ λ©μλμ μΆμ ν΄λμ€
μΆμ λ©μλλ₯Ό νλλΌλ κ°μ§κ³ μλ ν΄λμ€λ₯Ό μΆμ ν΄λμ€λΌκ³ λΆλ₯Έλ€.
λλ체 μ λͺΈμ²΄κ° μμ΄ μ μΈλ§ μλ λ©μλκ° νμν κΉ??
**λ¬Έμ μ **
1. λλ¬Ό ν΄λμ€λ μ΄λ»κ² μΈμ΄μΌ νλμ§ λͺ¨λ₯Έλ€. (μ°λ λ©μλλ₯Ό μ μν μ μλ€.. -> μ μνλλΌλ μΈμ€ν΄μ€λ‘ μμ±ν΄μ μλλ€.)
2. κ·Έλ°λ° λλ¬Ό μ°Έμ‘° λ³μλ₯Ό ν΅ν΄ λͺ¨λ λλ¬Όμ μΈκ²νκ³ μΆλ€. (νμν΄λμ€μμ μ€λ²λΌμ΄λ ν μμ λ©μλκ° νμν¨...)
**ν΄κ²° λ°©λ²**
μΆμ ν΄λμ€μ μΆμ λ©μλ μ¬μ©νλ©΄ 1λ²μ λ¬Έμ λ₯Ό ν΄κ²°κ°λ₯νλ€. μ°λ λ©μλλ νμ ν΄λμ€μκ² κ΅¬νμ 맑길 μ μκ³ μΆμν΄λμ€λ μΈμ€ν΄μ€κ° λ μ μλ€. (λ¬Έμ μ λͺ¨λ ν΄κ²°!!)
2λ² λ¬Έμ λ μΆμ λ©μλλ‘ νμν΄λμ€μκ² λ©μλμ ꡬνμ κ°μ ν μ μλ€. (ꡬν μνλ©΄ μ»΄νμΌ μλ¬)
λν, μμ ν΄λμ€μ μ°Έμ‘° λ³μλ‘ νμ ν΄λμ€μμ μ€λ²λΌμ΄λν λ©μλ νΈμΆμ΄ κ°λ₯ν΄μ§λ€!
- μΆμ ν΄λμ€λ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μλ€ (new μ¬μ© λΆκ°)
- μΆμ λ©μλλ νμ ν΄λμ€μκ² λ©μλμ ꡬνμ κ°μ νλ€.
- μΆμ λ©μλλ₯Ό ν¬ν¨νλ ν΄λμ€λ λ°λμ μΆμ ν΄λμ€μ¬μΌ νλ€.
μμ±μ
κ°μ²΄λ₯Ό μμ±νλ λ©μλ (κ°μ²΄ μμ±μ λ©μλ) = μμ±μ
μμ±μμ λν μλ°μ νΉμ§
- κ°λ°μκ° μλ¬΄λ° μμ±μλ λ§λ€μ§ μμΌλ©΄ κΈ°λ³Έ μμ±μλ₯Ό μλμΌλ‘ λ§λ€μ΄μ€
- μΈμκ° μλ μμ±μλ₯Ό νλλΌλ λ§λ€λ©΄ μλ°λ κΈ°λ³Έμμ±μλ₯Ό λ§λ€μ§ μμ.
ν΄λμ€ μμ± μμ μ€ν λΈλ‘, static λΈλ‘
public class Driver05 {
public static void main(String[] args) {
System.out.println("main λ©μλ μμ!");
System.out.println(Animal.age);
}
}
class Animal {
static int age = 0;
static {
System.out.println("Animal class ready on!");
}
}
μ μ½λμμ Animalμ μ€νν± λΈλ‘μ μΈμ μ²μ μ€νλ κΉ?
μ λ΅μ Animal.ageλ‘ μ μ μμ±μ μ¬μ©ν λμ΄λ€.
ν΄λΉ ν΄λμ€κ° μ½λμμ 맨 μ²μ μ¬μ©λ λ T λ©λͺ¨λ¦¬ μ€νν± μμμ λ‘λ©λλ©°, μ΄ λ λ¨ νλ²λ§ static λΈλ‘μ΄ μ€νλλ€.
**ν΄λμ€κ° μ μΌ μ²μ μ¬μ©λλ κ²½μ°**
- ν΄λμ€μ μ μ μμ± μ¬μ©ν λ
- ν΄λμ€μ μ μ λ©μλ μ¬μ©ν λ
- ν΄λμ€μ μΈμ€ν΄μ€ λ§λ€ λ
κΈ°μ΅ν΄μΌν κ²
1. Tλ©λͺ¨λ¦¬ ꡬ쑰 μ μ€νν± λΈλ‘μμ μ¬μ©ν μ μλ μμ±κ³Ό λ©μλλ static λ©€λ² λΏμ΄λ€.
-> μΌλ° κ°μ²΄ λ©€λ²λ μμ§ μμ± μ μ΄λ―λ‘ μ κ·Όν μ μλ€.
2. νλ‘κ·Έλ¨ μ€ν μ ν΄λμ€λ₯Ό λ°λ‘ staticμμμ λ‘λ©νμ§ μλ κ²μ λ©λͺ¨λ¦¬λ₯Ό μ’ λ ν¨μ¨μ μΌλ‘ μ¬μ©νκΈ° μν΄μμ΄λ€.
-> νλ² λ‘λ©λλ©΄ μ’ λ£μ κΉμ§ static μμμμ λ©λͺ¨λ¦¬ λ°ν λΆκ°..
final ν€μλ
λ§μ§λ§, μ΅μ’ ν΄λμ€, λ³μ, λ©μλ..
finalκ³Ό ν΄λμ€
final ν΄λμ€λ μμμ νλ½νμ§ μλλ€. (νμ ν΄λμ€λ₯Ό λ§λ€ μ μλ€.)
final κ³Ό λ³μ
public class κ³ μμ΄ {
final static int μ μ μμ1 = 1;
final static int μ μ μμ2;
final int κ°μ²΄μμ1 = 1;
final int κ°μ²΄μμ2;
static {
μ μ μμ2 = 2;
// μμλ νλ² μ΄κΈ°ν λλ©΄ κ°μ λ³κ²½ν μ μλ€.
// μ μ μμ2 = 4;
}
κ³ μμ΄() {
κ°μ²΄μμ2 = 2;
// μμλ νλ² μ΄κΈ°ν λλ©΄ κ°μ λ³κ²½ν μ μλ€.
// κ°μ²΄μμ2 = 4;
final int μ§μμμ1 = 1;
final int μ§μμμ2;
μ§μμμ2 = 2;
}
}
-> final λ³μ μ΄κΈ°ν λ°©λ²!
final staticμ μ μλ μ μ μμλ μ μΈκ³Ό λμμ μ΄κΈ°ννκ±°λ μ μ μμ±μμ ν΄λΉνλ static λΈλ‘ λ΄λΆμμ μ΄κΈ°ν κ°λ₯.
final [type]μΌλ‘ μ μλ κ°μ²΄ μμλ λκ°μ΄ κ°μ²΄ μμ μ μΈκ³Ό λμμ μ΄κΈ°ν νκ±°λ κ°μ²΄ μμ±μμμ μ΄κΈ°ν κ°λ₯νλ€.
finalκ³Ό λ©μλ
public class λλ¬Ό {
final void μ¨μ¬λ€() {
System.out.println("νΈν‘ μ€");
}
}
class ν¬μ λ₯ extends λλ¬Ό {
// μλ¬ λ°μ: Cannot override the final method from λλ¬Ό
/*
* void μ¨μ¬λ€() { System.out.println("νΈν‘ μ€"); }
*/
}
λ©μλκ° finalμ΄λ©΄ μ΅μ’ λ©μλμ΄λ―λ‘ μ€λ²λΌμ΄λ©μ κΈμ§νλ€.
instanceof μ°μ°μ
λ§λ€μ΄μ§ κ°μ²΄κ° νΉμ ν΄λμ€μ μΈμ€ν΄μ€μΈμ§ νμΈνλ μ°μ°μ
μ¬μ©λ°©λ² : `κ°μ²΄μ°Έμ‘°λ³μ instanceof ν΄λμ€λͺ `
class λλ¬Ό {
}
class μ‘°λ₯ extends λλ¬Ό {
}
class νκ· extends μ‘°λ₯ {
}
public class Driver {
public static void main(String[] args) {
λλ¬Ό λλ¬Όκ°μ²΄ = new λλ¬Ό();
λλ¬Ό μ‘°λ₯κ°μ²΄ = new μ‘°λ₯();
λλ¬Ό νκ·κ°μ²΄ = new νκ·();
System.out.println(λλ¬Όκ°μ²΄ instanceof λλ¬Ό);
System.out.println(μ‘°λ₯κ°μ²΄ instanceof λλ¬Ό);
System.out.println(μ‘°λ₯κ°μ²΄ instanceof μ‘°λ₯);
System.out.println(νκ·κ°μ²΄ instanceof λλ¬Ό);
System.out.println(νκ·κ°μ²΄ instanceof μ‘°λ₯);
System.out.println(νκ·κ°μ²΄ instanceof νκ·);
System.out.println(νκ·κ°μ²΄ instanceof Object);
}
}
μ€ν κ²°κ³Όλ λͺ¨λ μ°Έμ΄λ€.
νκ·κ°μ²΄ instanceof λλ¬Ό κ° μ°ΈμΈ μ΄μ λ "κ°μ²΄ μ°Έμ‘° λ³μ νμ "μ΄ μλ "μ€μ κ°μ²΄μ νμ "μ μν΄ μ²λ¦¬λκΈ° λλ¬Έμ΄λ€.
-> μ΄λ LSP(리μ€μ½ν μΉν λ²μΉ)μ μ΄κΈ°λ μ½λμμ μ£Όλ‘ λνλλ μ°μ°μμ΄λ€. (리ν©ν λ§μ λμ)
package ν€μλ
package ν€μλλ λ€μμ€νμ΄μ€(μ΄λ¦ 곡κ°)μ λ§λ€μ΄μ£Όλ μν
**νμμ±**
μ¬λ¬ κ°λ° μ‘°μ§μ΄ νλμ νλ‘μ νΈμ μ°Έκ°ν λ λ°μν μ μλ λ³μλͺ μ€λ³΅ λ¬Έμ λ₯Ό packageλ₯Ό ν΅ν΄ μ΄λ¦ 곡κ°μ λλμ΄ ν΄κ²°νλ€.
ex) packageλͺ .λ³μλͺ
interface ν€μλμ implements ν€μλ
- μΈν°νμ΄μ€λ public μΆμ λ©μλμ public μ μ μμλ§ κ°μ§ μ μλ€.
- default λ©μλ μΆκ°λ¨
interface Speakable {
double PI = 3.14159;
final double absoluteZeroPoint = -275.15;
void sayYes();
}
κ·ΈλΌ μμ μ½λμμ κ°μ²΄ λ³μ, μμ, μΌλ° λ©μλκ° μ‘΄μ¬νλλ° νλ¦° μ½λμΈκ°?
-> μλλ€. μλ° μΈμ΄ μ€κ³νμ λ°°λ €λ‘ μΈν°νμ΄μ€λ λ©μλμ μμ±μ μλμΌλ‘ abstract, public, static, finalμ λΆμ¬μ€λ€.
this ν€μλ
κ°μ²΄κ° μκΈ° μμ μ μ§μΉν λ μ°λ ν€μλ
class νκ· {
int var = 10;
void test() {
int var = 20;
System.out.println(var);
System.out.println(this.var);
}
}
public class Driver {
public static void main(String[] args) {
νκ· λ½λ‘λ‘ = new νκ·();
λ½λ‘λ‘.test();
}
}
μ μ½λλ₯Ό μ€ννκ² λλ©΄
System.out.println(var); λ λ½λ‘λ‘.test() μ§μλ³μκ° μλ μ€ννλ μμ varλ₯Ό μΆλ ₯νκ²λκ³
System.out.println(this.var); νκ· κ°μ²΄ λ³μλ μ§μλ³μμ μ΄λ¦μ΄ μ€λ³΅λλ―λ‘ this.varλΌκ³ μ§μ ν΄μ€μΌ νλ€.
- μ§μ λ³μμ μμ±μ μ΄λ¦μ΄ κ°μ κ²½μ° μ§μ λ³μκ° μ°μ νλ€.
- κ°μ²΄ λ³μμ μ΄λ¦μ΄ κ°μ μ§μ λ³μκ° μλ κ²½μ° κ°μ²΄ λ³μλ₯Ό μ¬μ©νλ €λ©΄ this μ λμ¬λ‘ μ¬μ©νλ€.
- μ μ λ³μμ μ΄λ¦μ΄ κ°μ μ§μ λ³μκ° μλ κ²½μ° μ μ λ³μλ₯Ό μ¬μ©νλ €λ©΄ ν΄λμ€λͺ μ μ λμ¬λ‘ μ¬μ©νλ€.
super ν€μλ
λ°λ‘ μ μμ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ§μΉνλ€.
class λλ¬Ό {
void method() {
System.out.println("λλ¬Ό");
}
}
class μ‘°λ₯ extends λλ¬Ό {
void method() {
super.method();
System.out.println("μ‘°λ₯");
}
}
class νκ· extends μ‘°λ₯ {
void method() {
super.method();
System.out.println("νκ·");
// Syntax error on token "super", Identifier expected
// super.super.method();
}
}
public class Driver {
public static void main(String[] args) {
νκ· λ½λ‘λ‘ = new νκ·();
λ½λ‘λ‘.method();
}
}
μ μ½λμ²λΌ super ν€μλλ₯Ό ν΅ν΄ μμ ν΄λμ€μ μΈμ€ν΄μ€ λ©μλλ₯Ό νΈμΆν μ μλ€.
νμ§λ§, super.super ννμ μμμ μμ ν΄λμ€μ μΈμ€ν΄μ€μλ μ κ·Όμ΄ λΆκ°λ₯νλ€...
μλΉ κ³ μλ₯Ό μν νλ§λ
κ°μ²΄ λ©μλλ₯Ό νΈμΆνλ©΄ κ°μ²΄λͺ .κ°μ²΄λ©μλ() κ° μλ ν΄λμ€λͺ .κ°μ²΄λ©μλ()κ° νΈμΆλλ€!
**μ΄μ **
νκ· κ°μ²΄κ° 100κ°μ΄μ μμ±λλ€κ³ κ°μ νλ©΄ heap μμμ νκ· κ°μ²΄κ° 100κ° μμ±λκ³ test()λ©μλκ° 100κ° μ΄μ μμ±λκ² λλ€.
κ°μ²΄ λ©€λ² λ©μλλ κ°μ²΄ λ©€λ²μ μμ±λ§ λ€λ₯Ό λΏ λλ¨Έμ§λ λͺ¨λ κ°λ€.
κ·Έλμ JVMμ μ§λ₯μ μΌλ‘ κ°μ²΄ λ©€λ² λ©μ€λλ₯Ό μ€νν± μμμ λ¨ νλλ§ λ³΄μ νκ² λλ€.
κ·Έλ¦¬κ³ test() λ©μλ νΈμΆ μ κ°μ²΄ μμ μ this κ°μ²΄ μ°Έμ‘° λ³μλ‘ λκΈ΄λ€. (κ°μ²΄ λ©€λ² μ 보 λκΉ)