[Kotlin in Action] 10. 컬렉션 처리 (가변인자, 중위호출)

반응형
728x90
반응형

가변 길이 인자 (vararg)

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

 

코틀린은 배열을 명시적으로 풀어서 배열의 각 원소가 인자로 전달되게 해야한다. 스프레드 (spread) 연산자가 그런 작업을 해준다. (배열 앞에 *를 붙인다.)

 

 

예제

  • 리스트를 생성하는 함수를 호출할때 원하는 만큼 많이 원소를 전달할 수 있다.
fun main() {
    val list = listOf(2, 3, 5, 7, 11)
}

 

listOf 메서드
  • listOf(vararg elements: T)
public fun <T> listOf(vararg elements: T): List<T> = if (elements.size > 0) elements.asList() else emptyList()

 

  • spread 연산자가 배열의 내용을 펼쳐준다.
fun main(args: Array<String>) {
    // spread 연산자가 배열의 내용을 펼쳐준다.
    // 스프레드 연산자를 통하면 배열에 들어있는 값과 다른 여러 값을 함께 써서 함수를 호출할 수 있다.
    val list2 = listOf("args : ", *args)
    println(list)
}

 

 

 

중위호출

중외호출 시에는 수신 객체와 유일한 메서드 인자 사이에 메서드 이름을 넣는다.

일반 방식 호출 :  1.to("one")
중위 호출 : 1 to "one"
(객체, 메서드 이름, 유일한 인자 사이에 공백이 들어가야한다.)

인자가 하나뿐인 일반 메서드나 인자가 하나뿐인 확장함수에 중위 호출을 사용할 수 있다. 함수를 중위 호출에 사용하게 허용하고 싶으면 infix 변경자를 함수 선언 앞에 추가해야한다.

public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)

 

구조 분해 선언
// Pair 의 내용으로 두 변수를 즉시 초기화할 수 있다.
val (number, name) = 1 to "one"

 

 

반응형

Designed by JB FACTORY