*지연 초기화((lateinit, lazy)
-Nullable(?) 처리가 남용되는 것을 방지함
--lateinit : var를 사용하는 지연 초기화, 변수를 Nullable(?)로 미리 선언하고 나중에 초기화 할 때 사용
--lazy : val을 사용하는 지연 초기화, 선언 시에 초기화 코드를 함께 작성하고 호출이 되는 순간 초기화됨
*lateinit
-변수만 Nullable(?)로 미리 선언하고 초기화(생성자 호출)를 나중에 해야할 때 사용
-변수의 초기화가 꼭 되어야 예외가 발생하지 않음, 이 것을 방지하기 위해 항상 Nullable이나 빈 값으로 초기화해야함
-var로 선언된 클래스의 프로퍼티에만 사용가능
-null은 허용되지 않음
-기본 자료형 Int, Long, Double, Float등은 사용할 수 없음
-변수명 앞에 lateinit키워드 사용
-lateinit사용 시 기존 Nullable(?)을 사용할 때 Safe Call(?.)을 쓰지 않을 수 있어 가독성을 높여줌
*lazy
-읽기전용 변수인 val을 사용하는 지연 초기화
-선언 시에 초기화 코드를 작성하기 때문에 따로 초기화할 필요가 없음
-lazy로 선언된 변수가 최초 호출되는 시점에 처음 초기화한 {} 안의 값으로 초기화 됨
-초기화 시 복잡한 코드를 가지고 있는 클래스라면 미리 초기화해 놓고 사용하는 것이 좋음
-lateinit은 입력 값을 변경할 수 있지만 lazy는 입력 값 변경 불가
-val을 변수를 먼저 선언 뒤 by lazy키워드 사용 후 중괄호{} 안에 초기화 할 값 입력
-타입 생략 : by lazy를 사용하면 반환되는 값의 타입을 추론할 수 있어서 생략가능
-lazy로 선언된 변수(person)는 Company클래스가 초기화 되더라도 초기화 되지 않음
-process메서드에서 person.name이 호출되는 순간 초기화 됨
이 포스팅에 작성한 내용은 고돈호, ⌜이것이 안드로이드다⌟, 한빛미디어(주), 2022 에서 발췌하였습니다.
'Android App > Kotlin' 카테고리의 다른 글
레이아웃(Layout) (0) | 2022.11.02 |
---|---|
스코프 함수(run, let, apply, also, with) (0) | 2022.10.31 |
null 값에 대한 안정적인 처리(Null Safety) (0) | 2022.10.31 |
클래스 - 요약정리 (0) | 2022.10.31 |
클래스 - 설계도구(접근 제한자, 제네릭) (0) | 2022.10.30 |