관리 메뉴

피터의 개발이야기

[Kotlin] 기본 자료형과 참조 자료형 본문

Programming/Kotlin

[Kotlin] 기본 자료형과 참조 자료형

기록하는 백앤드개발자 2024. 5. 13. 10:24
반응형

ㅁ 들어가며

ㅇ 자바의 자료형은 기본 자료형(Primitive type)과 참조 자료형(Reference type)이 있지만, 코틀린은 언어 특성 상 null값을 가질 수 있어서 Int, Long, Boolean 등과 같이 구별이 없이 사용된다. 이 차이점이 이해하기 위해 기본 자료형과 참조 자료형에 대해서 정리해 보자.

 

ㅁ 자료형의 종류

기본자료형(Primitive type)

 값을 저장하는 가장 작은 단위로, 값 자체를 변수에 저장한다. 메모리 상에 변수를 저장하기 때문에 null은 저장되지 않는다.

 

참조 자료형(Reference type)

  값이 저장된 메모리 주소를 가리키는 주소값을 저장하는 변수이다. C언어의 포인터와 유사하게 값이 저장된 메모리 주소를 저장하기 때문에 null을 할당할 수 있다. 

 

 코틀린은 null을 저장할 수 있기 때문에 기본 자료형을 지원하지 않는고, Nullable 타입을 지원한다. 

출처: devkuma - 기본 자료형과 참조 자료형

 

ㅁ 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)

반응형

'Programming > Kotlin' 카테고리의 다른 글

[Kotlin] 널 안정성, Null safety  (0) 2024.05.15
[Kotlin] 변수 선언  (0) 2024.05.14
[Kotlin] 데이터 타입  (0) 2024.05.12
[Kotlin] 기본 문법  (0) 2024.05.11
[Kotlin] 개발 환경 세팅  (0) 2024.05.09
Comments