관리 메뉴

나만을 위한 블로그

[Kotlin] 코틀린에서의 변수 선언법(val과 var의 차이, null) 본문

개인 공부/Kotlin

[Kotlin] 코틀린에서의 변수 선언법(val과 var의 차이, null)

참깨빵위에참깨빵_ 2020. 10. 17. 18:42
728x90
반응형

코틀린을 사용할 때 변수를 선언하려면 아래와 같이 한다. 띄어쓰기는 굳이 할 필요 없다.

 

val 변수명: 타입

var 변수명: 타입

 

String을 써서 문자열 데이터를 집어넣는다면 아래와 같이 할 수 있다.

 

val name: "Tistory"

 

그리고 코틀린에선 자바처럼 세미콜론(;)을 붙일 필요가 없다. 맨날 쓰다 안 쓰려니까 허전하다

처음에 이 부분을 보고, val과 var로 나눠쓰는 이유가 궁금했다.

그래서 상상해봤다. 특징이 다른 걸 강조하기 위함인가? 그냥 단순하게 철자가 다른가? int와 Integer의 차이같은 건가? 여러가지로 상상해봤지만 답은 서로 특징이 다르기 때문이었다.

 

  • val

먼저 val은 Valueable의 줄임말이다. Valuable의 사전적 의미는 "소중한, 귀중한, 가치가 큰"이다.

이 키워드가 붙은 변수는 읽을 수만 있고 수정할 수는 없는 변수가 된다. 자바로 치면 final 키워드가 붙은 변수라고 생각하면 된다. 하긴 소중한 것이니 함부로 바뀌면 안 될 것이다.

한번 간단한 예시를 보자.

 

fun main(args: Array<String>)
{
    val a: String = "aaa"
    a = "bbb"
}

val 키워드를 갖는 String 형의 a란 변수를 만들고, 안에 aaa 문자열을 저장했다.

그리고 바로 밑에서 a에 "bbb"라는 값으로 바꿔치기하기를 시도했다. 이렇게 하면 a = "bbb"의 a 아래에 빨간 줄이 생긴다. 마우스를 갖다대면 아래와 같은 문구가 나온다.

 

 

reassign은 "다시 맡기다" 란 뜻이 있는 동사다. 즉 위 문구는 val을 사용한 변수에는 값을 재할당할 수 없다는 뜻이다.

근데 난 당장 죽어도 a에 bbb라는 문자열을 넣고 싶다면 어떻게 해야 할까?

 

  • var

그럼 val을 var로 바꾸면 된다. 그럼 끝이다.

여기서 var이 어떤 특징을 갖고 있는지 추측해볼 수 있다. var은 읽기/쓰기가 가능한 변수를 만드는 키워드다.

추측이 맞는지 확인해보자.

 

fun main(args: Array<String>)
{
    var a: String = "aaa"
    a = "bbb"
    println(a)
}

이제 println()도 넣어서 출력도 해보자. 그럼 아래와 같은 결과가 출력된다.

 

 

그리고 자바를 써봤다면 절대로 1번은 꼭 보거나 듣는 것이 Null이다. 앱 개발할 때 이놈보면 저혈압이 완치된다

코틀린에는 Non-null 타입과 Nullable이란 타입이 있다. 이름 보면 무슨 특징을 가진 놈들인지 각이 보인다.

 

Non-null 타입 = 앞에 Non이 붙었으니 Null을 값으로 가질 수 없다

Nullable 타입 = Null 뒤에 can과 같은 의미인 able이 붙었으니 Null을 가질 수 있다

 

그럼 코드로는 어떻게 표현할까? 위의 코드를 고쳐서 a에 null이란 값을 넣어보자.

 

fun main(args: Array<String>)
{
    val a: String = null
}

그럼 아래와 같은 에러가 null 밑에 나타난다.

 

 

대충 번역기 돌리면 "Null은 null이 아닌 유형의 문자열 값이 될 수 없습니다" 라는 뜻이다.

여기서 정보를 하나 얻었다. String은 Non-null 타입의 자료형이란 것이다.

아무튼 나는 a에 null을 넣어야 한다. 즉, Nullable한 변수로 만들고 싶다. 어떻게 하면 될까?

 

방법은 간단하다. String 뒤에 ?만 붙이면 된다.

 

fun main(args: Array<String>)
{
    val a: String? = null
}

 

이렇게 하면 String 변수라도 Nullable한 String 변수가 되버린다.

이걸 출력하면 콘솔창에 null이 출력된다.

 

정리하자.

  • val 키워드로 변수를 선언 및 초기화하면 다른 값으로 바꿔치기할 수 없다.
  • var 키워드로 변수를 선언 및 초기화해도 다른 값으로 바꿔치기할 수 있다.
  • 코틀린은 Non-null, Nullable 2가지 타입이 있다. Nullable한 변수로 만들려면 자료형 뒤에 ?을 붙인다.

 

자바와 형태가 다를 뿐이지 짧게 공부하고 사용해본 결과 확실히 자바보단 코틀린이 더 편한 것 같다.

반응형
Comments