1. 개요
코틀린에서 Non-null로 선언된 프로퍼티는 선언과 동시에 초기화해야 한다. 만일 초기화 하지 않으면 'Property must be initialized or be abstract' 라는 에러 메시지가 발생한다.
특정 UI 요소를 여러 콜백 함수에서 사용할 때 지연 초기화를 사용하면 유용하다.
2. 지연 초기화 기법
코틀린에서 지연 초기화를 위한 두 가지 방법을 제공한다.
자세한 내용은 공식 사이트를 참고한다.
3. 소스코드
다음은 MainActivity.kt의 일부 소스코드이다.
class MainActivity : AppCompatActivity() {
private lateinit var displayTextView: TextView // ①
private val clickButton: Button by lazy { // ②
findViewById<Button>(R.id.main_btn_click)
}
// var button: Button // Error: Property must be initialized or be abstract
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
displayTextView = findViewById<TextView>(R.id.main_tv_display) // ③
clickButton.setOnClickListener { // ④
displayTextView.text = getString(R.string.main_clickmessage)
}
}
}
lateinit 프로퍼티를 ①에서 선언하였고 실제 초기화는 ③의 시점에서 이루어진다. 또 by lazy를 이용한 지연 초기화는 ②에서 이루어지고 clickButton에 처음 접근하는 ④가 실행되는 순간 초기화된다.