이 게시물은 다음 링크를 참조하여 학습했습니다.
이 글에서는 Collection에 대한 기본적인 지식이 있다고 가정하고, Java Collection과의 차이점 위주로 서술하려고 한다.
Collection에 대해 잘 모른다면 아래 글들을 보고 오는것을 추천한다.
1. Immutable vs Mutable
코틀린의 Collection은 기본적으로 Mutable(가변의), Immutable(불변의)을 별개로 지원한다.
Mutable로 생성하면 추가, 삭제가 가능하지만 Immutable로 생성하면 수정이 불가능하다.
아래는 코틀린 Collection들의 상속 구조이다.
1-1. Immutable
Immutable 객체는 아래처럼 사용한다.
val list = listOf<String>("seminzzang", "seminzzang2", "seminzzang3")
val set = setOf<Int>(1,2,3,4,5)
val map = mapOf<String, String>("1" to "one", "2" to "two", "3" to "three")
1-2. Mutable
Mutable 객체는 아래처럼 사용한다.
val list = mutableListOf<String>("seminzzang", "seminzzang2", "seminzzang3")
val set = mutableSetOf<Int>(1,2,3,4,5)
val map = mutableMapOf<String, String>("1" to "one", "2" to "two", "3" to "three")
2. Collection 확장 함수
Collection의 확장 함수는 Java의 스트림과 유사한 기능을 제공한다.
내가 자주 사용할것 같은 기능들만 모아서 정리해봤다.
2-1. 집계
1) forEach
각 요소를 람다식으로 처리 (컬렉션 반환 X)
2) forEachIndexed
각 요소와 인덱스를 람다식으로 처리
3) onEach
각 요소를 람다식으로 처리하고 컬렉션을 반환받음
4) count
특정 조건에 해당하는 요소의 개수를 반환
2-2. 검사
1) all
람다식에서 모든 요소가 일치할 때 true 반환
2) any
최소한 하나 혹은 그 이상의 특정 요소가 일치하면 true 반환
2-3. 필터
1) filter
람다식에 따라 요소를 골라내는 메서드
2) filterNot
람다식 이외에 요소를 골라내는 메서드
3) filterNotNull
컬렉션에서 null을 제외하기 위한 메서드
2-4. 매핑
1) map
식을 적용해 새로운 컬렉션을 만들 수 있게 하는 메서드
(forEach와 비슷해보이지만, 주어진 컬렉션을 건드리지 않는다는 점에서 안전함)
2) mapIndexed
인덱스를 포함하고 주어진 식을 적용하여 새로운 컬렉션 반환
3) mapNotNull
null을 제외하고 식을 적용해 새로운 컬렉션 반환
2-5. 검색
1) find
조건식에 만족하는 첫 번째 검색된 요소 반환
3. Kotlin Collection 함수 API의 단점
Kotlin Collection 함수 API는 모든 엘리먼트에 대해 단계를 수행한 뒤에 다음단계로 넘어간다.
그래서 데이터 양이 많아질때 메모리 릭 이슈가 발생할 수 있다.
이를 위해 Sequence라는 컨테이너 타입을 사용하면 문제를 해결할 수 있다.
'Legacy' 카테고리의 다른 글
[Kotlin #5] Inline Functions (0) | 2022.05.16 |
---|---|
[Kotlin #4] Scope Functions (0) | 2022.05.16 |
[Kotlin #2] 고급문법 (0) | 2022.05.11 |
[Kotlin #1] 기본문법 (0) | 2022.05.11 |
[Java#7] Queue, Deque, PriorityQueue (0) | 2022.05.04 |