μ€μ§ ν κ°μ ν΄λμ€ μΈμ€ν΄μ€λ§μ κ°λλ‘ λ³΄μ₯ νκ³ , μ΄μ λν μ μμ μΈ μ κ·Όμ μ μ 곡 νλ ν¨ν΄
μ΄λ€ ν΄λμ€λ μ νν νλμ μΈμ€ν΄μ€λ§μ κ°λλ‘ νλ κ²μ΄ μ’μ μ μλ€. μμ€ν μ λ§μ νλ¦°ν°κ° μμ΄λ νλ¦°ν° μ€νμ μ€μ§ νλμ¬μΌ νκ³ , νμ¬μμλ ν κ°μ§μ νκ³ μμ€ν μΌλ‘ μ΄μμ΄ λμ΄μΌ νλ€.
κ·Έλ λ€λ©΄ μ΄λ»κ² ν΄μΌ ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό νλλ§ λ§λ€κ³ , μ½κ² μ κ·Όν μ μμκΉ? μ μλ³μλ₯Ό μ΄μ©ν΄μ κ°μ²΄μ μ κ·Όνλλ‘ νλ©΄ κ°λ₯μ νλ€.
κ·Έλ¬λ λ μ’μ λ°©λ²μ ν΄λμ€ μ체μ μΌλ‘ μ μΌν μΈμ€ν΄μ€λ‘ μ κ·Όν μ μλ λ°©λ²μ μ 곡νλκ²μ΄ μ’μ΅λλ€. μ΄ ν΄λμ€λ λ λ€λ₯Έ μΈμ€ν΄μ€κ° μμ±λμ§ μλλ‘ ν μ μκ³ (μλ‘μ΄ ν΄λμ€ μμ±μ λν μμ²μ κ°λ‘μ±λ λ°©λ²), ν΄λμ€ μμ μ΄ κ·Έ μΈμ€ν΄μ€μ λν΄ μ κ·Ό λ°©λ²μ μ 곡 ν μ μλ€. μ΄λ₯Ό κ°λ₯΄μΌ λ¨μΌμ²΄ν¨ν΄(Singleton Pattern) μ΄λΌκ³ νλ€.
- ν΄λμ€μ μΈμ€ν΄μ€κ° μ€μ§ νλμ¬μΌ ν¨μ 보μ₯νκ³ , μ μ μλ μ κ·Όμ (Access Point) μΌλ‘ λͺ¨λ μ¬μ©μκ° μ κ·Όν μ μλλ‘ ν΄μΌ ν λ
- μ μΌν μΈμ€ν΄μ€κ° μλΈν΄λμ±μΌλ‘ νμ₯λμ΄μΌ νλ©°, μ¬μ©μλ μ½λμ μμ μμ΄ νμ₯λ μλΈν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ¬μ©ν μ μμ΄μΌ ν λ
- μΈμ€ν΄μ€κ° μ μΌν΄μΌ ν¨μ 보μ₯ν©λλ€.
- Singleton ν΄λμ€λ₯Ό μλΈν΄λμ±ν©λλ€.
object ObjectPrinter {
fun printWithAddress(text: String) = println("$text $this")
}
class ClassPrinter private constructor() {
fun printWithAddress(text: String) = println("$text $this")
companion object {
@Volatile
private var instance: ClassPrinter? = null
fun getInstance(): ClassPrinter = instance ?: synchronized(this) {
instance ?: ClassPrinter().also {
instance = it
}
}
}
}
fun main() {
ObjectPrinter.printWithAddress("Hello") // Hello ObjectPrinter@29453f44
ObjectPrinter.printWithAddress("World") // World ObjectPrinter@29453f44
ClassPrinter.getInstance().printWithAddress("Hello") // Hello ClassPrinter@5cad8086
ClassPrinter.getInstance().printWithAddress("World") // World ClassPrinter@5cad8086
}- μ μΌνκ² μ‘΄μ¬νλ μΈμ€ν΄μ€λ‘μ μ κ·Όμ ν΅μ ν©λλ€.
- Singleton ν΄λμ€ μμ²΄κ° μΈμ€ν΄μ€λ₯Ό μΊ‘μννκΈ° λλ¬Έ
- μ΄λ¦ 곡κ°(name space)μ μ’νλλ€. μ μ λ³μλ₯Ό μ μνμ¬ λ°μνλ λλ²κΉ μ μ΄λ €μ λ± λ¬Έμ λ₯Ό λ°©μ§
- μ°μ° λ° ννμ μ μ λ₯Ό νμ©ν©λλ€.
- Singleton ν΄λμ€λ μμλ μ μκΈ° λλ¬Έμ, μ΄ μμλ μλΈν΄λμ€λ₯Ό ν΅ν΄μ μλ‘μ΄ μΈμ€ν΄μ€λ₯Ό λ§λ€ μ μμ΅λλ€. λν μ΄ ν¨ν΄μ μ¬μ©νλ©΄, λ°νμμ νμν ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ¨μ μμ©νλ‘κ·Έλ¨μ ꡬμ±μ΄ κ°λ₯ν¨.
- μΈμ€ν΄μ€μ κ°―μλ₯Ό λ³κ²½νκΈ°κ° μμ λ‘μ΅λλ€.
- λ§μμ΄ λ°λμ΄μ Singleton ν΄λμ€μ μΈμ€ν΄μ€κ° νλ μ΄μ μ‘΄μ¬ν μ μλλ‘ λ³κ²½ν΄μΌ ν λλ μλλ°, μ¬λ¬κ°μ μΈμ€ν΄μ€λ₯Ό μμ±ν΄μ κ°κ°μ μΈμ€ν΄μ€λ‘ μ κ·Όν μ μλλ‘ μ°μ°μ ꡬνμ λ°κΎΈλ©΄ λκΈ° λλ¬Έμ λλ€.
- ν΄λμ€ μ°μ°μ μ¬μ©νλ κ²λ³΄λ€ ν¨μ¬ μ μ°ν λ°©λ²μ λλ€.