Kotlin에서 변수 선언을 할 때, 변수의 특성에 따라 val과 var을 선택해야 합니다. 두 키워드는 각각 불변(Immutable)인지 가변(Mutable)인지를 정의한다는 차이점이 있지만, 공통적으로 초기화시에 값을 할당하지 않는다면 반드시 Type을 명시해야합니다. 단, compiler가 변수의 type을 추론할 수 있는 경우에는 type을 생략해도 됩니다.
먼저 val(value)은 불변 변수로, 초기화할 때 값을 할당하면 나중에 값을 변경할 수 없습니다. 변수의 값을 변경하려고 시도하면 error가 발생합니다. val은 초기화 이후 값의 변경이 불가능하지만 변수의 참조가 가리키는 객체의 내부 값은 변경이 가능합니다. 코드의 안전성, 예측 가능성을 높여야할 때 val을 사용해야 합니다.
val number: Int = 10
number = 20 // val 변수 초기화 이후 값 변경 시도로 인한 오류 발생
val count = 1 // int type으로 compiler가 type 추론
val students = mutableListOf("Alice", "Bob", "Charlie")
students[0] = "Jessie"
println(students) // ["Jessie", "Bob", "Charlie"]
students = mutableListOf("John", "Doe") // 참조 변경으로 인한 오류 발생
var(variable)은 가변 변수로, 초기화 이후 값을 변경할 수 있습니다. 하지만 초기화 당시 명시한 type가 다른 type의 값을 넣을 수는 없습니다. 이미 정의된 type을 변경하려면 형변환을 해야합니다. 프로그램 실행 중 값이 변수의 값이 변경될 가능성이 있거나, 상태가 변하는 데이터를 다룰 때 var을 사용해야 합니다.
var number: Int = 10
number = 20
var name: String = "Roy"
name = 10 // type 불일치로 인한 오류 발생