>source

안드로이드 코틀린에서 생성 패턴(싱글톤 패턴)을 공부하고 있습니다.

싱글톤 객체를 컴패니언 객체와 객체로 만드는 차이점에 대해 질문이 있습니다.

일부 예에서 싱글톤은 다음과 같이 만들어집니다.

class ABC {
  companion object {
    private var sInstance: ABC?= null
    fun getInstance(): ABC {
        if (sInstance== null) sInstance= ABC()
        return sInstance ?: throw IllegalStateException("")
    }
  }
}

하지만 위의 방법을 사용하면

//a and b are not same object
val a= ABC()
val b= ABC.getInstance()
println(a== b) //false

하지만 내가 아는 바로는 kotlin의 싱글톤은물체.

그래서 내 질문은 "왜, 언제 컴패니언 개체를 사용하여 싱글톤 개체를 만드는가"입니다.

이 답변의 처음 몇 문장을 참조하십시오. 그것이 당신의 질문에 대답합니까?

lucidbrot2022-01-16 10:07:08

@lucidbot //알았어요, 정말 감사합니다 :)

EPISODE2022-01-16 10:18:26
  • 답변 # 1

    getInstance()싱글톤을 생성하는 "전통적인" 방법일 뿐입니다. 예를 들어 일반적인 기술입니다. Java는 Kotlin과 달리 Java에는 언어 자체에서 제공하는 싱글톤이 없기 때문입니다. 이러한 이유로 당신은 볼 것입니다getInstance()때때로 Kotlin에서도. Java에서 이식한 code일 수도 있고 Java 경험이 더 많은 사람이 개발한 것일 수도 있으므로 Kotlin에 더 나은 대안이 있는지 등을 모릅니다.

    또한,물체상당히 정적입니다. 싱글톤을 생성하기 위한 더 복잡한 논리가 있는 경우 일종의 팩토리(예: 컴패니언 개체)에서 생성해야 할 수 있습니다.

    즉, 경험적 법칙은 다음을 사용하는 것입니다.물체기본적으로 이것이 불가능한 경우에만 수동으로 생성하십시오. 그리고 후자의 경우 속성을 사용하는 것이 아니라 속성을 사용하는 것이 더 "Kotlin-ish"입니다.getInstance()기능.

  • 이전 gitlab : 달러 기호가 있는 비밀 변수가 올바르게 설정되지 않았습니다.
  • 다음 Java code에 Oracle okvja 라이브러리를 추가하는 방법