매번 새로운 인스턴스를 생성하지 않고 오직 하나의 객체만 사용할 때 사용합니다. 즉, 클래스를 정의하면서 동시에 인스턴스(객체)를 생성하는 것입니다.
어떤 클래스의 인스턴스는 오직 하나임을 보장하며, 이 인스턴스에 접근할 수 있는 전역적인 접촉점을 제공하는 디자인 패턴이다.
애플리케이션의 시작부터 종료까지 한 번의 생성으로 고정된 메모리 영역을 가지기 때문에 메모리를 효율적으로 사용할 수 있다.
싱글턴의 인스턴스는 전역적으로 사용되기 때문에 다른 클래스의 인스턴스들이 데이터를 공유 변경이 가능하다는 장점이 있다.
쉽게 말하면 한 번의 선언으로 모든 클래스에서 전역으로 사용 가능한 필드나 메서드를 만드는 것(아무데서나 접근 가능한 필드나 메소드)
코틀린은 언어 자체에서 기본적으로 싱글턴을 지원합니다.
fun main() {
println(Data.a1)
println(dataRepository.a1)
}
object Data {
var a1: String = "sls"
}
val dataRepository = Data
object Github{
private const val BASE_URl = "https://api.github.com"
private val retrofit: Retrofit = Retrofit.Builder().baseUrl(BASE_URl)
.addConverterFactory(GsonConverterFactory.create()).build()
val service:GithubService = retrofit.create(GithubService::class.java)
}
코틀린에서 자바와 같이 싱글톤 패턴을 하려면 companioin object를 사용하면 됩니다. 자바의 static 멤버와 비슷합니다.
class BBQ {
companion object {
const val pizza = "delicious"
fun cheeze() {
// do something
}
}
}
싱글턴 패턴은 한 번의 생성으로 고정된 메모리 영역을 가지기 때문에 메모리를 효율적으로 사용할 수 있습니다. 그리고 한 번의 선언으로 모든 클래스에서 전역으로 사용 가능한 필드나 메서드를 만들수 있습니다.