π€μ±κΈν€ ν΄λμ€(Singleton Class) : μ±κΈν€ λμμΈ ν¨ν΄μ μ μ©νμ¬ μμ±λ ν΄λμ€
=> νλ‘κ·Έλ¨μ κ°μ²΄λ₯Ό νλλ§ μ 곡νκΈ° μν λͺ©μ μ ν΄λμ€λ₯Ό μμ±νκΈ° μν΄ μ¬μ©
=> νλ‘κ·Έλ¨μ λΆνμν κ°μ²΄κ° μ¬λ¬κ° μμ±λλ κ²μ λ°©μ§νκΈ° μν λμμΈ ν¨ν΄
=> μΌλ°μ μΌλ‘ λ°μ΄ν°λ₯Ό μ²λ¦¬νλ κΈ°λ₯μ λ©μλλ§ μμ±λ ν΄λμ€λ₯Ό μ μΈν κ²½μ° μ±κΈν€ λμμΈ ν¨ν΄μ μ μ©νμ¬ ν΄λμ€ μ μΈνλ κ²μ κΆμ₯
β«μ±κΈν€ ν¨ν΄μ μ¬μ©νλ μ΄μ
GPTμκ² λ¬Όμ΄λ³΄λ μ±κΈν€ ν¨ν΄μ μ¬μ©νλ μ΄μ λ μλμ κ°μ.
- μμ 곡μ : μ¬λ¬ κ³³μμ νλμ μΈμ€ν΄μ€λ₯Ό 곡μ νκ³ μ ν λ μ¬μ©λ©λλ€. μλ₯Ό λ€μ΄, λ°μ΄ν°λ² μ΄μ€ μ°κ²°, λ‘κΉ , μ€μ κ΄λ¦¬ λ±μ 곡ν΅λ μμμ λν μ κ·Όμ ν΅μΌμν¬ μ μμ΅λλ€.
- μ μ μν μ μ§: μ΄ν리μΌμ΄μ λ΄μμ 곡μ ν΄μΌ νλ μ μ μνλ₯Ό μ μ§νκ³ κ΄λ¦¬ν λ μ μ©ν©λλ€.
- μμ μ μ½: μ¬λ¬ μΈμ€ν΄μ€λ₯Ό μμ±νλ κ²μ΄ λΉν¨μ¨μ μ΄κ±°λ λΆμ μ ν κ²½μ°, λ©λͺ¨λ¦¬λ₯Ό μ μ½ν μ μμ΅λλ€.
β«μ±κΈν€ ν΄λμ€ μμ±λ²
1) ν΄λμ€λ‘ μμ±λ κ°μ²΄λ₯Ό μ μ₯νκΈ° μν νλ μμ±
=> static μ νμλ₯Ό μ¬μ©νμ¬ μ μ νλλ‘ μμ±
*μμ€ν
νλ : ν΄λμ€ λ΄λΆμμλ§ μ¬μ©ν λͺ©μ μ νλ
=> Getter λ©μλ λ° Setter λ©μλλ₯Ό μμ±νμ§ μλ νλ
// => μΌλ°μ μΈ νλμ ꡬλΆνκΈ° μν΄ νλλͺ μ [_]λ‘ μμλλλ‘ μμ±νλ κ²μ κΆμ₯
private static Singleton _instance;
2) μμ±μλ private μ κ·Ό μ νμλ₯Ό μ¬μ©νμ¬ μλνλλλ‘ μμ±
=> ν΄λμ€ μΈλΆμμ new μ°μ°μλ‘ μμ±μλ₯Ό νΈμΆν΄ κ°μ²΄λ₯Ό μμ±νμ§ λͺ»νλλ‘ μλν μ²λ¦¬
private Singleton() {
}
3) μλμ κ°μ΄ μ μ μμ μμ new μ°μ°μλ‘ ν΄λμ€μ μμ±μλ₯Ό νΈμΆνμ¬ κ°μ²΄λ₯Ό μμ±νμ¬ νλμ μ μ₯
μ μ μμ(Static Block) : ν΄λμ€λ₯Ό μ½μ΄ λ©λͺ¨λ¦¬(MethodArea)μ μ μ₯λ ν μλμΌλ‘ μ€νλ λͺ
λ Ήμ μμ±νκΈ° μν μμ
=> νλ‘κ·Έλ¨μμ λ©λͺ¨λ¦¬(MethodArea)μ ν΄λμ€λ₯Ό μ μ₯ν ν νλ²λ§ μ€νλλ λͺ
λ Ή
=> μ μ νλ λ° μ μ λ©μλλ§ μ¬μ© κ°λ₯
static {
_instance=new Singleton();
}
4) νλμ μ μ₯λ κ°μ²΄λ₯Ό λ°ννλ λ©μλ μμ±
=> ν΄λμ€λ‘ λ©μλλ₯Ό νΈμΆν μ μλλ‘ μ μ λ©μλλ‘ μμ±
public static Singleton getInstance() {
return _instance;
}
5) μΈμ€ν΄μ€ λ©μλ μμ±
=> κΈ°ν νμν λ©μλλ€ μμ±νλ©΄ λ¨. display()λΌλ λ©μλλ μ±κΈν€ ν΄λμ€κ° μ΄λ»κ² μλνλμ§ λ³΄κΈ° μν λ©μλ
public void display() {
System.out.println("Singleton ν΄λμ€μ display() λ©μλ νΈμΆ");
}
β«μ±κΈν€ ν΄λμ€λ₯Ό μ€ννκΈ° μν Singleton App Class μ΄ν΄λ³΄κΈ°
1) λ¨Όμ new μ°μ°μλ‘ μμ±μλ₯Ό νΈμΆνμ¬ κ°μ²΄ μμ±ν΄λ΄
=> λΉμ°ν μλ¬ λ¨μ΄μ§. μμ±μκ° private μ νμλ₯Ό μ¬μ©νμ¬ μλν μ²λ¦¬λμ΄ μμΌλκΉ
2) μ±κΈν€ ν΄λμ€λ κ°μ²΄λ₯Ό λ°ννλ μ μ λ©μλλ₯Ό ν΄λμ€λ‘ νΈμΆνμ¬ κ°μ²΄λ₯Ό λ°νλ°μ μ°Έμ‘°λ³μμ μ μ₯ν μ μμ
=> μ μ λ©μλλ₯Ό νΈμΆνλ©΄ ν΄λμ€ λ΄λΆμ 미리 μμ±λ νλμ κ°μ²΄λ§μ μ 곡λ°μ λ°ν
=> κ·Έλ¬λ―λ‘ μ μ½λλ₯Ό μ€ννλ©΄ μλμ κ°μ΄ singleton 1μ΄λ singleton2λ κ°μ μ£Όμλ₯Ό μ°Έμ‘°νλ κ²μ μ μ μμ
singleton1 = oop.Singleton@6f2b958e
singleton2 = oop.Singleton@6f2b958e
Singleton ν΄λμ€μ display() λ©μλ νΈμΆ
Singleton ν΄λμ€μ display() λ©μλ νΈμΆ
3)μ±κΈν€ ν΄λμ€λ μ°Έμ‘°λ³μμ κ°μ²΄λ₯Ό μ μ₯νμ¬ λ©μλλ₯Ό νΈμΆνμ§ μκ³ κ°μ²΄λ₯Ό λ°ννλ λ©μλλ₯Ό νΈμΆν΄ κ°μ²΄λ₯Ό λ°ν λ°μ ν μ§μ λ©μλλ₯Ό νΈμΆνμ¬ μ¬μ©
=> 2λ² λ°©λ²λ³΄λ€ μ΄κ² μ½λκ° κ°κ²°ν΄μ§λκΉ μ’μ
Singleton.getInstance().display();
=>μ μ½λ μ€ννλ©΄ μλμ κ°μ΄ 2λ²μμ νΈμΆν κ²κ³Ό λκ°μ κ²°κ³Όκ° μΆλ ₯λλ κ²μ λ³Ό μ μμ
Singleton ν΄λμ€μ display() λ©μλ νΈμΆ
μ μ€μ΅ μ½λ μ 체π©π»
package oop;
public class Singleton {
//ν΄λμ€λ‘ μμ±λ κ°μ²΄λ₯Ό μ μ₯νκΈ° μν νλ μμ±
// => static μ νμλ₯Ό μ¬μ©νμ¬ μ μ νλλ‘ μμ±
//μμ€ν
νλ : ν΄λμ€ λ΄λΆμμλ§ μ¬μ©ν λͺ©μ μ νλ
// => Getter λ©μλ λ° Setter λ©μλλ₯Ό μμ±νμ§ μλ νλ
// => μΌλ°μ μΈ νλμ ꡬλΆνκΈ° μν΄ νλλͺ
μ [_]λ‘ μμλλλ‘ μμ±νλ κ²μ κΆμ₯
private static Singleton _instance;
//μμ±μλ private μ κ·Ό μ νμλ₯Ό μ¬μ©νμ¬ μλνλλλ‘ μμ±
// => ν΄λμ€ μΈλΆμμ new μ°μ°μλ‘ μμ±μλ₯Ό νΈμΆν΄ κ°μ²΄λ₯Ό μμ±νμ§ λͺ»νλλ‘ μλν μ²λ¦¬
private Singleton() {
}
//μ μ μμ(Static Block) : ν΄λμ€λ₯Ό μ½μ΄ λ©λͺ¨λ¦¬(MethodArea)μ μ μ₯λ ν μλμΌλ‘ μ€νλ
//λͺ
λ Ήμ μμ±νκΈ° μν μμ
// => νλ‘κ·Έλ¨μμ λ©λͺ¨λ¦¬(MethodArea)μ ν΄λμ€λ₯Ό μ μ₯ν ν νλ²λ§ μ€νλλ λͺ
λ Ή
// => μ μ νλ λ° μ μ λ©μλλ§ μ¬μ© κ°λ₯
static {
//new μ°μ°μλ‘ ν΄λμ€μ μμ±μλ₯Ό νΈμΆνμ¬ κ°μ²΄λ₯Ό μμ±νμ¬ νλμ μ μ₯
// => νλ‘κ·Έλ¨ μ€ν
_instance=new Singleton();
}
//νλμ μ μ₯λ κ°μ²΄λ₯Ό λ°ννλ λ©μλ
// =>ν΄λμ€λ‘ λ©μλλ₯Ό νΈμΆν μ μλλ‘ μ μ λ©μλλ‘ μμ±
public static Singleton getInstance() {
return _instance;
}
//μΈμ€ν΄μ€ λ©μλ μμ±
public void display() {
System.out.println("Singleton ν΄λμ€μ display() λ©μλ νΈμΆ");
}
}
package oop;
public class SingletonApp {
public static void main(String[] args) {
/*
//new μ°μ°μλ‘ μμ±μλ₯Ό νΈμΆνμ¬ κ°μ²΄λ₯Ό μμ±ν΄ μ°Έμ‘°λ³μμ μ μ₯
// => κ°μ²΄λ₯Ό μ¬λ¬ κ° μμ±νμ¬ μ°Έμ‘°λ³μμ λ°λ‘ μ μ₯νμ¬ μ°Έμ‘°λ³μλ‘ κ°μ²΄λ₯Ό μ°Έμ‘°ν΄ λ©μλ νΈμΆ
Singleton singleton1=new Singleton();
Singleton singleton2=new Singleton();
System.out.println("singleton1 = "+singleton1);
System.out.println("singleton2 = "+singleton2);
singleton1.display();
singleton2.display();
*/
//μ±κΈν€ ν΄λμ€λ μμ±μκ° μλν μ²λ¦¬λμ΄ new μ°μ°μλ‘ μμ±μλ₯Ό νΈμΆν΄ κ°μ²΄ μμ± λΆκ°
//Singleton singleton1=new Singleton();
//μ±κΈν€ ν΄λμ€λ κ°μ²΄λ₯Ό λ°ννλ μ μ λ©μλλ₯Ό ν΄λμ€λ‘ νΈμΆνμ¬ κ°μ²΄λ₯Ό λ°νλ°μ
//μ°Έμ‘°λ³μμ μ μ₯
// => μ μ λ©μλλ₯Ό νΈμΆνλ©΄ ν΄λμ€ λ΄λΆμ 미리 μμ± νλμ κ°μ²΄λ§μ μ 곡λ°μ λ°ν
Singleton singleton1=Singleton.getInstance();
Singleton singleton2=Singleton.getInstance();
System.out.println("singleton1 = "+singleton1);
System.out.println("singleton2 = "+singleton2);
singleton1.display();
singleton2.display();
System.out.println("==============================================================");
//μ±κΈν€ ν΄λμ€λ μ°Έμ‘°λ³μμ κ°μ²΄λ₯Ό μ μ₯νμ¬ λ©μλλ₯Ό νΈμΆνμ§ μκ³
//κ°μ²΄λ₯Ό λ°ννλ λ©μλλ₯Ό νΈμΆν΄ κ°μ²΄λ₯Ό λ°ν λ°μ ν μ§μ λ©μλλ₯Ό νΈμΆνμ¬ μ¬μ©
Singleton.getInstance().display();
//Singleton.getInstance().display();
System.out.println("==============================================================");
}
}
'Backend > Java' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] throwsμ throwμ μ°¨μ΄ (0) | 2024.02.23 |
---|---|
[Java]λ°νμ ν΄λμ€(Runtime Class) (0) | 2024.01.25 |
[Java]OOP - κΈ°νμ νμ - (2) final & abstract (1) | 2024.01.03 |
[Java]OOP-ν΄λμ€μ ν΄λμ€μ κ΄κ³ & Car κ°μ²΄ ꡬν μμ (1) | 2023.12.28 |
[Java]OOP-member ν΄λμ€ (2) | 2023.12.27 |