class SingletonService private constructor() {
	companion object {
		private val instance = SingletonService()
		fun getSingletonInstance() = instance
	}
}

fun main() {
	SignletonService.getSingletonInstance()
}
  1. static 영역에 객체 Instance를 미리 하나 생성해서 올려둔다.
  2. 이 객체 인스턴스가 필요하면 오직 getSingletonInstance() 메서드를 통해서만 조회할 수 있다. 이 메서드를 호출하면 항상 같은 인스턴스를 반환한다.
  3. 딱 1개의 객체 인스턴스만 존재해야 하므로, 생성자를 private으로 막아서 혹시라도 외부에서 새로운 객체 인스턴스가 생성되는 것을 막는다.

싱글톤 패턴 문제점

싱글톤 방식의 주의점