-
[Kotlin] val과 var의 차이와 사용Kotlin 2021. 3. 19. 23:40
var과 val은 kotlin을 사용함에 있어서 가장 많이 쓰게 되는 기본 구문이면서
처음 접하게 되었을 때 조금 헷갈릴 수 있다.
이에 간단하게 설명하는 글을 작성하게 되었다.
1. val과 var의 차이점
우선 차이점에 대해 이야기해보자면 kotlin에서
class 내부 속성인 프로퍼티를 선언할 때는 var과 val 키워드를 사용할 수 있다.
이때,
val : 변경할 수 없는 속성, 즉 상수(immutable)을 의미하고
var : 변경이 가능하여 값을 재할당 할 수 있는 속성, 즉 변수(mutable)를 의미한다.
Java에서 var과 final을 사용하는것과 같다고 볼 수 있다.
다음은 코틀린에서 변수와 상수를 선언하고 값을 할당하는 코드이다.
// 상수 a를 선언하고 값을 11로 지정하였다.
val a: Int = 11
// 변수 b를 선언하고 값을 22로 지정하였다.
var b: Int = 222. kotlin에서 변수와 상수의 선언과 사용
참고로 코틀린은 자료형을 쓰지 않아도 스스로 추론하기 때문에 자료형을 생략할 수 있다.
// 상수 aStr을 선언하고 값을 a로 지정하면 스스로 String임을 인지한다.
// 다음은 var aStr: String = "a"와 같다.
val aStr = "a"
// 변수 bStr을 선언하고 값을 b로 지정해도 스스로 String으로 선언된다.
// 역시 var bStr: String = "b"와 같다.
var bStr = "b"위에서 val로 선언된 aStr은 상수이므로 값을 재할당 할 수 없으나 var로 선언된 bStr은 변수이므로 재할당이 가능하다.
val aStr = "a"
var bStr = "b"
aStr = "aa" // 상수인 aStr에 값을 재할당 할 수 없다.
bStr = "bb"위의 코드에서 bStr의 경우 var, 즉 변수로 선언하였기에 이후 값을 "bb"로 재할당하는 것이 가능하지만,
aStr은 val, 상수로 선언했으므로 "aa"로 값을 재할당하려고 시도하면 컴파일 에러를 만날 수 있다.
즉 val로 선언된 상수는 Java에서 사용되는 final에 대응한다고 볼 수 있다.
이렇게 kotlin에서 val, var을 선언하면 속성만을 지니는 것이 아니라 getter와 setter를 내부적으로 만들어주는 것을 확인할 수 있다.
3. kotlin에서의 null 허용
코틀린은 기본적으로 null을 허용하지 않기때문에 모든 객체는 생성과 동시에 값을 대입하여 초기화해야 한다.
다음을 보자.
val aStr: String // error : 초기화를 하지 않았기에 에러가 난다.
val bStr: String = null // error : 기본적으로 null을 허용하지 않기 때문에 또 에러가 난다.위 코드처럼 초기화를 해주지 않으면 에러가 나고 null로 초기화를 해도 또 에러가 나는 코틀린에서는 어떻게 해야 할까?
아주 쉽다. kotlin에서의 null 허용은 자료형 끝에 물음표?를 붙여주면 된다.
val aStr: String? = null
아주 쉽다.
코틀린을 시작하면서 어쩌면 "Hello World" 보다도 먼저 만나게 되는 val과 var에 대해 알아보았다.
다음은 이해하지 않고 지나치면 골치 아파지는 초기화 이야기를 해보겠다.
'Kotlin' 카테고리의 다른 글
[Kotlin] 데이터 클래스(Data Class) 이해하기(1) (0) 2021.03.19