[Kotlin] var / val / const val / companion object 특성
이 포스팅은 아래 Kotlin 공식문서의 일부를 번역(의역) + 의견을 추가한 것입니다.
var / val
변수의 정의가 가변(mutable)하는 경우 var 키워드(variable)를 사용하고, read-only일 경우 val 키워드(value)를 사용한다. 변수의 값이 가변하는 경우가 아니다. 예를 들어, area의 값은 width와 height에 따라 변하지만 정의는 변하지 않는다.
1 | val area: Int = this.width * this.height |
코틀린에서 backing field는 단지 메모리에 값을 유지하기 위해서만 사용되는 것에 불과하다. field는 직접 선언될 수 없으며 변수의 setter나 getter 내에서만 사용할 수 있다.
1 | var counter = 0 // initializer가 field에 직접 값을 할당한다. |
이런 식의 암시적인 field 체계 대신 아래와 같이 backing 변수를 만들 수도 있다.
1 | private var _table: Map<String, Int>? = null |
const val
컴파일 타임 상수이다. 다음 조건을 모두 충족시키는 경우에 해당한다.
- 최상위 레벨 속성이거나 object나 companion object의 멤버여야 한다.
- String이나 원시(primitive) 타입으로 초기화되어야 한다.
- 커스텀 getter를 사용할 수 없다.
컴파일 시 inline 형태로 이 변수를 변수 대신 실제 값으로 대치한다. 그러나 필드가 사라지는 건 아니라서 relection으로 상호작용은 여전히 가능하다.
1 | const val SUBSYSTEM_DEPRECATED: String = "this subsystem is deprecated" |
companion object(동반 객체)
class 내부에 object 선언은 “companion” 키워드를 써서 할 수 있다.
1 | class MyClass { |
companion object의 멤버는 단순하게 클래스명을 통해 호출할 수 있다.
1 | val instance = MyClass.create() |
companion object의 이름은 빼도 되고, 이때는 Companion으로 접근한다.
1 | class MyClass { |
클래스 멤버는 companion object 내의 private 멤버에 접근할 수 있다.
-
[Kotlin] var / val / const val / companion object 특성
https://dl137584.github.io/2023/11/20/029-kotlin-var-val-const-companion-object/