Singleton Pattern
Singleton Pattern
Definition
μ ν리μΌμ΄μ μ΄ μμλ λ, μ΄λ€ ν΄λμ€κ° μ΅μ΄ ν λ²λ§ λ©λͺ¨λ¦¬λ₯Ό ν λΉ(static)νκ³ ν΄λΉ λ©λͺ¨λ¦¬μ μΈμ€ν΄μ€λ₯Ό λ§λ€μ΄ μ¬μ©νλ ν¨ν΄.
μ½κ² μκΈ°νλ©΄ μ±κΈν€ ν¨ν΄μ νλμ μΈμ€ν΄μ€λ§ μμ±νμ¬ μ¬μ©νλ λμμΈ ν¨ν΄,
μ¦, κ°μ²΄μ μΈμ€ν΄μ€κ° μ€μ§ 1κ°λ§ μμ±λλ ν¨ν΄μ μλ―Ένλ€.
μ±κΈν€ ν¨ν΄μ ꡬννλ λ°©λ²μ μ¬λ¬ κ°μ§κ° μμ§λ§, κ°μ²΄λ₯Ό 미리 μμ±ν΄λκ³ κ°μ Έμ€λ λ°©λ²μ΄ κ°μ₯ λ¨μνκ³ μμ νλ€.
Example
Java
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
// ...
}
public static Singleton getInstance() {
return instance;
}
public void say() {
System.out.println("hi, there");
}
}Golang
μΈμ€ν΄μ€κ° νμν λ, λκ°μ μΈμ€ν΄μ€λ₯Ό λ§λ€μ§ μκ³ κΈ°μ‘΄μ μΈμ€ν΄μ€λ₯Ό νμ©.
Why Singleton Pattern ?
μ΄λ κ² μΈμ€ν΄μ€λ₯Ό μ€μ§ ν κ°λ‘λ§ κ°μ Έκ°κ² λλ©΄ λͺ κ°μ§ μ΄μ μ΄ μλ€.
1. λ©λͺ¨λ¦¬ μΈ‘λ©΄
μ΅μ΄ νλ²λ§ κ³ μ λ λ©λͺ¨λ¦¬ μμμ μ¬μ©νκΈ° λλ¬Έμ μΆν ν΄λΉ κ°μ²΄μ μ κ·Όν λ λ©λͺ¨λ¦¬ λλΉλ₯Ό λ°©μ§ν μ μλ€.
λν μ΄λ―Έ μμ±λ μΈμ€ν΄μ€λ₯Ό νμ©νλ μλ μΈ‘λ©΄μμλ μ΄μ μ΄ μλ€κ³ λ³Ό μ μλ€.
2. 곡μ μ μ΄μ
μ±κΈν€ μΈμ€ν΄μ€λ μ μμΌλ‘ μ¬μ©λκΈ° λλ¬Έμ μλ‘ λ€λ₯Έ κ°μ²΄κ°μ λ°μ΄ν° 곡μ κ° μ½λ€.
νμ§λ§ μ¬λ¬ κ°μ²΄μ μΈμ€ν΄μ€μμ μ±κΈν΄ μΈμ€ν΄μ€μ λ°μ΄ν°μ λμμ μ κ·Όνκ² λλ©΄ λμμ± λ¬Έμ κ° λ°μν μ μμ΄μ μ΄ μ μ μ μν΄μΌνλ€.
λ³΄ν΅ μ±κΈν€ ν¨ν΄μ 곡ν΅λ κ°μ²΄λ₯Ό μ¬λ¬ κ° μμ±ν΄μ μ¬μ©ν΄μΌ νλ μν©,
μλ₯Ό λ€λ©΄ λ°μ΄ν°λ² μ΄μ€μ 컀λ₯μ ν, μ€λ λ ν, μΊμ, λ‘κ·Έ κΈ°λ‘ κ°μ²΄ λ±μ λ§μ΄ μ¬μ©νλ€.
μ΄ μΈμλ λλ©μΈ κ΄μ μμ μΈμ€ν΄μ€κ° ν κ°λ§ μ‘΄μ¬νλ κ²μ 보μ¦νκ³ μΆμ κ²½μ° μ±κΈν€ ν¨ν΄μ μ¬μ©νκΈ°λ νλ€.
Problems
μ±κΈν€ ν¨ν΄μ μ μ©νλ©΄ μμ κ°μ ν¨μ¨μ μΈ μΈ‘λ©΄μμμ μ΄μ μ΄ μμ§λ§, λ€μκ³Ό κ°μ λ¬Έμ μ μ΄ λ°μν μ μλ€.
κ°λ°μλ μ΄λ¬ν λ¬Έμ μ κ³Ό μ΄μ μ trade-offλ₯Ό μ κ³ λ €ν΄μΌνλ€.
κ°λ°©-νμ μμΉ μλ°°
λ§μ½ μ±κΈν€ μΈμ€ν΄μ€κ° νΌμ λ무 λ§μ μΌμ νκ±°λ, λ§μ λ°μ΄ν°λ₯Ό 곡μ μν€λ©΄ λ€λ₯Έ ν΄λμ€λ€ κ°μ κ²°ν©λκ° λμμ§κ² λλλ°, μ΄λ κ°λ°©-νμ μμΉμ΄ μλ°°λλ€.
κ²°ν©λκ° λμμ§λ©΄ μ μ§λ³΄μκ° νλ€κ³ ν μ€νΈλ μννκ² μ§ννκΈ° νλ€λ€.
λμμ± λ¬Έμ
μ μ ν©ν 리 λ©μλμμ κ°μ²΄ μμ±μ νμΈνκ³ μμ±μλ₯Ό νΈμΆνλ κ²½μ°μ, λ©ν°μ€λ λ νκ²½μμλ λμμ± λ¬Έμ κ° λ°μν μ μλ€.
λ©ν° μ€λ λ νκ²½μμ λκΈ°ν μ²λ¦¬λ₯Ό νμ§ μμλ€λ©΄ μΈμ€ν΄μ€κ° 2κ°κ° μμ±λλ λ¬Έμ λ λ°μν μ μλ€.
μ΄λ¬ν λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄μ λκΈ°ν μ²λ¦¬λ₯Ό νλ€λ©΄ ν¨μ¨ μ ν λ° μΆκ°μ μΈ μ½λ μμ±μ΄ λ°μνλ€.
Last updated