/* 본 게시물은 ' ' 의 내용을 토대로 작성되었습니다. */
참고 자료
[Kotlin] 자료형과 변수 심화:
코틀린 공식 문서에 따르면 코틀린에서 배열은 Array 클래스로 표현된다.
class Array<T> private constructor() {
val size: Int
operator fun get(index: Int): T
operator fun set(index: Int, value: T): Unit
operator fun iterator(): Iterator<T>
// ...
}
코드를 확인해보면 제너릭을 통해 참조형 자료형(객체)을 요소로 가지는 Array를 만드는 것을 확인할 수 있다. 코틀린에서는 배열의 요소로 기본 자료형을 가지는 배열도 나타내는 클래스도 존재한다.
Array<Int> 와 IntArray 를 비교하면 두 개의 차이를 알 수 있을 것이다.
val arr1: Array<Int> = arrayOf(1,2,3)
val arr2: IntArray = intArray(1,2,3)
위 코드를 역 컴파일 해보면 다음과 같다.
Array<Int> 는 Integer 객체를 IntArray 는 int형을 배열의 요소로 가지는 것을 확인할 수 있다. 잠시 Integer 와 int 의 차이에 대해서 설명하고 가겠다.
Integer 객체는 기본 자료형인 int 를 참조형 자료형으로 바꾼 wrapper class이다. (*wrapper class : 기본 자료형을 참조 자료형(객체)으로 만든 클래스)
wrapper 클래스를 왜 사용할까?
기본적으로 참조 자료형은 변수에 객체의 주소를 저장하기 때문에 null을 가질 수 있다. null 을 처리할 수 있다는 점에서 사용한다. 단, wrapper 클래스 자료형은 직접적인 산술 연산이 불가능하다.
결론
Array<T> 는 참조형 자료형(객체)를 데이터의 요소로 가진다. IntArray 와 같은 기본 참조형 array는 기본형을 데이터의 요소로 가진다.
사실 코틀린으로 개발하면서 int 와 Integer 를 구별할 필요는 없을 것이다. (컴파일러가 처리해줌)
그래도 이번에 배열을 공부하면서 자료형 부터 컴퓨터 메모리에 대한 내용들을 자세히 공부할 수 있었다.