Kotlin 배열(Array) 선언, 초기화, 주요 함수

배열을 선언하고 초기화하는 방법을 소개한다.

배열(Array)

arrayOf()으로 배열을 생성한다. 배열의 개수는 고정이긴 하지만 성능이 우수하다.

fun main() {
    val nums = arrayOf(1, 2, 3)
    val cols = arrayOf("Red", "Green", "Blue")

    for (n in nums) { println(n) }
    for (c in cols) { println(c) }
}

Output:

1
2
3
Red
Green
Blue

아래와 같이 변수 선언시에 Array<Int> 타입을 입력하면, 뒤 부분의 타입은 <>으로 생략할 수 있다.

val array: Array<Int> = emptyArray<>()

대괄호 [...]로 배열의 요소에 접근할 수 있으며, 배열의 인덱스는 0부터 시작한다.

println(nums[0])
println(cols[1])

빈(Empty) 배열 선언

아래 함수로 특정 타입의 빈 배열을 선언할 수 있다.

val array1 = emptyArray<Int>()
val array2 = arrayOf<Int>()
``

```kotlin
fun main() {
    val array1 = emptyArray<Int>()
    println("array1: ${array1.contentToString()}")

    val array2 = arrayOf<Int>()
    println("array2: ${array2.contentToString()}")
}

Output:

array1: []
array2: []

배열 선언 시, 초기 값 설정

arrayOf<Type>(values)로 배열에 초기 값을 설정할 수 있다. 이때, (values)로 타입을 유추할 수 있기 때문에 <Type>은 생략할 수 있다.

fun main() {
    val array1 = arrayOf<Int>(1, 2, 3, 4)
    println("array1: ${array1.contentToString()}")

    val array2 = arrayOf("Red", "Green", "Blue")
    println("arr: ${array2.contentToString()}")
}

Output:

array1: [1, 2, 3, 4]
array2: [Red, Green, Blue]

동일한 값으로 배열 초기화

Array(size) { value }는 배열을 size로 설정한 크기 만큼 생성하며, 요소들을 모두 설정한 value로 할당한다.

fun main() {
    val array = Array(3) { 20 }
    println("array: ${array.contentToString()}")
}

Output:

array: [20, 20, 20]2

연속된 숫자로 배열 초기화

Array(size) { lambda }는 배열을 size로 설정한 크기 만큼 생성하며, 요소들을 모두 lambda의 반환 값으로 설정된다.

lambda에 전달되는 it는 요소의 index 값이 되며, 아래와 같이 연속된 숫자로 배열을 초기화할 수 있다.

fun main() {
    val array1 = Array(5) { it -> it }
    println("array1: ${array1.contentToString()}")

    val array2 = Array(5) { it -> it + 10 }
    println("array2: ${array2.contentToString()}")
}

Output:

array1: [0, 1, 2, 3, 4]
array2: [10, 11, 12, 13, 14]

Null로 배열 초기화

arrayOfNulls<Type>(size)null로 가득찬 배열을 생성할 수 있다.

fun main() {
    val array = arrayOfNulls<Int>(5)
    println("array: ${array.contentToString()}")
}

Output:

array: [null, null, null, null, null]

기본 자료형 배열 선언

kotlin에는 IntArray, BooleanArray, DoubleArray, LongArray 등, 기본 자료형 배열을 제공한다.

이런 배열을 생성할 때는 intArrayOf(), booleanArrayOf() 등을 사용하여 생성할 수 있다.

fun main() {
    val iniArray: IntArray = intArrayOf(1, 2, 3)
    println("iniArray: ${iniArray.contentToString()}")

    val booleanArray: BooleanArray = booleanArrayOf(true, true, false)
    println("booleanArray: ${booleanArray.contentToString()}")

    val doubleArray: DoubleArray = doubleArrayOf(1.2, 2.3, 3.4)
    println("doubleArray: ${doubleArray.contentToString()}")
}

Output:

iniArray: [1, 2, 3]
booleanArray: [true, true, false]
doubleArray: [1.2, 2.3, 3.4]

주요 함수

forEach 함수

forEach 함수는 목록에 반복 처리를 할 수 있다.

fun main() {
    val array = arrayOf(1, 2, 3, 4, 5)

    // lambda으로 사용한 방법이다.
    array.forEach({ element ->
        print("$element,")
    }) // => 1,2,3,4,5
    println()

    // 괄호'()'은 생략할 수 있다.
    array.forEach { element ->
        print("$element,")
    }
    println()

    // it으로 람다를 대신하여 객체를 받아올 수 있다.
    array.forEach {
        print("$it,")
    } // => 1,2,3,4,5
}

Output:

1,2,3,4,5,
1,2,3,4,5,
1,2,3,4,5,

filter 함수

filter 함수는 목록에 조건을 걸어 그 조건에 맞는 새로운 목록을 반환한다.

fun main() {
    val array = arrayOf(1, 2, 3, 4, 5) // => 1,2,3,4,5 배열을 생성한다.

    // filter의 조건에 충족되는 함수를 반환한다.
    array.filter({ e -> e % 2 == 0 }).forEach { println(it) } // => 2,4

    // 괄호'()'은 생략할 수 있다.
    array.filter { e -> e % 2 == 0 }.forEach { println(it) } // => 2,4

    // lambda 사용하지 않고도 'it'으로 객체를 받아 올 수 이 있다.
    array.filter { it % 2 == 0 }.forEach { println(it) } // => 2,4

}

Output:

2,4,
2,4,
2,4,

map 함수

map 함수는 목록의 요소를 변경하여 받아올 수 있다.

// 이름과 연령을 갖는 클래스 정의
private class Person(val name: String, val age: Int)

fun main() {
    val array = arrayOf(
        Person("Charlie", 20),
        Person("devkuma", 31),
        Person("kimkc", 42),
    )

    // lambda으로 user 인스턴스를 받아 올수 있다.
    array.map({ user -> user.name }).forEach { print("${it},") }
    println()

    // 괄호'()'은 생략할 수 있다.
    array.map { user -> user.name }.forEach { print("${it},") }
    println()

    // 'it'으로 객체를 받아 올 수 있다(이 'it'는 user 인스턴스를 가르킨다).
    array.map { it.name }.forEach { print("${it},") }
}

Output:

Charlie,devkuma,kimkc,
Charlie,devkuma,kimkc,
Charlie,devkuma,kimkc,

sum 함수

sum 함수는 입력한 숫자를 합산한다.

fun main() {
    // Array<Int> 인스턴스 생성한다.
    val array = arrayOf(1, 2, 3, 4, 5)

    // 합산한다(1 + 2 + 3 + 4 + 5).
    println(array.sum()) // => 15
}

Output:

15

take 함수

take 함수는 목록의 요소를 입력한 숫자 만큼만 가져온다.

fun main() {
    val array = arrayOf(1, 2, 3, 4, 5)
    array.take(1).forEach { print(it) } // => 1
    println()
    array.take(2).forEach { print(it) } // => 1, 2
    println()
    array.take(3).forEach { print(it) } // => 1, 2, 3
    println()
    array.take(4).forEach { print(it) } // => 1, 2, 3, 4
    println()
    array.take(5).forEach { print(it) } // => 1, 2, 3, 4, 5
}

Output:

1
12
123
1234
12345

drop 함수

drop 함수는 목록의 요소를 앞에서 부터 입력한 숫자 만큼 제거하고 가져온다.

fun main() {
    val array = arrayOf(1, 2, 3, 4, 5)
    array.drop(1).forEach{print(it)} // => 2, 3, 4, 5
    println()
    array.drop(2).forEach{print(it)} // => 3, 4, 5
    println()
    array.drop(3).forEach{print(it)} // => 4, 5
    println()
    array.drop(4).forEach{print(it)} // => 5
    println()
    array.drop(5).forEach{print(it)} // => 빈 Array
}

Output:

2345
345
45
5



최종 수정 : 2024-09-15