Lateinit& By Lazy

매일 수정하는 GNOSS LV5·2021년 8월 12일
1

AndroidStudio

목록 보기
4/83

늦은 초기화 lateinit

프로퍼티를 선언하지 않고 초기화를 미루는 방법이다.
전역 변수로 선언 후 null값을 지정하지 않고 초기화 할 수 있다.
var를 이용한 경우에만 사용이 가능하다.

package eight_two_three
class User1 {
	lateinit var lateData: String
}
fun main(args: Array<String>) {
// lateinit
	val user = User1()
  user.lateData = "hello"
  println(user.lateData)
}

User1의 lateData를 선언할때 초기값을 설정하지 않았다.

이것을 후에 user.lateData = "Hello" 를 통해서 사용한다. 이런것이 늦은 초기화.


Lateinit의 제약

  • lateinit는 var로 선언한 프로퍼티에만 사용할 수 있다.
  • lateinit는 클래스 몸체, Top-Level, 함수 내부에 선언한 프로퍼티에 사용할 수 있다. 주 생성자에서는 사용할 수 없다.
  • lateinit는 사용자 정의 getter/setter를 사용하지 않은 프로퍼티에만 사용할 수 있다.
  • null 허용 프로퍼티에는 사용할 수 없다. —> 절대 null이 될 수 없다.
  • 기초 타입 프로퍼티에는 사용할 수 없다.
    Primitive type : Int,Boolean,Double등 기본적인 타입이다.

늦은 초기화 by lazy

lateinit과의 가장 큰 차이는 val의 경우에만 사용이 가능하다.
by lazy이후 블록 { } 을 생성하고 초기화에 필요한 코드를 작성한다.
즉 선언과 초기화가 동시에 진행이 된다.

private val mediaPlayer : MediaPlayer by lazy {
		MediaPlayer.create(this,R.raw.hello)
}

그렇다면 왜 사용할까?
변수 선언 후 초기화시 null로 선언할 필요가 없을 때 사용한다.

profile
러닝커브를 따라서 등반중입니다.

0개의 댓글