Kotlin : Singleton Pattern 이란

hjseo-dev·2022년 6월 1일
1

Android

목록 보기
13/18

Singleton Pattern

클래스 인스턴스를 단 하나만 만들어야 할 경우 사용

코틀린은 object를 사용한다

object DBHandler {...}
val dbHandler = DBHandler
  • object를 사용하면 인스턴스를 생성할 때 파라미터를 전달할 수가 없다는 한계
  • 파라미터를 전달하기 위해서 자바의 static을 companion object로 구현
class DBHandler private constructor(context: Context) {
    companion object {
        private var instance: DBHandler? = null

        fun getInstance(context: Context) =
            instance ?: DBHandler(context).also {
                instance = it
            }
    }
}

스래드가 인스턴스를 확인하고 null이면 새로 만들고 아니면 그대로 반환, 인스턴스는 하나만 가지게 된다!

두개의 스레드가 동시에 인스턴스 상태를 확인하면, 객체가 중복 생성 할 수 있게 되어 싱글턴이 깨진다 (스레드 동기화 문제)
-> double checked locking

class DBHandler private constructor(context: Context) {
    companion object {
        @Volatile //인스턴스가 메인 메모리를 바로 참조하여 인스턴스 중복 생성 방지
        private var instance: DBHandler? = null

		//동시성 체크 - 각 스레드가 동시에 실행되지 못하도록
        fun getInstance(context: Context) =
            instance ?:   synchronized(DBHandler::class.java) { 
                instance ?: DBHandler(context).also {
                    instance = it
                }
            }
    }
}

참조 : https://cliearl.github.io/posts/android/understanding-singleton-pattern/

0개의 댓글