[Kotlin] var과 val의 차이는 무엇인가?
변수란 무엇인가?
변수는 값(데이터)을 저장하는 메모리 공간에 붙은 이름이다. 이름처럼 고전적인 변수는 값을 읽고 쓰는 것을 모두 지원한다. 실제로 다른 프로그래밍 언어인 Java나 Python등에서는 변수를 만들면 값을 쓰고 읽을 수 있다.
하지만 변수의 값이 바뀔 수 있는 부분이 많아진다는 것은 프로그램에 오류가 일어날 수 있는 부분이 많아진다는 것을 뜻한다. 때문에 최근 함수형 프로그래밍 패러다임에서는 값의 불변성을 중요하게 다룬다. 이에 대해 코틀린은 값이 변할 수 있는 가변 변수인 변수(var)와 값이 변할 수 없는 불변 변수(val) 두가지의 변수를 지원한다.
코틀린에서 지원하는 변수의 종류 : var, val
코틀린에서 지원하는 변수의 종류는 다음과 같다.
val: 불변(Immutable) 변수로, 값의 읽기만 허용되는 변수. 값(Value)의 약자이다.
var: 가변(Mutable) 변수로, 값의 읽기와 쓰기가 모두 허용되는 변수. 변수(Variable)의 약자이다.
실제 코틀린의 가변 변수와 불변 변수는 값이 저장된 메모리 공간을 가리키며 같은 메모리 공간 내에서는 값이 변할 수 있기 때문에 가변 변수와 불변 변수는 엄밀히 말하면 가변 변수와 불변 변수가 아니게된다. 이는 이후 심화에서 다루도록 한다.
변수에 값 할당하기
변수에 값을 할당하는 방식은 간단하다. 먼저 처음에 변수의 값이 변경될 수 있는지에 따라 val 또는 var을 쓴다. 이후 변수명을 쓰고 뒤에 =을 쓴다음 해당 변수에 저장하고자 하는 값을 입력한다. 그러면 해당 값이 저장된 메모리 공간이 변수에 할당된다.
위의 방식에 따라 이 블로그를 위한 변수 두가지를 만들어보도록 하겠다. 먼저 val blogName 이라는 변수에 "Kotlin World" 라는 단어를 할당할 것이며, var date라는 변수에 "2021-10-02"를 할당할 것이다.
재할당 할 수 없는 val
자 이제 val로 선언된 blogName 에는 "Kotlin Blog"를 할당해보자.
그러면 오류 표시(빨간 줄)와 같이 Val cannot be reassigned(Val은 재할당 될 수 없습니다) 라는 오류가 생긴다. 이는 값을 다시 할당 할 수 없도록 val로 선언되었기 때문이다.
값을 재할당 할 수 있는 var
이번에는 var로 선언된 date에 "2021-10-03"이라는 단어를 할당해보자.
date에 "2021-10-03" 이오류 표시 없이 잘 할당된 것을 볼 수 있다. 이를 확인하기 위해 해당 값을 콘솔창에 프린트 해보자.
위와 같이 main함수를 작성한 후 fun 왼쪽의 재생버튼을 누르면 "2021-10-03"이 출력되는 것을 확인 할 수 있다.