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 S
SlowExampleSingleton {
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
코틀린에 대해 어서 빨리 익숙해지고 능숙해져야 할텐데 말이다...