코틀린 (Kotlin) 리스트, 가변 인자, 중위 호출, 구조 분해

코틀린 리스트

코틀린의 리스트는 listOf(...) 으로 생성할 수 있습니다
그리고 setOf(...) 로 Collection 을 생성할 수도 있습니다.

val strings: List<String> = listOf("1","2","3")
strings.last() //last() 는 확장 함수

val numbers: Collection<Int> = setOf(1,10,100)
numbers.max() //max() 는 확장 함수

가변 인자 함수

자바에서는 가변 인자로 'String ...' 을 사용합니다.
코틀린에서는 vararg 변경자를 붙입니다.
varag 의 배열을 펼치기 위해서는 *(스프레드) 연산자를 이용할 수 있습니다

//자바
public static void main(String... args) { ... }

//코틀린
fun main(vararg  values: String) {
    val list = listOf("list=", *values) //*연산자가 배열 내용을 펼쳐줍니다
    println(list)
}

main("a","b","c") //"[list=, a, b]" 출력


중위 호출

1 to "one" 처럼 to 를 중간에 사용하는 것을 중위 호출이라고 합니다.
이때 to 는 일반 메소드입니다.
'객체 메소드이름 유일인자' 사이에는 공백이 들어가야 합니다.

val mapData = mapOf(
    1 to "one",   //1(객체) to(메소드이름), "one"(유일한 인자)
    2 to "two"  //to 메소드를 공백으로 구분하여 사용 가능
    3.to("three") //to는 메소드이기때문에 .to(...) 로도 사용 가능
)

일반 메소드를 중위 호출이 가능하도록 만드려면 infix 변경자를 메소드 앞에 추가해야 됩니다.
infix 변경자의 인수는 한개만 가능합니다.

//infix 를 사용한 중위 호출 생성
infix fun Any.to(other:Any) = Pair(this, other)

//잘못된 사용. 컴파일 에러. 인수는 한개여야 합니다
infix fun Any.to(other:Any, other2:Any) = Pair(this, other)

구조 분해 선언

코틀린 표준 라이브러리 클래서 중에는 Pair 클래스가 있습니다.
Pair 클래스는 두 쌍의 값을 갖고 있습니다.

1 to "one" 중위 호출은 Pair 클래스를 리턴합니다.
이 Pair 는 (number, name) 에 값을 설정합니다.

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

구조 분해 선언은 for 문에서 인덱스와 값을 변수에 저장할 수 있습니다.

for((index, value) in list.withIndex()) { //withIndex() 를 이용해서 구조 분해 선언
            println("$index, $value")
}


댓글

이 블로그의 인기 게시물

코틀린 (Kotlin) filter, map, all, any, count, find, groupBy, flatMap 함수 정리

코틀린 (Kotlin) 인터페이스 정리

RecyclerView 에서 notifyItemChanged()의 payload 이해하기