3.1.4 vararg
앞에서 인자의 개수가 정해지지 않은 arrayOf() 같은 함수를 살펴봤다. 여러분이 직접 작성한 함수에서도 이런 기능을 쓸 수 있다. 필요한 과정은 파라미터 정의 앞에 vararg 변경자(modifier)를 붙이는 것뿐이다.
fun printSorted(vararg items: Int) {
items.sort()
println(items.contentToString())
}
fun main() {
printSorted(6, 2, 10, 1) // [1, 2, 6, 10]
}
함수 내부에서는 파라미터를 적절한 배열 타입으로 사용할 수 있다. 예를 들어 printSorted() 내부에서 items는 IntArray이다.
또한, 스프레드(spread) 연산자인 *를 사용하면 배열을 가변 인자 대신 넘길 수 있다.
val numbers = intArrayOf(6, 2, 10, 1)
printSorted(*numbers)
printSorted(numbers) // Error: passing IntArray instead of Int
스프레드는 배열을 복사한다는 점에 유의하라. 따라서 파라미터 배열의 내용을 바꿔도 원본 원소에는 영향을 미치지 않는다.
fun main() { val a = intArrayOf(6, 2, 10, 1) printSorted(*a) // [1, 2, 6, 10] println(a.contentToString()) // [6, 2, 10, 1] }