객체선언 (Object declarions)
싱글톤 패턴은 다양한 상황에서 사용이 된다. 코틀린은 이런 싱글톤을 쉽게 사용할 수 있도록 객체선언을 이용하여 싱글톤 객체를 만들 수 있도록 지원한다.
위 처럼 class대신 object 키워드를 이용하여 객체선언이 가능하다. 이러한 선언은 싱글톤을 생성할 수 있다. 위에서 생성한 Application 이란 이름의 객체는 아래와 같이 접근이 가능하다.
Application.start()
객체에는 변수, 프로퍼티, 멤버함수 등을 포함시킬 수 있고, 초기화 블록도 작성할 수 있으나, init, constructor를 작성할 수는 없다.
객체의 생성은 처음 접근할 때 초기화되며, 스레드-세이프가 보장된다. 컴파일러는 여러 스레드에서 싱글톤 객체에 접근하더라도 오직 하나의 인스턴스만 공유하도록 보장해준다.
Companion Object
Object를 클래스 내부에 포함시킬 수 있다. (inner class와 같은 방식) Inner object는 자신을 포함하고 있는 클래스의 멤버변수들에도 접근이 가능한다(private 변수 포함). 이러한 방식은 팩토리 패턴을 이용하는 경우에 용이하게 사용할 수 있다. 아래 코드는 Inner object를 이용한 간단한 팩토리이다.
Human과 Animal object의 차이는 object에 companion이 붙었는가 붙지 않았는가의 차이이다. 이 차이로 인해, Factory의 create() 메소드를 호출 시 마다 매번 객체의 이름을 지정해줘야 한다는 불편함이 있다. companion object는 object의 이름을 Companion 으로 자동 지정해준다. 개발자가 직접 원한다면 이름을 명시할 수도 있으나 권장하지는 않는다.
참고
https://kotlinlang.org/docs/object-declarations.html#object-declarations-overview
'Android > Kotlin' 카테고리의 다른 글
[Kotlin] Flow<List<T>> 에서 List<T>로 변환하기. (0) | 2022.09.15 |
---|---|
[Kotlin/Plugin] Json으로 data class 추출하기 (0) | 2022.07.28 |
[Kotlin] @Volatile 키워드란? (0) | 2022.06.15 |
[Kotlin] Scope Function (작성중) (0) | 2022.05.22 |
[Kotlin] Coroutine Builder 간략 정리 (0) | 2022.04.25 |