Language/Kotlin In Action

[Kotlin In Action] 가변 인자

by Donghwan 2021. 4. 22.

가변 길이 인자는 메소드를 호출할 때 원하는 개수만큼 값을 인자로 넘기면 자바 컴파일러가 배열에 그 값들을 넣어주는 기능입니다. 코틀린의 가변 길이 인자도 자바와 비슷합니다. 다만 문법이 조금 다릅다. 타입 뒤에 . . .를 붙이는 대신 코틀린에서는 파라미터 앞에 vararg 변경자를 붙입니다.

//mutableListof()
//val list = mutableListOf()
public inline fun <T> mutableListOf(): MutableList<T> = ArrayList()

//mutableListOf(1,2,3,4,5,6,7,8,9,10)
//val list = mutableListOf(1,2,3,4,5,6,7,8,9,10)
public fun <T> mutableListOf(vararg elements: T): MutableList<T> =
    if (elements.size == 0) ArrayList() else ArrayList(ArrayAsCollection(elements, isVarargs = true))

이미 배열에 들어있는 원소를 가변 길이 인자로 넘길 때도 코틀린과 자바 구문이 다릅니다. 자바에서는 배열을 그냥 넘기면 되지만 코틀린에서는 배열을 명시적으로 풀어서 배열의 각 원소가 인자로 전달되게 해야 합니다. 기술적으로는 스프레드 연산자가 그런 작업을 해줍니다. 하지만 실제로는 전달하려는 배열 앞에 *를 붙이기만 하면 됩니다.

val array: Array<Int> = Array(5) { i -> i }
val list: List<Int> = listOf(*array, 6, 7, 8, 9, 10)

//result
list = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }

스프레드 연산자를 통하면 배열에 들어있는 값과 다른 여러 값을 함께 써서 함수를 호출할 수 있습니다. 이런 기능은 자바에서는 사용할 수 없습니다.

[ 출처 : Kotlin In Action ]

728x90
반응형

댓글