Idealim
article thumbnail

/* 본 게시물은 ' ' 의 내용을 토대로 작성되었습니다. */

참고 자료

코틀린 공식 문서에 따르면 코틀린에서 배열은 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 를 구별할 필요는 없을 것이다. (컴파일러가 처리해줌)

그래도 이번에 배열을 공부하면서 자료형 부터 컴퓨터 메모리에 대한 내용들을 자세히 공부할 수 있었다. 

 

 

 

 

 

 

반응형
profile

Idealim

@Idealim

읽어주셔서 감사합니다. 잘못된 내용이 있으면 언제든 댓글로 피드백 부탁드립니다.