싱글턴 패턴에 대한 설명은 아래 링크를 참고하길 바란다.

https://codingjobrice.tistory.com/155

 

[디자인 패턴 기초] 싱글턴 패턴 (Singleton Pattern)

싱글턴 패턴이란? "클래스 인스턴스를 하나만 만들고, 그 인스턴스로의 전역 접근을 제공한다." 말 그대로 하나의 클래스로 하나의 객체만 만들겠다는 이야기다. 이해를 돕기위해 코드를 살펴보

codingjobrice.tistory.com

 

안드로이드에서 싱글턴 패턴 사용하기

안드로이드에서 단일 객체를 생성하기 위해서는 간단하게 object 키워드를 사용하면 된다.

object OneSingletonKt{
    var uniqueInstance:Int = 10
}

fun main(){
    println(OneSingletonKt.uniqueInstance)
}

 

uniqueInstance는 단일 객체가 된 것이다. 저렇게만 사용하면 간단하지만 이를 클래스 안에 담아보자.

class SingletonKt{
    object OneSingletonKt{
        var uniqueInstance:Int = 10
    }
}

fun main(){
    println(SingletonKt.OneSingletonKt.uniqueInstance)
}

이 것도 막 불편하지는 않지만 SingletonKt.OneSingletonKt.uniqueInstance 이 부분에서 보기 불편하다... 코틀린은 불편한 것 못참는 언어이다. 그래서 "companion" 이라는 키워드를 사용하면서 이 문제를 해결하였다. 코드를 살펴보자.

class SingletonKt{
    object OneSingletonKt{
        var uniqueInstance:Int = 10
    }
    
    companion object{
        var uniqueInstance2:Int = 20
    }
}

fun main(){
    println(SingletonKt.uniqueInstance2)
}

불편함을 해결한 것을 볼 수 있다.

 

그러면 안드로이드에서는 언제 사용될까? 

전역 변수, Retrofit 객체 생성 시, 데이터베이스 접근 시 등 다양한 경우에 사용되며 이는 하나하나 계속 추가해가겠다..

일단 firebase 객체 선언 시 사용한 코드를 예로 들겠다.

class MyApplication : MultiDexApplication(){
    companion object {
        lateinit var auth: FirebaseAuth
        var email: String? = null
      
        var user:User? = null
        lateinit var db: FirebaseFirestore
       
        fun checkAuth(): Boolean {
            var currentUser = auth.currentUser
            return currentUser?.let {
                email = currentUser.email
                currentUser.isEmailVerified
            } ?: let {
                false
            }
        }
    }
    override fun onCreate() {
        super.onCreate()
        auth = Firebase.auth
        db = FirebaseFirestore.getInstance()
    }
}

 

+ Recent posts