Search

Overview

Kotlin 표준 라이브러리는 컬렉션에 대한 다양한 작업을 수행할 수 있는 많은 함수를 제공한다.
여기에는 요소를 가져오거나 추가하는 간단한 작업뿐만 아니라 검색, 정렬, 필터링, 변환 등의 복잡한 작업도 포함된다.

확장 함수와 멤버 함수

컬렉션 작업은 표준 라이브러리에 두 가지 방식(컬렉션 인터페이스의 멤버 함수와 확장 함수)으로 선언된다.
멤버 함수
컬렉션 타입에 필수적인 작업을 정의한다.
예를 들어, Collection 에는 컬렉션이 비었는지 확인하는 isEmpty() 함수가 있고 List 에는 요소에 인덱스로 접근하는 get() 함수가 있다.
자체 컬렉션 인터페이스 구현을 만들 때는 멤버 함수를 구현해야 한다.
새로운 구현을 쉽게 만들기 위해 표준 라이브러리에서 AbstractCollection, AbstractList, AbstractSet, AbstractMap 과 같은 컬렉션 인터페이스의 스켈레톤 구현을 사용할 수 있다.
확장 함수
필터링, 변환, 정렬, 기타 컬렉션 처리 함수로 선언된다.

공통 작업

공통 작업은 읽기 전용 컬렉션과 변경 가능한 컬렉션 모두에서 사용할 수 있다.
공통 작업은 다음과 같은 그룹으로 나뉜다.
변환
필터링
plus와 minus 연산자
그룹화
컬렉션 부분 가져오기
단일 요소 가져오기
정렬
집계 작업
이러한 작업들은 원본 컬렉션에 영향을 미치지 않고 결과를 반환한다.
val numbers = listOf("one", "two", "three", "four") numbers.filter { it.length > 3 } // `numbers`는 변경되지 않고 결과는 사라짐 println("numbers are still $numbers") val longerThan3 = numbers.filter { it.length > 3 } // 결과를 `longerThan3`에 저장 println("numbers longer than 3 chars are $longerThan3")
Kotlin
복사
예를 들어, 필터링 작업은 필터링 조건에 맞는 요소를 포함하는 새로운 컬렉션을 생성한다.
이러한 작업의 결과는 변수에 저장하거나 다른 함수에 전달하는 방식으로 사용해야 한다.
val numbers = listOf("one", "two", "three", "four") val filterResults = mutableListOf<String>() // 대상 객체 numbers.filterTo(filterResults) { it.length > 3 } numbers.filterIndexedTo(filterResults) { index, _ -> index == 0 } println(filterResults) // 두 작업의 결과를 포함함
Kotlin
복사
특정 컬렉션 작업에서는 결과를 반환하는 대신 결과 항목을 추가할 대상 객체를 지정할 수 있다.
대상은 함수가 새로운 객체 대신 결과 항목을 추가하는 변경 가능한 컬렉션이다.
이러한 작업을 수행하기 위해 filterTo() 나 associateTo() 와 같이 To 접미사가 있는 별도의 함수가 제공된다.
이 함수들은 대상 컬렉션을 추가적인 매개변수로 받는다.
// 결과를 새 해시 셋으로 필터링하여 중복 제거 val result = numbers.mapTo(HashSet()) { it.length } println("distinct item lengths are $result")
Kotlin
복사
이러한 함수들은 편의를 위해 대상 컬렉션을 다시 반환하므로 함수 호출의 인자로 바로 생성할 수 있습니다.
대상 컬렉션을 사용하는 함수는 filter, associate, groupBy, flatMap 등의 작업에서 사용할 수 있습니다.

쓰기 작업

변경 가능한 컬렉션의 경우 컬렉션 상태를 변경하는 쓰기 작업도 있다.
이러한 작업에는 요소 추가, 제거 및 업데이트가 포함된다.
val numbers = mutableListOf("one", "two", "three", "four") val sortedNumbers = numbers.sorted() println(numbers == sortedNumbers) // false numbers.sort() println(numbers == sortedNumbers) // true
Kotlin
복사
일부 작업에 대해서는 동일한 작업을 수행하는 함수 쌍이 있다.
하나는 컬렉션을 직접 변경하고 다른 하나는 결과를 별도의 컬렉션으로 반환한다.
예를 들어, sort() 는 변경 가능한 컬렉션을 직접 정렬하여 상태를 변경하지만 sorted() 는 동일한 요소를 정렬된 순서로 포함하는 새로운 컬렉션을 만든다.