코틀린 프라이빗 생성자
Java 프로그래밍에서 기본 생성자를 private
으로 정의할 수 있습니다. 그런 다음 public
static
메서드를 사용하여 생성자에 액세스할 수 있습니다. 그러나 Kotlin에서 가능합니까?
Kotlin 역시 private
생성자를 생성할 수 있습니다. 어떻게? 이 기사에서 볼 것입니다.
Kotlin 비공개
생성자
생성자는 Kotlin 클래스
의 특수 멤버 함수입니다. 개체를 만들고 시작할 때 호출됩니다.
Kotlin private
생성자는 class
에 대한 사용자 지정 가시성을 활성화하는 데 유용합니다. 또한 Kotlin class
의 기본 생성자를 숨깁니다. 예를 들어 메모리 효율성을 위해 원치 않는 객체 생성을 방지하고 싶다고 가정합니다. 이를 달성하기 위해 private
생성자를 사용할 수 있습니다.
액세스 한정자 키워드인 private
과 컴패니언 객체를 사용하여 Kotlin 생성자를 private
으로 정의할 수 있습니다. 클래스 구성원은 컴패니언 개체의 개인
구성원에 액세스할 수 있습니다.
생성자를 비공개로 선언하는 구문은 다음과 같습니다.
class class_Name private constructor()
개인
생성자의 작업
private
생성자는 클래스 private
의 기본 생성자를 만들어 작동합니다. 다른 클래스가 private
생성자를 사용하여 객체를 생성하는 것을 방지합니다.
private
생성자를 만들 때 정적
메서드를 사용하는 것이 가장 좋습니다. 그 이유는 정적
메소드가 객체 초기화 없이 실행될 수 있기 때문입니다.
이제 private
생성자는 동일한 클래스에서 개체를 만들고 초기화할 수 있습니다. 그러나 다른 클래스의 개체를 초기화하려고 하면 오류가 발생합니다.
private
생성자의 장단점
Kotlin에서 private
생성자의 이점을 살펴보는 것으로 시작하겠습니다.
private
생성자를 사용하는 첫 번째 이점은 보안입니다. 다른 어떤 클래스도 private
클래스의 데이터에 액세스할 수 없으므로 보안이 유지됩니다.
메모리 효율성은 private
생성자를 사용하는 이점이기도 합니다. 즉, 단일 인스턴스만 생성됩니다. 또한 기본 생성자의 자동 생성을 방지할 수도 있습니다.
단점으로 다가가면 private
생성자는 상속을 허용하지 않습니다. 또한 private
생성자 클래스를 초기화하려면 중첩 클래스 또는 static
메서드를 사용해야 합니다.
Kotlin 비공개
생성자의 데모
다음은 위의 구문을 사용하여 private
생성자로 클래스를 만드는 예입니다.
import exampleClass.Companion.example
class exampleClass private constructor() {
companion object {
fun example() = exampleClass()
}
}
class exampleClass1: Thread() {
public override fun run() {
println("The application is running on ${Thread.currentThread()}")
}
}
class exampleClass2: Runnable {
public override fun run() {
println("Now the application is running on ${Thread.currentThread()}")
}
}
fun main(){
val v1 = example()
println(v1)
val th1 = exampleClass1()
th1.start()
val runnable = exampleClass2()
val th2 = Thread(runnable)
th2.start()
}
출력:
exampleClass@77afea7d
The application is running on Thread[Thread-0,5, main]
Now the application is running on Thread[Thread-1,5, main]
Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.
LinkedIn