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
'👩🏻💻 About 프로그래밍 > Kotlin' 카테고리의 다른 글
Kotlin Basic - 스마트 캐스트(Smart Cast), Number형, is 연산자, as 연산자 (1) | 2025.06.08 |
---|---|
Kotlin Basic - typealias, !!, :?, ?. (0) | 2025.06.08 |
Kotlin Basic - 자료형(기본자료형, Nullable, Any, Unit, Nothing) (0) | 2025.06.05 |
Kotlin Basic - 변수(variable), val, var (1) | 2025.06.04 |
Kotlin Basic - fun main() (0) | 2025.06.04 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기