728x90
Singleton Pattern
- 어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 해당 인스턴스를 전역적으로 접근 가능케하는 패턴
- 고정된 메모리 영역을 가지기 때문에 메모리 사용의 효율성 증가
- object 키워드를 통해 간단하게 패턴 생성 가능
Java의 Static 활용 시에는 호출 시점에 인스턴스가 생성되지만, Kotlin의 Object는 프로세스가 메모리 상에 올라가는 순간 바로 생성된다. 이는 즉, 굳이 사용되지 않을 때에도 메모리에 인스턴스가 존재하기 때문에 어떤 경우에는 주의할 필요가 있다.
Object
- 클래스 외부에서 선언되며 별도의 객체 생성 없이 즉시 호출이 가능하다.
- 하나의 객체만 접근 시점에 생성되므로 생성자가 없는 클래스만 사용 가능
- 특정 초기화를 위해서는 init {} 사용
object RetrofitInstance {
init {
//initialize
}
private const val BASE_URL = ""
private val retrofit:Retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
}
Companion object
- 외부 클래스와 내부 클래스의 인스턴스들의 동시 인스턴스화
- 여러 객체 생성이 가능하나, 클래스 메모리 주소 값은 동일하다.
- 상속 관계에서는 Companion 멤버는 가려진다.
- 외부 클래스에서 해당 클래스의 메서드나 프로퍼티에 쉽게 접근 가능하다.
- 따로 네이밍을 주어 가시성을 높일 수 있다.
class RetrofitInstance {
companion object ApiInstance {
val BASE_URL = ""
val interceptor = HttpLoggingInterceptor().apply {
this.level = HttpLoggingInterceptor.Level.BODY
}
val client = OkHttpClient.Builder().apply {
this.addInterceptor(interceptor)
.connectTimeout(20, TimeUnit.SECONDS)
}.build()
728x90