본문 바로가기
Android App/Kotlin

지연 초기화(lateinit, lazy)

by AppJinny 2022. 10. 31.

*지연 초기화((lateinit, lazy)

-Nullable(?) 처리가 남용되는 것을 방지함

--lateinit : var를 사용하는 지연 초기화, 변수를 Nullable(?)로 미리 선언하고 나중에 초기화 할 때 사용

--lazy : val을 사용하는 지연 초기화, 선언 시에 초기화 코드를 함께 작성하고 호출이 되는 순간 초기화됨

 

*lateinit

-변수만 Nullable(?)로 미리 선언하고 초기화(생성자 호출)를 나중에 해야할 때 사용

-변수의 초기화가 꼭 되어야 예외가 발생하지 않음, 이 것을 방지하기 위해 항상 Nullable이나 빈 값으로 초기화해야함 

-var로 선언된 클래스의 프로퍼티에만 사용가능

-null은 허용되지 않음

-기본 자료형 Int, Long, Double, Float등은 사용할 수 없음

-변수명 앞에 lateinit키워드 사용

Nullable 일반적 사용

-lateinit사용 시 기존 Nullable(?)을 사용할 때 Safe Call(?.)을 쓰지 않을 수 있어 가독성을 높여줌

lateinit 사용

 

*lazy

-읽기전용 변수인 val을 사용하는 지연 초기화

-선언 시에 초기화 코드를 작성하기 때문에 따로 초기화할 필요가 없음

-lazy로 선언된 변수가 최초 호출되는 시점에 처음 초기화한 {} 안의 값으로 초기화 됨 

-초기화 시 복잡한 코드를 가지고 있는 클래스라면 미리 초기화해 놓고 사용하는 것이 좋음

-lateinit은 입력 값을 변경할 수 있지만 lazy는 입력 값 변경 불가

-val을 변수를 먼저 선언 뒤 by lazy키워드 사용 후 중괄호{} 안에 초기화 할 값 입력

lazy 사용

-타입 생략 : by lazy를 사용하면 반환되는 값의 타입을 추론할 수 있어서 생략가능

-lazy로 선언된 변수(person)는 Company클래스가 초기화 되더라도 초기화 되지 않음

-process메서드에서 person.name이 호출되는 순간 초기화 됨

 


이 포스팅에 작성한 내용은 고돈호, ⌜이것이 안드로이드다⌟, 한빛미디어(주), 2022 에서 발췌하였습니다.