
1. 상수 (Constant)
상수(Constant)란 변하지 않는 수를 뜻합니다.
이는 변하눈 수인 변수(variable)과 반대되는 의미입니다.
사실 객체지향과는 큰 연관이 없어 1부에서 다루려고 했는데,
클래스, 객체, 커스텀 getter 등 1부에서 다루지 않은 내용이 많이 튀어나와 2부에서 다루기로 했습니다...
2. 상수의 사용
<kotlin />
const val MAX_VALUE = 1000000000
fun main() {
MAX_VALUE = 45643453 // 변경 불가!
}
상수는 constant의 줄임말인 const에 val을 붙여 사용할 수 있으며,
한 번 초기화하면 절대 값을 바꿀 수 없습니다.
앞의 내용을 잘 따라오신 분들이라면, 한 가지 의문이 드실 수 있습니다.
엥? 굳이 const 안써도 그냥 val 쓰면 값 못바꾸지 않아요?
3. const val vs val
간단하게 설명하자면,
val은 런타임 시점에 값이 할당되며,
const val은 컴파일 시점에 값이 할당됩니다.
<kotlin />
const val MAX = 1000000000
const val STRING = "Hello World"
const val CHAR = 'A'
const val CHECK = true
const val sb = StringBuilder() // 에러발생! Primmitive type이 아니면 값 할당이 불가!
class Test {
const val NUM = 10000 // 에러발생 !! const는 클래스나 메소드 안에서는 생성할 수 없다
}
const val은 숫자형, 문자열, true / false 등 primmitive 타입만 할당이 가능합니다.
또, 클래스 내부에서는 선언이 불가능해요.
<kotlin />
val INT = 1000000000
get() {
return field + 1000
}
const val INT2 = 1000000000 {
get() { // 커스텀 getter가 불가능하다
return field + 1000
}
}
일반적인 프로퍼티는 커스텀 getter를 사용하는 것이 가능합니다.
다만, const val의 경우 커스텀 getter가 불가능하기에, 더 강한 불변성을 제공합니다.
<kotlin />
class Test {
companion object {
const val MAX = 1000000000
}
}
클래스 안에서 const val을 사용하려면
코틀린의 static에 해당되는 companion object 안에서 상수 선언이 가능합니다.
자바의 static final에 대응된다 볼 수있습니다.
'코틀린 파헤치기 > 2부. 코틀린 객체지향' 카테고리의 다른 글
[코파기 2부] 9. 코틀린과 정적 (Object/Companion Object) (2) | 2023.03.15 |
---|---|
[코파기 2부] 7. 코틀린과 열거형 클래스 Enum (1) | 2023.03.15 |
[코파기 2부] 6. 코틀린과 늦은 초기화 : lazy, lateinit (0) | 2023.03.15 |
[코파기 2부] 5. 코틀린과 추상 클래스와 인터페이스 (+ 둘의 차이점) (3) | 2023.03.15 |
[코파기 2부] 4. 코틀린과 접근 제한자 (0) | 2023.03.15 |