Backend/Kotlin

[Kotlin] val, const val

findmypiece 2021. 11. 22. 22:52
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