변수를 다루는 방법

parkrootseok·2025년 7월 20일
0

코틀린

목록 보기
1/15
post-thumbnail

var과 val

Kotlin은 변수를 선언할 때 반드시 var 또는 val 키워드를 선언해야 합니다. 그렇다면, 이 두 키워드의 차이는 무엇일까요? 이 둘의 차이를 코드를 통해 알아보겠습니다.

아래와 같이 2줄의 변수를 선언하는 Java 코드 작성되어 있습니다. 작성된 2줄의 코드 중 1번은 가변성을, 2번은 불변성을 가집니다. 이를 Kotlin 코드로 변환할 경우 오른쪽과 같습니다.

결과를 살펴보면, 가변성을 가지는 1번은 var 키워드를, 불변성을 가지는 2번은val 키워드가 사용되고 있습니다. 즉, var(variable)는 변수의 가변성을 의미하고, val(value)은 변수의 불변성을 의미하는 것을 알 수 있습니다.

타입 추론

Kotlin은 명시적으로 자료형을 선언하지 않아도 정상 작동합니다. 이는 컴파일러가 변수의 자료형을 유추하는 타입 추론(type inference) 기능을 제공하기 때문입니다. 아래 예시처럼 1번과 2번 코드는 동일한 역할을 수행합니다.

단, 타입을 생략할 경우 반드시 초기값이 필요합니다. 이는 초기값이 없으면 타입 추론이 불가하기 때문입니다. 실제로, 초기값과 타입 모두 명시하지 않을 경우 아래와 같이 컴파일 오류가 발생합니다.

Primitive Type

Java의 경우 사용 목적에 따라 Primitive Type과 Reference Type을 구분하여 사용하지만, Kotlin은 구분 없이 사용합니다. 실제로, Kotlin Docs의 Basic Types를 살펴보면 아래와 같은 내용이 존재합니다.

해석해보면 "런타임에서 특정 타입(숫자, 문자, 불리언 등)은 성능을 최적화하기 위해 내부적으로 원시 값으로 표현될 수 있지만, 개발자 관점에서는 일반 클래스처럼 보이고 동작합니다." 라고 명시되어 있습니다.

즉, Kotlin은 타입을 클래스처럼 작성해도 실제 컴파일 시에는 성능을 고려해 primitive 타입으로 변환됩니다. 이러한 동작을 실제로 확인하기 위해, Kotlin 코드를 Java로 Decompile해보면 long으로 선언된 것을 확인할 수 있습니다.

Nullable

Kotlin은 Java와 달리 Primitive Type과 Reference Type을 구분하지 않습니다. 하지만, 여기서 중요한 차이가 하나 있습니다. Java의 Reference Type은 null을 가질 수 있지만, Primitive Type은 그렇지 않습니다.

이 차이를 보완하기 위해, Kotlin에서는 null을 허용하려면 아래 예시와 같이 자료형 뒤에 ?를 명시해야 합니다.

Kotlin은 이처럼 ?를 통해 null 가능성을 명시적으로 표현함으로써,
NullPointerException을 예방하고 컴파일 타임에 안정성을 확보하는 장점을 제공합니다.

Instance

Java에서는 클래스를 인스턴스화할 때 반드시 new 키워드를 사용해야 합니다.
하지만, Kotlin은 new 키워드를 사용하지 않고 클래스 이름을 함수처럼 호출하여 인스턴스를 생성합니다.

profile
동료들의 시간과 노력을 더욱 빛내줄 수 있는 개발자가 되고자 노력합니다.

0개의 댓글