4.4.1 객체 선언
코틀린은 어떤 클래스에 인스턴스가 오직 하나만 존재하게 보장하는 싱글턴 패턴을 내장하고 있다. 코틀린에서는 클래스와 비슷한 방법으로 싱글턴을 선언한다. 다만 class 대신 object라는 키워드를 사용한다.
object Application { val name = "My Application" override fun toString() = name fun exit() { } }
이런 객체 선언은 클래스를 정의하는 동시에 클래스의 인스턴스를 정의하는 것이기도 하다. 예를 들어 다음 코드를 보자.
fun describe(app: Application) = app.name // Application은 타입임 fun main() { println(Application) // Application은 값임 }
일반적으로 객체의 인스턴스는 단 하나뿐이므로 인스턴스만 가리켜도 어떤 타입을 쓰는지 충분히 알 수 있다. 따라서 객체를 타입으로 사용해도 무의미하다.
객체 정의는 스레드 안전하다. 컴파일러는 실행되는 여러 스레드에서 싱글턴에 접근하더라도 오직 한 인스턴스만 공유되고 초기화 코드도 단 한 번만 실행되도록 보장한다.