더북(TheBook)

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() 내부에서 itemsIntArray이다.

또한, 스프레드(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]
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.