ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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 = 22

    2. 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
Designed by Tistory.