Hello

Kotlin Basic - 코틀린의 기본 자료형과 저장장소(자바와 비교)

by 볼빵빵오춘기

 

코틀린의 자료형과 저장장소를 자바와 비교하기위해서는 먼저 자바의 자료형과 저장장소에 대해 먼저 알아볼 필요가 있다.

  • 자바에서는 기본형(primitive type)과 참조형(reference type)으로 타입이 구분된다.
    • 기본형 타입: char, byte, short, int, long, float, double, boolean
    • 참조형 타입: String, 사용자 정의 클래스 등
  • 자바에서는 기본형 타입은 스택에 저장이 되고, 참조형 타입은 힙에 저장이 된다.

 

코틀린의 기본 타입은 전부 객체?

  • 코틀린에서는 Int, Boolean, Double 등 기본 타입도 전부 객체(Object)처럼 보인다.
  • 아래 코드처럼 메서드를 사용할 수 있으니 “객체인가?” 싶지만, 실제로는 코틀린도 JVM 위에서 동작하므로, 코틀린 코드는 자바 바이트코드로 컴파일된다.
val num: Int = 10
println(num.compareTo(5)) // 객체처럼 메서드 호출 가능

 

실행 시에는 primitive로 변환된다

실행 성능을 위해, 코틀린의 Int, Boolean 등은 자바의 int, boolean과 같은 primitive type으로 변환된다.

이를 오토 박싱(auto-boxing, 기본형 → 객체로 변환) 및 언박싱(unboxing, 객체 → 기본형으로 변)이라고 부른다.

코틀린 타입  자바 변환 타입 저장 위치 비고
Int int 스택 primitive
Long boolean 스택 primitive
Short short 스택 primitive
Byte byte 스택 primitive
Double double 스택 primitive
Float float 스택 primitive
Boolean boolean 스택 primitive
Char char 스택 primitive
String String 참조 타입

 

nullable 타입은 객체로 처리된다

Int?, Boolean?과 같이 null 허용 타입은 primitive로 표현할 수 없기 때문에, 자바의 래퍼 클래스로 변환된다. (Integer, Boolean 등).

val age: Int? = null
// → 자바에서는 Integer age = null;
// 이 경우 힙에 저장되는 참조 타입이다.

 

박싱(Boxing)이 발생하는 경우

기본형 타입이라도 컬렉션 등 객체 컨텍스트에 들어갈 때는 자동으로 박싱되어 힙에 저장이 된다.

val list = listOf(1, 2, 3)
// → List<Int>는 List<Integer>로 변환된다.
// Int는 Integer 객체로 박싱되어 힙에 저장된다.

 

언박싱(unboxing)이 발생하는 경우

val a: Int? = 10   // nullable 타입 → 박싱됨 (Integer 객체)
val b: Int = a!! + 5  // !!는 null 아님을 보장 → 언박싱 발생
println(b) // 출력: 15

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기