본문 바로가기
발전로그/책장로그-개발

kotlin in action 03 (3.4)

by 4lleycat 2022. 2. 28.

3.4 컬렉션 처리: 가변 길이인자, 중위 함수 호출, 라이브러리 지원

  • 컬렉션 처리시 코틀린의 특성
    • vararg 키워드를 사용하면 호출 시 인자 개수가 달라질 수 있는 함수를 정의할 수 있다.
    • 중위(infix)함수 호출 구문을 사용하면 인자가 하나뿐인 메소드를 간편하게 호출할 수 있다.
    • 구조 분해 선언 (destructuring declaration)을 사용하면 복합적인 값을 분해해서 여러변수에 담을 수 있다.

3.4.1 자바 컬렉션 API확장

  • 코틀린은 확장함수로 자바 컬렉션 API를 확장한다
  • 코틀린 표준 라이브러리에는 수 많은 확장함수를 이미 가지고 있다

3.4.2 가변 인자 함수 : 인자의 개수가 달라질 수 있는 함수 정의

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

코틀린에서는 자바의 타입뒤 ... 대신 파라미터 앞에 vararg붙인다

val list = listOf(1,2,3,4)
// listOf 함수 정의
fun listOf<T> (vararg values: T): List<T> {
    ...
}

// 배열에 들어있는 원소를 가변 길이 인자로 넘길 때 명시적이여야 한다
// 전달하려는 배열앞에 *을 붙여 명시
fun main(args: Array<String>) {
   val list = listOf("args: ", *args) // 스프레드 연산자가 배열의 내용을 펼쳐준다.
    println(list)
}

>>> 
[args: , a, b, c]

3.4.3 값의 쌍 다루기: 중위 호출과 구조 분해 선언

fun main() {
    val mapInfix = mapOf(1 to "one", 7 to "seven", 53 to "fifty-three") // 중위 호출
    val map = mapOf(1.to("one"), 7.to("seven"), 53.to("fifty-three")) // 일반호출 to method
}

// to 메서드의 정의를 간략히 줄인 코드
infix fun Any.to(other: Any) = pair(this, other)

fun pair() {
// pair의 내용으로 두 변수를 즉히 초기화 가능
// 이런 기능을 구조분해 선언이라고 부른다
    val (number, name) = 1 to "one"
}
  • 인자가 하나뿐인 일반 메소드나, 인자가 하나뿐인 확장 함수에 사용 가능하다
  • 중위 호출 시에는 수신객체와 유일한 메소드 인자사이에 메소드 이름을 넣는다