코틀린 언어

[Kotlin] Singleton 디자인 패턴 토막글 (왜 static 이 아닌 object 인가?)

딸기토끼0623 2024. 5. 21. 21:06

1. Singleton

In software engineering, the singleton pattern is a software design pattern that restricts the instantiation of a class to a singular instance.

소프트웨어 공학에서, 싱글톤 패턴이란 한 클래스의 인스턴스화를 단 하나의 인스턴스로 규제하는 소프트웨어 디자인 패턴이다.

 

위는 싱글톤 디자인 패턴의 위키피디아 정의이다. 쉽게 말해, 하나의 클래스는 하나의 인스턴스만 가져야 하는 것이 싱글톤 패턴이라는 거다.

 

2. Java Static

그럼 우리 이번에는 위 관점에서, 아래 코드를 보고 Java 의 Static 키워드는 과연 Singleton 패턴에 부합하는지 생각해보자.

class Example{
    static int count = 0;
    int count2 = 0;
    
    static Example createExample();
    void updateExample();
}

위 코드에서 static 으로 선언된 Attribute 와 Method 는 Static 메모리에 들어가, 다른 Example 인스턴스가 생성되어도 값을 유지할 것이다.

 

그런데 이상하다.. Singleton은 분명 한 Class가 하나의 Instance를 갖는 것이라 했다.

 

그렇다면, static countstatic Example createExample() 은 원래 감싸고 있는 Example Class와 Friend 관계로 소통하는(private 등에 접근할 수 있는) 독립된 Class 로 간주해도 무방하지 않은가?

 

정말 Java 의 Static 키워드는 Singleton 패턴을 충실히 이행했다고 볼 수 있을까??

 

3. Kotlin Object

여기서 등장하는 것이 바로 Kotlin 의 Object를 활용한 Singleton 디자인 패턴이다.

Object expressions create objects of anonymous classes

Object 표현들은 익명 클래스의 객체들을 만든다.

 

공식 문서의 위 한줄 설명에 모든 것이 담겨있다. Kotlin 은 Java Static과 같이 싱글톤 패턴을 해치는 것을 막기위해, object라는 독자적인 Singleton 패턴을 구축한 것이다.

간단한 용법은 위와 같은데, 본 글에서는 왜 object라는 것이 나왔는지만 설명하는 글이기에, 이만 줄이도록 하겠다!