μ±κΈν΄ ν¨ν΄ (Singleton pattern)
μ±κΈν΄ ν¨ν΄
μλ°λ‘ κ°λ°μ ν λ, νΉμ ν΄λμ€κ° λ€μμ μΈμ€ν΄μ€λ‘ μ¬λ¬ λ² μμ±λλ€λ©΄, λ¬Έμ κ° λ μ μλ€.
μλ°μμ μ΄λ₯Ό λμμΈ ν¨ν΄ μ€ νλμΈ μ±κΈν΄ ν¨ν΄(Singleton pattern)
μΌλ‘ λ°©μ§νλ€.
μ±κΈν΄ ν¨ν΄μ μ¬μ©
컀λ₯μ
ν, μ€λ λ νκ³Ό κ°μ μμμ μ¬μ©ν΄μΌ νλ ν΄λμ€λ€μ΄ μΈμ€ν΄μ€λ₯Ό μ¬λ¬ λ² λ§λ€λ©΄, μμμ λλΉκ° λκ³ , μμν μ μλ μ€λ₯κ° λ°μν μ μλ€.
μ±κΈν΄ ν¨ν΄μ μ μ©ν ν΄λμ€μλ, μμ±μμ μ μ½μ κ±Έμ΄μ νμν κ°μ²΄λ₯Ό νλλ§ λ§λ€λλ‘ νλ λμμΈ ν¨ν΄μ΄λ€.
μ±κΈν΄ ν¨ν΄μ κ·μΉ
μ±κΈν΄ ν¨ν΄μ ν΄λμ€λ₯Ό λ§λ€κΈ° μν΄μλ λ€μμ κ·μΉμ΄ μμ΄μΌ νλ€.
- μμ±μμ μ κ·Όμ μ΄μλ₯Ό privateλ‘ νμ¬ μΈλΆμμ μμ±νμ§ λͺ»νλλ‘ νλ€.
- νλλ§ μ‘΄μ¬νλ μΈμ€ν΄μ€λ₯Ό λ°νν μ μλ μ μ λ©μλλ₯Ό λ§λ€μ΄μΌ νλ€.
- νλλ§ μ‘΄μ¬νλ μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ μ μ μ°Έμ‘° λ³μλ₯Ό λ§λ€μ΄μΌ νλ€.
μ±κΈν΄ ν¨ν΄μ μ μ©ν ν΄λμ€
λ°μ΄ν° λ² μ΄μ€μ μ°κ²°νλ κ°μμ ν΄λμ€ SingletonExκ° μλ€κ³ νμ.
public class SingletonEx {
private SingletonEx() {};
// 1λ² κ·μΉ
static SingletonEx SingletonExInstance;
// 2λ² κ·μΉ
public static SingletonEx getInstance() {
// 3λ² κ·μΉ
if(SingletonExInstance == null) {
SingletonExInstance = new SingletonEx();
}
return SingletonExInstance;
}
}
μμ μμ ν μΈ κ°μ§ κ·μΉμ λν μ±κΈν΄ ν¨ν΄μ ν΄λμ€μ΄λ€.
κ·μΉμ λ°λΌ λ΄λΆ μ½λλ₯Ό νλνλ μ΄ν΄λ³΄μ.
private SingletonEx() {};
// 1λ² κ·μΉ
μμ±μμ μ κ·Όμ μ΄μλ₯Ό private
λ‘ νμ¬ μΈλΆμμ μΈμ€ν΄μ€λ₯Ό μμ±ν μ μλλ‘ λ§μλ¨λ€.
static SingletonEx SingletonExInstance;
// 2λ² κ·μΉ
μ μμΌλ‘ μ μΌνκ² μΈμ€ν΄μ€λ₯Ό μ°Έμ‘°ν μ μλ μ°Έμ‘° λ³μμ΄κΈ° λλ¬Έμ μ μ μΌλ‘ μ μΈνλ€.
public static SingletonEx getInstance() {
// 3λ² κ·μΉ
if(SingletonExInstance == null) {
SingletonExInstance = new SingletonEx();
}
return SingletonExInstance;
}
μ μ μ°Έμ‘° λ³μλ₯Ό λ°νν μ μ λ©μλμ΄λ€.
ifλ¬Έμ μ€λͺ
νμλ©΄, μ΅μ΄λ‘ λ©μλλ₯Ό νΈμΆνμ λ λΉμ°ν μ±κΈν΄ ν¨ν΄μ μΈμ€ν΄μ€λ μμ κ²μ΄κΈ° λλ¬Έμ,SingletonExInstanceμ΄ nullμΈμ§?
λ‘ κ·Έ μ 무λ₯Ό νλ¨νκ³ μΈμ€ν΄μ€κ° μλ€λ©΄, privateν μμ±μλ₯Ό ν΅ν΄ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄μ€λ€.
μ μΌν μΈμ€ν΄μ€κ° μ‘΄μ¬νλ μνλΌλ©΄ μ μ μ°Έμ‘° λ³μλ₯Ό returnμΌλ‘ λ°ννλ€.
Test μ½λ
public class SingletonTest {
public static void main(String[] args) {
//SingletonEx exam1 = new SingletonEx();
//The constructor SingletonEx() is not visible
SingletonEx exam2 = SingletonEx.getInstance();
SingletonEx exam3 = SingletonEx.getInstance();
SingletonEx exam4 = SingletonEx.getInstance();
System.out.println(exam2);
System.out.println(exam3);
System.out.println(exam4);
}
}
//SingletonEx exam1 = new SingletonEx();
//The constructor SingletonEx() is not visible
SingletonEx exam1 = new SingletonEx();
λΌλ μ½λλ,The constructor SingletonEx() is not visible
λΌκ³ λμ¨λ€.
μ±κΈν΄ ν¨ν΄ μ μ©μ μν΄ μμ±μλ₯Ό privateμΌλ‘ λ§μλμκΈ° λλ¬Έμ΄λ€.
SingletonEx exam2 = SingletonEx.getInstance();
SingletonEx exam3 = SingletonEx.getInstance();
SingletonEx exam4 = SingletonEx.getInstance();
System.out.println(exam2);
System.out.println(exam3);
System.out.println(exam4);
getInstance()
λ μ μ λ©μλμμΌλ‘, ν΄λμ€λͺ
.getInstance()λ‘ νΈμΆνμκ³ ,System.out.println(...)
μ λν κ²°κ³Όλ λͺ¨λ λμΌν ν΄λμ€μ ν΄μ¬ μ½λκ°μ΄ λμ€λ κ±Έ μ μ μλ€.
μ£Όμμ¬ν
μ±κΈν΄ ν¨ν΄μΌλ‘ λ§λ€μ΄μ§ λ¨μΌ κ°μ²΄λ μ μμμ 곡μ ν μ μλ λ³μμ΄κΈ° λλ¬Έμ, μμ±μ κ°μ§ μλ κ²μ΄ μ’λ€.
νμ§λ§ μ½κΈ° μ μ©μΌλ‘ μμ±μ κ°λ κ²μ λ¬Έμ κ° λμ§ μλλ€.