Programming Language/Kotlin

[Kotlin] var, val 그리고 const val

개발왕 금골드 2020. 12. 16. 02:30
반응형

안녕하세요 골드입니다. Kotlin이라는 언어를 사용한다면 너무나도 당연하게 쓰는 var과 val 키워드가 있습니다. 이번 글에서 이 둘의 차이점에 대해서 알아보고 비슷하지만 다른 val과 const val의 차이점에 대해서도 알아보도록 하겠습니다.

 

1. var

 var은 variable를 의미하며, Kotlin에서 변수를 선언할 때 쓰는 키워드입니다. 흔히 말하는 기본 자료형 혹은 객체 참조 모두 var 키워드를 사용한 변수에 할당할 수 있습니다. var 키워드로 선언된 변수는 값을 변경할 수 있습니다. 변수를 선언할 때, 타입을 같이 작성할 수도 있습니다. 다만, 선언하면서 초깃값을 지정하였다면 변수의 타입을 생략할 수 있도록 코틀린은 타입 추론(type inference) 기능이 있습니다.

 

2. val

 var로 변수를 선언하는 방법 말고 val로 선언하는 방법이 있습니다. val은 value를 의미합니다. val 키워드를 사용한 변수는 문맥상 단 한 번만 초기화할 수 있습니다. 흔히 var 키워드는 mutable(변경가능)이라고 표현하고 val은 immutable(변경 불가능)이라고 표현합니다. 함수형 프로그래밍의 특징이며 틀린 얘기는 아닙니다. 다만, 누군가는 val 키워드에 대해 읽기 전용(read-only)이라는 표현을 사용하기도 합니다. 예제를 보면 이해가 쉽습니다.

 먼저 val 키워드를 사용한 변수를 변경하려고 시도했을 때, 오류가 발생하는 모습을 볼 수 있습니다. 변경이 불가능하도록 설계되어 있기 때문입니다. 

 마찬가지로 val 키워드로 mutableList를 하나 생성하였습니다. 그런데 list 변수에 값을 추가하는 데 아무런 문제가 없습니다. 새로운 mutableList를 할당하였더니 오류가 발생하는 것을 볼 수 있습니다. 정리하면 val키워드로 값을 저장했을 경우 해당 변수는 변경할 수 없습니다. 만약 변수가 객체에 대한 참조값을 저장하고 있다면 객체의 내부값은 변경이 가능합니다. 그래서 읽기 전용이라는 말을 사용하기도 하는 것입니다. 이 부분은 call by value와 call by reference의 차이를 이해하신다면 쉽게 이해할 수 있는 내용입니다. 변수에 값을 직접 저장하느냐 혹은 객체에 대한 참조, 주소 값을 저장하느냐 차이입니다. 

 

3. const val

 간단하게 생각했을 때 val은 변경이 불가능한 상수를 저장한다고 생각할 수 있습니다. const는 상수를 정의하기 위한 키워드입니다. 그렇다면 const라는 키워드는 왜 필요한 것일까요? const는 컴파일 시점에 값이 할당되어 있어야 합니다. 반면에 val은 사용되기 전(지역변수) 혹은 변수 선언시(파일수준) 값이 할당되어 있다면 됩니다. 컴파일 시점에 값이 할당되어 있어야 한다는 것은 함수나 클래스 생성자로 할당될 수 없고, 기본 자료형으로 할당되어야 한다는 뜻입니다. 또한, 지역변수에 사용할 수 없습니다.

const로 변수를 선언할 경우 우리가 흔히 아는 기본 자료형 int, boolean, float (String도 가능. String만 예외) 등으로 초기화해야 합니다. 

 

여기까지 골드였습니다.

감사합니다.

 

참고자료 : stackoverflow.com/questions/37595936/what-is-the-difference-between-const-and-val

 

What is the difference between "const" and "val"?

I have recently read about the const keyword, and I'm so confused! I can't find any difference between const and the val keyword, I mean we can use both of them to make an immutable variable, is th...

stackoverflow.com

빅 너드 랜치의 코틀린 프로그래밍 제이펍 조시 스킨, 데이비드 그린핼프 지음 2019년 발행

반응형