메소드를 호출할 때 원하는 개수만큼 값을 인자로 넘기면 자바 컴파일러가 배열에 그 값들을 넣어주는 기능
자바에서는 타입 뒤에 ...
를 붙였는데, 코틀린에서는 파라미터 앞에 vararg
변경자를 붙인다.
fun listOf<T>(vararg values: T) : List<T> { ... }
배열에 들어있는 원소를 가변 길이 인자로 넘길 때, 배열을 명시적으로 풀어서 배열의 각 원소가 인자로 전달되게 해야 한다. 스프레드(spread) 연산자가 이 작업을 해주며, 전달하려는 배열 앞에 *
를 붙이기만 하면 된다.
fun main(args: Array<String>) {
val list = listOf("args: ", *args)
println(list)
}
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"