Kotlin에서는 변수를 선언할 때 두 가지 키워드를 사용할 수 있습니다. 하나는 var이고, 다른 하나는 val입니다. 두 키워드 모두 변수를 선언하는 역할을 하지만, 선언 이후에 값을 다시 할당할 수 있는지 여부에서 결정적인 차이가 있습니다. 이 글에서는 실제 예제를 통해 두 선언 방식이 어떻게 다른지 자세히 살펴보겠습니다.
var와 val 핵심 차이점 비교
| 구분 | var | val |
|---|---|---|
| 선언 예시 | var varName = "hello World" | val sName = "tutorialspoint.com" |
| 불변성 | 변경 가능(Mutable) | 변경 불가능(Immutable) |
| 값 할당 횟수 | 여러 번 할당 가능 | 최초 한 번만 할당 가능 |
| 재할당 여부 | 재할당 가능 | 재할당 불가능 |
예제 1: var로 선언한 변수의 값 변경하기
아래 예제에서는 val과 var로 각각 변수를 선언한 뒤, var로 선언한 변수의 값을 새로 할당해 보겠습니다. var로 선언한 변수는 변경 가능하기 때문에 값이 아무 문제 없이 바뀌는 것을 확인할 수 있습니다.
val sName = "tutorialspoint";
var varName = "hello World"
fun main() {
println("Example of val--->"+sName);
println("Example of Var--->"+varName);
// var로 선언한 변수는 변경 가능(mutable)합니다
varName = "new value";
println("New value of the variable declared using Var: " +varName);
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Example of val--->tutorialspoint Example of Var--->hello World New value of the variable declared using Var: new value
예제 2: val로 선언한 변수의 값 변경 시도하기
이번에는 val로 선언한 변수의 값을 변경하려고 시도해 보겠습니다. val은 불변(immutable) 변수를 만들기 때문에, 이미 한 번 할당된 값을 다시 할당하려 하면 오류가 발생합니다.
val sName = "tutorialspoint";
var varName = "hello World"
fun main() {
println("Example of val--->"+sName);
println("Example of Var--->"+varName);
// val로 선언한 변수는 변경 불가능(immutable)합니다
sName = "new value";
println("New value of the variable declared using Var: " +sName);
}
오류 결과
val로 선언된 변수에 새 값을 할당하려고 하면 컴파일 단계에서 다음과 같은 오류가 발생합니다.
main.kt:9:5: error: val cannot be reassigned sName = "new value"; ^
정리: var와 val, 어떤 것을 사용해야 할까?
결론적으로 var는 프로그램 실행 도중 값이 반드시 바뀌어야 하는 변수에, val은 한 번 정하면 더 이상 바뀌지 않는 값에 사용합니다. Kotlin 공식 스타일 가이드에서도 특별한 이유가 없다면 val을 기본으로 사용할 것을 권장합니다. 불변 변수를 사용하면 코드의 예측 가능성이 높아지고, 멀티스레드 환경에서도 안전하며, 의도하지 않은 값 변경으로 인한 버그를 사전에 방지할 수 있기 때문입니다.