1️⃣ 오늘의 Keyword
- this
- field
- property
- custom accessor
- lateinit
- isInitialized
- by lazy
2️⃣ 학습 내용 및 예시
- this
- Kotlin에서는 주 생성자가 선언되어있다면, 보조 생성자는 무조건 this. 으로 주 생성자를 같이 호출해 주어야한다.
- field : 실제 데이터 값을 저장하는 메모리 공간
- Property : 필드 + getter/setter(accessor)
- 코틀린에서 Top-level과 클래스의 변수를 프로퍼티라 부른다.
- var로 선언한 변수는 get(), set() 이 추가
- val로 선언한 변수는 get() 만 추가
- field : getter, setter 함수 내에서의 예약어
- custom property, custom accessor
- get(), set() 내부에서는 프로퍼티 값을 field로 접근한다.
- val의 경우 get() 을 정의하였다면 초기 값을 명시하지 않아도 된다.
- var의 경우 get() 이 정의되었다고 하더라도 초기 값이 명시 되어야한다.
- 주 생성자의 var, val 이 추가된 매개변수에 Custom get(), set() 이 추가 불가
- lateinit : 늦은 초기화
- 개발자가 책임지고 뒤에서 반드시 초기화를 할 것이니 일단은 컴파일 에러없이 넘기는 것.
- var의 경우에만 사용 가능.
- 주 생성자에서는 사용할 수 없다.
- custom getter/setter를 사용하지 않은 프로퍼티에만 사용할 수 있다.
- nullable 프로퍼티에는 사용할 수 없다.
- 타입은 기초 타입이 아니어야 한다.
- isInitialized
- lateinit으로 선언된 변수가 초기화 되었는지 확인
- 클래스 내부에 선언된 lateinit을 클래스 밖에서 사용할 때 초기화 되었는지 직접 확인한느 방법은 없다.
- by lazy : 초기화 미루기
- 초기화를 프로퍼티의 ‘이용 시점’으로 미룰 수 있는 방법
- by lazy { } 로 선언되어 프로퍼티의 초기화를 lazy { } 에서 진행
- 호출 시점에서 초기화 진행
- val 과 같이 사용 가능
- primary type에도 사용가능
- lateinit과 by lazy의 차이
구분 | lateinit | by lazy |
변수 제한 | var (변경 가능) | val (변경 불가능) |
초기화 주체 | 개발자가 직접 특정 시점에 할당 | 변수에 처음 접근할 때 자동 실행 |
Primitive 타입 | 불가능 (Int, Boolean 등 X) | 가능 |
Nullable | Null 허용 안 됨 | Null 허용 가능 |
Thread-Safe | 지원하지 않음 | 기본적으로 지원함 (멀티스레드 안전) |
- 프로퍼티 변경 감지 - by Delegates.observable

