빠르게 살펴보기
코틀린의 배열을 처음 접한 형태는 다음과 같았습니다. 이러한 형태는 고정된 값이 있고 고정된 크기로 생성된 경우입니다.
fun main(args: Array <String>) {
var arr = arrayOf(1, 2, 3)
for (i in arr) {
print("$i ")
}
}
1 2 3
물론 값은 바꿀 수 있습니다.
fun main(args: Array<String>) {
var arr = arrayOf(1, 2, 3)
arr.set(1, 4)
arr[2] = 5
for (i in arr) {
print("$i ")
}
}
1 4 5
그런데 보통 이렇게 엘리먼트를 일일이 직접 채워서 배열의 크기를 정하지 않습니다. 자바를 생각해봐도 배열의 크기를 직접 지정해줍니다. 코틀린도 당연히 가능합니다.
fun main(args: Array<String>) {
var arr1 = Array(5, { 0 })
arr1[0] = 1
arr1[1] = 2
for (i in arr1) {
print("$i ")
}
}
1 2 0 0 0
크기가 5이고 엘리먼트가 0으로 초기화된 배열이 만들어졌습니다. 물론 이 배열 역시 값을 재할당 할 수 있습니다. 단, 위와 같이 사용 시 생략된 제네릭 타입은 <Int>입니다.
var arr1 = Array<Int>(5, { 0 })
이러한 형태이기 때문에 배열의 각 엘리먼트에 저장되는 값은 정수 0이 아닙니다. Int의 참조를 따라가 보면 다음과 같이 클래스 형태입니다.
public class Int private constructor() : Number(), Comparable<Int>
따라서 배열의 각 엘리먼트는 해당 기본 유형(primitive type) 즉, Integer의 인스턴스를 저장합니다. 이 경우 배열의 크기가 크면 메모리도 많이 소모됩니다. 그래서 코틀린은 기본 유형을 저장하기 위한 전문 클래스를 가지고 있다고 했습니다. (배열 1편 참조)
int의 경우 IntArray이며 이 또한 Array와 같은 형태로 배열의 크기 지정 및 엘리먼트를 초기화할 수 있습니다.
fun main(args: Array<String>) {
var arr = IntArray(5, { 0 })
arr[0] = 1
arr[1] = 2
for (i in arr) {
print("$i ")
}
}
1 2 0 0 0
이런 식으로 자바에서 사용하던 배열의 방식을 그대로 코틀린으로 사용할 수 있습니다.