mygomii

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

Kotlin

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

mygomii 2025. 3. 26. 09:00
반응형
  • vararg 키워드를 사용하면 호출 시 인자 개수가 달라질 수 있는 함수를 정의 할 수 있음
  • infinx(중위) 함수 호출 구문을 사용하면 인자가 하나뿐인 메서드를 간편하게 호출 할 수 있음
  • 구조 분해 선언 을 사용하면 복합적인 값을 분해해여 여러변수에 나눠 담을 수 있음

3.4.1 자바 컬렉션 API 확장

fun <T> List<T>.last(): T { /* 마지막 원소를 반환함 */}
fun Collection<Int>.max(): Int { /* 컬렉션의 최댓값을 찾음 */}
  • 위 예시 처럼 확장함수로 사용 가능

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

  • 리스트를 생성하는 함수를 호출할 대 원하는 만큼 많이 원소를 전달 할 수 있음
val list = listOf(2,3,4,5,6)
fun listOf<T>(vararg values: T): List<T> {}
  • 이 함수는 호출할 때 원하는 개수만큼 여러값을 인자로 넘기면 배열에 그 값들을 넣어주는 언어 기능인 가변 길이 인자(vararg) 사용
  • 이미 배열에 들어있는 원소를 가변 길이 인자로 넘길 떼도 코틀린과 자바 구문이 다름
  • 자바에서는 배열을 그냥 넘기면 되지만 코틀린에서는 배열을 명시적으로 풀어 배열의 각 원소가 인자로 전달되게 해야함 → 이런 기능을 스프레드(spread) 연산자라 함
  • 스프레드 연산은 배열앞에 *를 붙이기만 하면 됨
fun main(args: Array<String>) {
	val list = listOf("args:", *args)
}

3.4.2 쌍(튜플) 다루기 : 중위 호출과 구조 분해 선언

val map = mapOf(1 to "One", 7 to "seven", 3 to "three")
  • to 라는 단어는 kotlin키워드가 아님 이 코드는 중위 호출이라는 특별한 방식으로 to 라는 일반 메서드를 호출
    •  to 함수는 Pair 의 인스턴스를 반환
    • Pair 의 내용을 갖고 두 변수를 즉시 초기화 할 수 있음
val (number, name) = 1 to "One"

 

infix fun Any.to(other: Any) = Pair(this, other)
  • 이런 기능을 구조 분해 선언 이라고 부름
반응형