클래스를 정의하면서 동시에 인스턴스를 정의하며, object + 선언식/표현식
형태로 사용할 수 있음
싱글톤 패턴 형태로 만들어줌
싱글톤 패턴 : 인스턴스를 한 개만 생성되게 하는 패턴
주로 프로그램 내에서 하나로 공유해야 하는 객체가 존재할 때, 해당 객체를 싱글톤으로 구현하여 모든 유저/프로그램들이 해당 객체를 공유하며 사용할 때 씀
object Singleton : MyClass(), MyInterface {
val name: String = "MyName"
override fun MyClassFunc() { ... }
}
val singleton = Singleton
println(Singleton.name)
Singleton.MyClassFunc()
익명 객체로서 사용 가능함
fun main() {
val user = object {
val name = "MyName"
val age = 28
}
println(user.name)
println(user.age)
}
코틀린 언어는 자바의 static을 지원하지 않음
그 대신 코틀린에서는 클래스 바깥에 선언하는 최상위 함수와 객체 선언을 활용함
대부분의 경우에는 최상위 함수를 사용하는 것을 권장하지만, 최상위 함수는 private 멤버에 접근할 수 없다는 단점
class MyClass {
private val name: String = "MyName"
fun publicMember(): String {
return "Public"
}
}
fun topLevelFunction(myClass: MyClass): String {
val public = myClass.publicMember()
// private 멤버 접근 불가능
// val private = myClass.name
return public
}
대신, 클래스 안에 companion object를 정의하고 그 안에 클래스의 프로퍼티나 메소드를 선언한다면, 자바의 static 호출 사용 구문과 동일하게 외부에서 접근할 수 있음
class MyClass {
private val name: String = "MyName"
fun publicMember(): String {
return "Public"
}
companion object {
fun accessPrivateMember(myClass: MyClass): String {
return myClass.name
}
}
}
fun main() {
val myClass = MyClass()
// Companion object를 통해 private 멤버에 접근할 수 있음
println(MyClass.accessPrivateMember(myClass))
}
https://velog.io/@seongwon97/싱글톤Singleton-패턴이란
https://parade621.tistory.com/37