가변 길이 인자

메소드를 호출할 때 원하는 개수만큼 값을 인자로 넘기면 자바 컴파일러가 배열에 그 값들을 넣어주는 기능

자바에서는 타입 뒤에 ... 를 붙였는데, 코틀린에서는 파라미터 앞에 vararg 변경자를 붙인다.

fun listOf<T>(vararg values: T) : List<T> { ... }

배열에 들어있는 원소를 가변 길이 인자로 넘길 때, 배열을 명시적으로 풀어서 배열의 각 원소가 인자로 전달되게 해야 한다. 스프레드(spread) 연산자가 이 작업을 해주며, 전달하려는 배열 앞에 * 를 붙이기만 하면 된다.

fun main(args: Array<String>) {
    val list = listOf("args: ", *args)
    println(list)
}

중위 호출(infixs call)과 구조 분해 선언

1.to("one") // "to" 메소드를 일반적인 방식으로 호출
1 to "one" // "to" 메소드를 중위 호출 방식으로 호출

함수(메소드)를 중위 호출에 사용하게 허용하고 싶으면 infix 변경자를 함수 선언 앞에 추가해야 한다.

infix fun Any.to(other: Any) = Pair(this, other)

Pair의 내용으로 두 변수를 즉시 초기화할 수 있는데, 이런 기능을 구조 분해 선언이라고 부른다.

val (number, name) = 1 to "one"