코틀린에서 변수를 사용할 때의 유의사항을 알아봅시다.
변수란 어떤 값을 담을 수 있도록 선언해 놓은 것이라고 생각하면 됩니다. 코틀린에서는 var과 val 두 가지의 키워드를 통해 변수를 선언할 수 있습니다.
var로 선언된 변수는 초기화된 후에도 해당 변수에 다른 값을 넣을 수 있는 가변형 변수입니다. 코드를 통해 선언 방법과 특징을 살펴봅시다.
// kotlin
fun main() {
var number: Int = 5
number = 6
println(number)
}
위 코드를 실행시켜보면 6이 출력되는 것을 확인할 수 있습니다.
값이 바뀔 필요가 없는 변수(불변 변수, immutable variable)에 대해서는 val로 선언할 수 있습니다. 이는 값이 변해서는 안 되는 변수에 대해 코드상의 안정성을 부여하기 위한 것으로 보입니다. val 변수의 선언 방법과 특징을 살펴봅시다.
// kotlin
fun main() {
val number: Int = 5
// number = 6 에러 발생
println(number)
}
위 코드에서 number 변수가 val로 선언되었기 때문에 5로 초기화된 이후 6을 number의 값으로 넣으려고 하면 에러가 발생합니다.
변수를 선언할 때 자료형을 지정하지 않고도 코틀린은 해당 변수에 어떤 값이 들어가느냐에 따라 자료형을 추론해냅니다.
fun main() {
var number = 5 // number는 Int형
val str = "안녕하세요" // str은 String형
// number = str !! type missmatch 오류
}
fun main() {
var number = 5 / 2
println(number is Int) // true
}
따라서 한정적인 값만 갖는 변수라거나, Int형 변수가 담을 수 있는 범위를 넘어가는 값을 가질 수 있는 변수들은 Byte, Short, Long형으로 명시적으로 지정해야 합니다.
fun main() {
var number: Double = 5
// integer literal does not conform to the expected type Double
}
같은 이유에서 파생된 예시코드입니다. 리터럴 연산 간 좌우에 Int형 리터럴이 있으면 Int로 추론되기 때문입니다.
fun main() {
var number2: Double = 5 / 2
// type missmatch
}
따라서 다음과 같은 상황도 주의해야되겠습니다.
fun main() {
var number: Double = 5 / 2 + 0.7
println(number) // 2.7
}
5 / 2 는 Int로 추론되어 소수점을 제외한 2가 남기 때문입니다.
공부하면서 추가해야될 부분이 생기면 계속 추가됩니다.