Kotlin

[Kotlin] IntArray 와 Array<Int> 의 차이

효모. 2023. 3. 25. 20:08

문제

코틀린으로 숫자 배열을 다뤄야 하는데, IntArray 로 리턴해야 하는 함수에 Array 타입으로 리턴하니 타입 불일치 에러가 발생했다.

둘 다 숫자가 들어있는 배열이 아닌가?

`Array` 와 `IntArray`는 모두 Int 타입의 요소를 보유할 수 있는 유형이지만, 다음과 같은 차이점이 있다.

1. 초기화 방법

Array 는 arrayOf 함수로 초기화 해야 하고, IntArray 는 intArrayOf 함수로 초기화한다.

val a: Array<Int> = arrayOf(1, 2, 3)     
  // initialized using arrayOf function
val b: IntArray = intArrayOf(1, 2, 3)    
  // initialized using intArrayOf function

println(a[0])   // prints 1
println(b[0])   // prints 1

2. Nullablity

Array 는 Int 또는 null 값의 객체를 보유할 수 있으나 IntArray 는 널이 될 수 없다.

이는 IntArray 값을 boxing 및 unboxing 할 필요가 없기 때문에 더 메모리 효율적이고 속도가 빠름을 의미한다.

  // allows null values
  a[0] = null     
  // does not allow null values, generates compile-time error
  // b[0] = null  

3. 상속

IntArray 는 Array 의 하위 클래스이므로, IntArray 는 Array의 속성과 함수를 모두 상속받을 뿐 아니라 기본형 배열에만 적용되는 몇 가지 추가 함수도 갖게 된다.

a.forEach { println(it) }   // prints 1, 2, 3
b.forEach { println(it) }   // prints 1, 2, 3

println(a.sum())    // uses autoboxing to sum the Integer values, prints 6
println(b.sum())    // uses primitive addition to sum the int values, prints 6

따라서 일반적인 Int 배열은 IntArray 를 사용하고,
null 이 될 수 있는 값이라면 Array 를 사용하는 것이 좋다.