프로그래밍언어

Kotlin Singleton

애기공룡훈련병 2019. 1. 3. 14:07
반응형

JAVA로 Android 개발 시 종종 등장했던 Singleton을 Kotlin에서 사용하는 간단한 예제를 소개하고자 한다.


JAVA에서는 보통 다음과 같이 Singleton을 구현했었다.

public class Singleton {
    private static Singleton singleton;

    private Singleton() { }

    public Singleton getInstance() {
        if(singleton == null)
            singleton = new Singleton();
        return singleton;
    }

}

Kotlin에서는 아래와 같이 object를 사용하여 간단하게 Singleton을 하나 만들어 보았다.


object KotlinSingleton {
    val value: String = "Hello World"
}

엥? 이게 끝인가? 이게 끝이다.


Singleton을 활용하여 조금 시간이 걸릴 만한 작업을 해보았다.


object SSlowExampleSingleton {
    val value: String
    init {
        var uuid = ""
        val total = measureTimeMillis {
            println("Computing")
            for(i in 1..10_000_000) {
                uuid = UUID.randomUUID().toString()
            }
        }
        value = uuid
        println("Done computing in ${total}ms")
    }
}
@org.testng.annotations.Test
fun testSingleton() {
    println("Test started")
    for (i in 1..3) {
        val total = measureTimeMillis {
			println(SlowSingleton.value)
        }
        println("Took $total ms")
    }
}

[출력]

Test started
Computing
Done computing in 5376ms
"45f7d567-9b3e-4099-98e6-569ebc26ecdf"
Took 5377 ms
"45f7d567-9b3e-4099-98e6-569ebc26ecdf"
Took 0 ms
"45f7d567-9b3e-4099-98e6-569ebc26ecdf"
Took 0ms

object가 코드상에 정의 되어 있더라도, 사용하지 않으면 이 작업은 0초에 완료된다.


출력

Test started
Took 0 ms
Took 0 ms
Took 0 ms

코틀린에 대해 어서 빨리 익숙해지고 능숙해져야 할텐데 말이다...


반응형

'프로그래밍언어' 카테고리의 다른 글

Kotlin 전개 연산자의 이해  (0) 2019.07.07
스레드 우선순위  (0) 2019.06.17
정적 바인딩 vs. 동적 바인딩  (0) 2019.06.13
JAVA 직렬화와 Transient Keyword  (0) 2019.06.13
RxJava 시작  (0) 2019.04.20