6-5ν΄λμ€(μΈμ€ν΄μ€ λ©€λ²μ μ μ λ©€λ²)
μΈμ€ν΄μ€ λ©€λ² : μΈμ€ν΄μ€ λ©€λ²λ κ°μ²΄(μΈμ€ν΄μ€)λ₯Ό μμ±ν ν μ¬μ©ν μ μλ νλμ λ©μλλ₯Ό λ§νλλ°, μ΄λ€μ κ°κ° μΈμ€ν΄μ€ νλ, μΈμ€ν΄μ€ λ©μλλΌκ³ λΆλ₯Έλ€. μΈμ€ν΄μ€ νλμ λ©μλλ κ°μ²΄μ μμλ λ©€λ²μ΄κΈ° λλ¬Έμ κ°μ²΄ μμ΄λ μ¬μ©ν μ μλ€.
this : κ°μ²΄ μΈλΆμμ μΈμ€ν΄μ€ λ©€λ²μ μ κ·ΌνκΈ° μν΄ μ°Έμ‘° λ³μλ₯Ό μ¬μ©νλ κ²κ³Ό λ§μ°¬κ°μ§λ‘ κ°μ²΄ λ΄λΆμμλ μΈμ€ν΄μ€ λ©€λ²μ μ κ·ΌνκΈ° μν΄ thisλ₯Ό μ¬μ©ν μ μλ€. μ°λ¦¬κ° μμ μ 'λ'λΌκ³ κ°λ¦¬ν€λ―μ΄ κ°μ²΄λ μμ μ thisλΌκ³ νλ€. λ°λΌμ this.modelμ μμ μ΄ κ°μ§κ³ μλ model νλλΌλ λ»μ΄λ€. thisλ μ£Όλ‘ μμ±μμ λ©μλμ λ§€κ° λ³μ μ΄λ¦μ΄ νλμ λμΌν κ²½μ°, μΈμ€ν΄μ€ λ©€λ²μΈ νλμμ λͺ μνκ³ μ ν λ μ¬μ©λλ€.
ex)
Car(String model) {
this.model = model;
}
void setModel(String model){
this.model = model;
}
μ μ λ©€λ²(static) : μ μ μ 'κ³ μ λ'μ΄λ μλ―Έμ΄λ€. μ μ λ©€λ²λ ν΄λμ€μ κ³ μ λ λ©€λ²λ‘μ κ°μ²΄λ₯Ό μμ±νμ§ μκ³ μ¬μ©ν μ μλ νλμ λ©μλλ₯Ό λ§νλ€. μ΄λ€μ κ°κ° μ μ νλ, μ μ λ©μλλΌκ³ λΆλ₯Έλ€.
μ μ λ©€λ² μ μΈ: μ μ νλμ μ μ λ©μλλ₯Ό μ μΈνλ €λ©΄ νλμ λ©μλ μ μΈ μ static ν€μλλ₯Ό μΆκ°μ μΌλ‘ λΆμ΄λ©΄ λλ€.
μ μ λ©€λ² μ¬μ©
ex)
public class Calculator {
static double pi = 3.14159;
static int plus(int x, int y) {...}
static int minus(int x, int y) {...}
}
μ μ νλ piμ μ μ λ©μλ plus(), minus()λ λ€μκ³Ό κ°μ΄ μ¬μ©ν μ μλ€.
double result1 = 10 * 10 * Calcultor.pi;
int result2 = Calculator.plus(10, 5);
int result3 = Calculator.minus(10, 5);
μ μ νλμ μ μ λ©μλλ μμΉμ μΌλ‘ μμ²λΌ ν΄λμ€ μ΄λ¦μΌλ‘ μ κ·Όν΄μΌ νμ§λ§ λ€μκ³Ό κ°μ΄ κ°κ²£ μ°Έμ‘° λ³μλ‘λ κ°λ₯νλ€.
Calculator myCalcu = new Calculator();
double result1 = 10 * 10 * myCalcu.pi;
int result2 = myCalcu.plus(10, 5);
int result3 = myCalcu.minus(10, 5);
νμ§λ§, μ μ μμλ ν΄λμ€ μ΄λ¦μΌλ‘ μ κ·Όνλ κ²μ΄ μ’λ€.
μ μ λ©μλ μ μΈ μ μ£Όμν μ
κ°μ²΄κ° μμ΄λ μ€νλλ€λ νΉμ§ λλ¬Έμ μ μ λ©μλλ₯Ό μ μΈν λλ μ΄λ€ λ΄λΆμ μΈμ€ν΄μ€ νλλ μΈμ€ν΄μ€ λ©μλλ₯Ό μ¬μ©ν μ μλ€. λν κ°μ²΄ μμ μ μ°Έμ‘°μΈ this ν€μλλ μ¬μ©μ΄ λΆκ°λ₯νλ€.
public class ClassName {
//μΈμ€ν΄μ€ νλμ λ©μ
int field1;
void method1() {...}
//μ μ νλμ λ©μλ
static int field2;
static void method2() {...}
//μ μ λ©μλ
static void method3() {
this.field1 = 10; //(x)
this.method1() //(x)
field2 = 10;//(o) --> κ°μ staticμ κ°μ classμΌ κ²½μ° λ°λ‘ μ¬μ©κ°λ₯
method2();//(o)
}
}
μ μ λ©μλμμ μΈμ€ν΄μ€ λ©€λ²λ₯Ό μ¬μ©νκ³ μΆλ€λ©΄ λ€μκ³Ό κ°μ΄ κ°μ²΄λ₯Ό λ¨Όμ μμ±νκ³ μ°Έμ‘° λ³μλ‘ μ κ·Όν΄μΌ νλ€.
static void method3() {
ClassName obj = new ClassName();
obj.field1 = 10;
obj.method1();
}
μ±κΈν€
κ°λ μ 체 νλ‘κ·Έλ¨μμ λ¨ νλμ κ°μ²΄λ§ λ§λ€λλ‘ λ³΄μ₯ν΄μΌ νλ κ²½μ°κ° μλ€. λ¨ νλλ§ μμ±λλ€κ³ ν΄μ μ΄ κ°μ²΄λ₯Ό μ±ν΄ν€μ΄λΌκ³ νλ€.
μ±κΈν€μ λ§λ€λ €λ©΄ ν΄λμ€ μΈλΆμμ new μ°μ°μλ‘ μμ±μλ₯Ό νΈμΆν μ μλλ‘ λ§μμΌ νλ€. μμ±μλ₯Ό μΈλΆμμ νΈμΆν μ μλλ‘ νλ €λ©΄ μμ±μ μμ private μ κ·Ό μ νμλ₯Ό λΆμ¬μ£Όλ©΄ λλ€.
κ·Έλ¦¬κ³ μμ μ νμ μΈ μ μ νλλ₯Ό νλ μ μΈνκ³ μμ μ κ°μ²΄λ₯Ό μμ±ν΄ μ΄κΈ°ννλ€. μ°Έκ³ λ‘ ν΄λμ€ λ΄λΆμμλ new μ°μ°μλ‘ μμ±μ νΈμΆμ΄ κ°λ₯νλ€. μ μ νλλ private μ κ·Ό μ νμλ₯Ό λΆμ¬ μΈλΆμμ νλκ°μ λ³κ²½νμ§ λͺ»νλλ‘ λ§λλ€. λμ μΈλΆμμ νΈμΆν μ μλ μ μ λ©μλμΈ getInstance()λ₯Ό μ μΈνκ³ μ μ νλμμ μ°Έμ‘°νκ³ μλ μμ μ κ°μ²΄λ₯Ό 리ν΄ν΄μ€λ€.
ex)
//μ μ νλ
private static ν΄λμ€ singleton = new ν΄λμ€();
//μμ±μ
pirvate ν΄λμ€() {}
//μ μ λ©μλ
static ν΄λμ€ getInstance() {
return singleton;
}
μ΄λ κ² νλ©΄
ν΄λμ€ λ³μ1 = ν΄λμ€.getInstance();
ν΄λμ€ λ³μ2 = ν΄λμ€.getInstance();
μμ, λ³μ1 μ΄λ λ³μ2 λ λμΌν κ°μ²΄λ₯Ό μ°Έμ‘°νλ€.
final νλμ μμ
final νλ : finalμ 'μ΅μ’ μ 'μ΄λ λ»μ κ°μ§κ³ μλ€. κ·Έλ λ€λ©΄ final νλλ μ΅μ’ μ μΈ νλλ λ»μΈλ°, final νλλ μ΄κΈ°κ°μ΄ μ μ₯λλ©΄ μ΄κ²μ΄ μ΅μ’ μ μΈ κ°μ΄ λμ΄μ νλ‘κ·Έλ¨ μ€ν λμ€μ μμ ν μ μλ€λ κ²μ΄λ€.
μμ: μΌλ°μ μΌλ‘ λΆλ³μ κ°μ μμ(static final)λΌκ³ λΆλ₯Έλ€. λΆλ³μ κ°μ μνμμ μ¬μ©λλ μμ£Όμ¨ νμ΄λ μ§κ΅¬μ λ¬΄κ² λ° λλ λ±μ΄ ν΄λΉλλ€. μ΄λ° λΆλ³μ κ°μ μ μ₯νλ νλλ₯Ό μλ°μμλ μμ(constant)λΌκ³ νλ€.
final νλλ ν λ² μ΄κΈ°ν λλ©΄ μμ ν μ μλ νλμ΄μ§λ§, μμκ° μλ μ΄μ λ μμλ λΆλ³μ κ°μ΄λ©°, κ°μ²΄λ§λ€ μ μ₯ν νμκ° μλ 곡μ©μ±μ λ κ³ μμΌλ©°, μ¬λ¬ κ°μ§ κ°μΌλ‘ μ΄κΈ°νλ μ μκΈ° λλ¬Έμ΄λ€.
κ·Έλμ μμλ staticμ΄λ©΄μ finalμ΄μ΄μΌ νλ€. static final νλλ κ°μ²΄λ§λ€ μ‘΄μ¬νμ§ μκ³ ν΄λμ€μλ§ μ‘΄μ¬νλ€. κ·Έλ¦¬κ³ ν λ² μ΄κΈ°κ°μ΄ μ μ₯λλ©΄ λ³κ²½ν μ μλ€.
*μμ μ΄λ¦μ λͺ¨λ λλ¬Έμλ‘ μμ±νλ κ²μ΄ κ΄λ‘μ΄λ€. λ§μ½ μλ‘ λ€λ₯Έ λ¨μ΄κ° νΌν©λ μ΄λ¦μ΄λΌλ©΄ μΈλλ°(_)λ‘ λ¨μ΄λ€μ μ°κ²°ν΄μ€λ€.