읽기전용(immutable) 이다. 한번 초기화되면 다시 할당할 수 없다. 상수 선언 시 사용.
lateinit var
가변(mutable)변수 이다. 값을 다시 할당할 수 있다.
var count = 10
count = 20 // 다시 할당 가능
나중에 초기화할 변수 선언 시 사용. 변수 선언 시 초기값을 주지 않고, 나중에 값을 할당할 수 있도록 한다. 단 초기화 전에 변수에 접근하면 예외가 발생한다. 주로 ViewBinding 및 Dagger Hilt 와 같이 나중에 초기화해야 하는 경우에 사용된다. (Android Studio)
lateinit var name: String
컴파일 시간 상수(compile-time constant)를 선언할 때 사용. 이 변수는 컴파일 시간에 값을 알고 있어야 한다. 최상위 범위나 클래스에서만 사용할 수 있다. 값을 변경할 수 없다.
companion object {
const val PI = 3.14159265359
}
변수를 처음 사용할 때 초기화하고, 그 이후에는 캐시된 값을 반환한다. 이를 통해 초기화 비용을 줄일 수 있다.
by lazy 를 사용한 변수는 처음으로 접근될 때만 초기화되며, 그 이후에는 저장된 값을 반환한다.
val result: Int by lazy {
// 복잡한 초기화 코드
computeResult()
}
접근 제어 지시자(access modifier) 중 하나이다.
해당 변수 또는 함수가 선언된 클래스 내부에서만 접근 가능하도록 지정한다.
private 으로 선언된 변수는 외부에서 직접 접근할 수 없고, 클래스 내부의 다른 멤버 함수에서만 사용가능하다.
이를 통해 변수화 함수의 캡슐화(encapsulation)가 구현되며, 클래스 내부 구현을 외부로부터 숨기고 보다 안전하게 유지할 수 있다.
private var secretValue: Int = 42
// 비어있는 변수 선언. 나중에 초기화
private lateinit var binding: ActivityMainBinding
// 읽기 전용 변수 선언. 변수 선언 시 값 할당 후 변경 불가
private val dataList = mutableListOf<SaleItem>()
// 변수를 나중에 초기화할 것. 초기화 않은 상태에서도 선언은 가능하나, 변수 사용 시 예외 발생. 초기화 전에 조심스럽게 사용하기
lateinit var activityResultLauncher: ActivityResultLauncher<Intent>