728x90
코틀린에서 상수를 선언하는 방법은 두가지로 변수 선언 앞에 val 또는 const val 를 사용하는 것이다.
val의 값은 런타임 시 할당되고 const val 은 컴파일 시 할당된다. val 은 자바의 final 이라고 생각하면 되고 const는 자바의 static final 이라고 생각하면 된다.
이에 val 와 달리 const val 은 객체 생성이 필요없는 최상위 함수나 싱글톤 형태의 object 또는 static 과 비슷한 companion object 에서만 정의할 수 있다. 또한 const val 에는 함수나 객체는 할당할 수 없고 String 같은 기본타입만 할당할 수 있다.
val 로 할당한 상수는 field + getter 메소드 가 조합된 것으로 코드상에서 접근할 때 field 로 직접 접근하지만 내부적으로는 getter 메소드가 호출되는 구조이다.
val 에서 사용되는 getter 메소드는 코드상에서 재정의할 수 있기 때문에 초기 할당된 값과 다른 값을 리턴하도록 할 수 있지만 const val 은 getter 선언이 불가능하기 때문에 좀 더 완전한 불변의 성격을 가진다.
즉, val, const val 모두 불변의 성격는 상수지만 자바에서 흔히 사용하던 static final 성격의 상수는 const val 이 더 가깝다고 볼 수 있다.
728x90
'Backend > Kotlin' 카테고리의 다른 글
[Kotlin] 제네릭(내가 필요한 것만 정리..) (0) | 2021.12.06 |
---|---|
[Kotlin] inline (0) | 2021.12.06 |
[Kotlin] 코틀린에서 유틸함수 만들기 (0) | 2021.11.24 |
[Kotlin] companion object (0) | 2021.11.22 |
[Kotlin] 초기화 없이 속성을 선언하는 방법 lateinit (0) | 2021.11.05 |