[Kotlin] 기본 자료형과 참조 자료형
ㅁ 들어가며
ㅇ 자바의 자료형은 기본 자료형(Primitive type)과 참조 자료형(Reference type)이 있지만, 코틀린은 언어 특성 상 null값을 가질 수 있어서 Int, Long, Boolean 등과 같이 구별이 없이 사용된다. 이 차이점이 이해하기 위해 기본 자료형과 참조 자료형에 대해서 정리해 보자.
ㅁ 자료형의 종류
ㅇ 기본자료형(Primitive type)
값을 저장하는 가장 작은 단위로, 값 자체를 변수에 저장한다. 메모리 상에 변수를 저장하기 때문에 null은 저장되지 않는다.
ㅇ 참조 자료형(Reference type)
값이 저장된 메모리 주소를 가리키는 주소값을 저장하는 변수이다. C언어의 포인터와 유사하게 값이 저장된 메모리 주소를 저장하기 때문에 null을 할당할 수 있다.
코틀린은 null을 저장할 수 있기 때문에 기본 자료형을 지원하지 않는고, Nullable 타입을 지원한다.
ㅁ Kotlin 코드
fun main() {
val n1 = 10
val n2: Int = 20
val n3: Int? = 30
println("n1=$n1, n2=$n2, n3=$n3")
}
ㅇ 3가지 변수 선언 형태이다.
- Int를 선언하지 않음
- Int를 선언하되 not null
- Int?으로 선언되어 null 허용
ㅇ 코틀린 코드가 컴파일 된 class를 디컴파일하면 다음과 같다.
ㅁ JAVA 코드
public final class DataTypePrimitiveReferenceTutorialKt {
public static final void main() {
int n1 = 10;
int n2 = 20;
Integer n3 = 30;
String var3 = "n1=" + n1 + ", n2=" + n2 + ", n3=" + n3;
boolean var4 = false;
System.out.println(var3);
}
// $FF: synthetic method
public static void main(String[] var0) {
main();
}
}
ㅁ Kotlin 자료형의 주의점
Kotlin과 Java는 모두 JVM에서 구동된다. 코틀린에서 기본 자료형과 참조 자료형의 구별은 감춰져 있다고 말할 수 있다. 코틀린의 개발의 편의성을 높이기 위해 Java를 캡슐화하여 자료형을 단순화 하였다. 그래서 일반적으로 자료형을 구별없이 사용해도 큰 무리가 없지만, 특정 라이브러리에서는 Parameter와 Argment 타입을 비교하기도 한다.
자바 라이브러리(spring-retry)에서 발췌한 코드이다.
if (!parameterTypes[i].isAssignableFrom(argument.getClass())) {
return false;
}
Parameter가 int이고, Argument가 Integer가 되면 false가 반환하게 되어 사용자가 의도치 않게 동작을 하게 될 것이다.
ㅁ 함께 보면 좋은 사이트
ㅇ devkuma - Kotlin 기본 자료형(Primitive type)과 참조 자료형(Reference type)
ㅇ Meezzi - [Kotlin] 코틀린 기본 자료형(Primitive type)과 참조 자료형(Reference type)