(1) Type
- 원시 타입(Primitive Type) : 변수에 할당 될 때 메모리 상에서 고정된 크기로 할당되며, 원시 데이터의 값을 보관. 값이 저장된 메모리 영역에 직접적으로 접근. [Access By Value]
- 참조 타입(Reference Type) : 크기가 정해져 있지 않고 값이 직접 변수에 할당되지 않고 값이 저장되어 있는 Heap Memory의 주소값을 가짐. [Access By Reference]
- Stack (정적 메모리 영역) : 변수의 실제 값을 저장하는 영역. 객체 내 메소드 작업 종료 시 메모리 공간은 비워진다.
- Heap (동적 메모리 영역) : 런타임 시 메모리에 동적으로 할당되는 영역. 참조 변수가 없으면 가비지 컬렉터에 의해 메모리가 정리될 수 있다. 가비지 컬렉터에 의해 메모리 관리가 이루어진다.
- Boxing : 원시타입을 참조타입으로 변환
- Unboxing : 참조타입을 원시타입으로 변환
- 코틀린에서의 타입은 모두 객체이다. 코틀린에서 원시타입/참조타입 구분하지 않는다.
- Number Type은 런타임 시 JVM에 의해 원시타입으로 변환된다.
- 예외적으로 Nullable Type은 참조타입으로 변환된다.
(2) String
- 기본적으로 String Type은 변경 불가능한 타입으로, 값을 변경하는 것이 아닌 새롭게 할당하는 것이다.
(3) Array
- 코틀린에서 배열은 Array Class를 통해 표현된다. arrayOf() 함수를 통해 배열을 선언 할 수 있다.
- 그러나 아래와 같이 arrayOf()를 통하면 Boxing 현상으로 인해 추가적인 오버헤드가 발생할 수 있다.
val array: Array<Int> = arrayOf(1,2,3,4,5)
- 위 오버헤드를 방지하기 위해 코틀린에서는 IntArray, ByteArray 형태의 원시타입 배열이 존재한다.
val intArray = IntArray(5) // [0, 0, 0, 0, 0]
참고 : https://sabarada.tistory.com/165
'Kotlin' 카테고리의 다른 글
[Kotlin] object / companion object를 통한 Java의 static 키워드 대체 (0) | 2021.11.20 |
---|---|
[Kotlin] Class, Interface 새로 배운 학습 정리 (0) | 2021.11.12 |
[Android, Kotlin] apply, also, let, with, run의 사용 - 범위 지정 함수 (0) | 2021.11.11 |
[Kotlin] 상속 변경자 open, abstract 차이 (0) | 2021.11.11 |
[Kotlin] 접근제한자, 제네릭 (0) | 2021.11.11 |