Kotlin Singleton Pattern

💀LeeSY·2022년 7월 19일
0
post-thumbnail

Singleton Pattern

  • 어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 해당 인스턴스를 전역에서 접근 가능케하는 디자인 패턴
  • 고정된 메모리 영역을 가지어 메모리 사용의 효율성이 증가한다.
  • 코틀린에서는 object 키워드를 통해 간편하게 Singleton 패턴 구현이 가능하다.

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()
profile
A little strange but passionate, sincere hard worker.

0개의 댓글

관련 채용 정보