컬렉션
Kotiln 표준 라이브러리에서는 기본 collection 타입인 List, Set, Map을 제공한다.
또한 이들은 두가지 종류로 나뉘어지는데 불변(Immutable) 컬렉션과 가변(Mutable) 컬렉션이다.
Java와 가장 큰 차이는 바로 이 읽기전용 컬렉션인 불변컬렉션이다.
불변컬렉션은 데이터를 읽을 수만 있고 수정이 불가능하다. 따라서 add(),remove()같은 메서드도 존재하지 않는다.
Java에서도 불변처럼 만들 수는 있지만, 타입 시스템 차원에서는 가변과 불변이 구분되지 않는다. Java에서는 항상 수정 가능성을 내포하고있다. 반면 Kotiln은 아예 타입 차원에서 읽기전용과 수정가능을 명확하게 구분하고 있다.
| 변경 불가(Immutable) 컬렉션 생성 함수 | 변경 가능(Mutable) 컬렉션 생성 함수 | |
| List | listOf | mutableListOf , arrayListOf |
| Set | setOf | mutableSetOf, hashSetOf, linkedSetOf, sortedSetOf |
| Map | mapOf | mutableMapOf, hashMapOf, linkedMapOf, sortedMapOf |
또한 컬렉션 빌더를 통해 컬렉션을 생성 할 수도 있다. buildList, buildSet, buildMap과 같이 생성하는대 이들은 만드는 동안에는 변경이 가능하지만, 빌드가 끝나면 변경이 불가해진다.
예를 들어
val myList = buildList {
add(1)
add(2)
add(3)
}
와 같이 build안에서는 add를 사용할 수 있지만
myList.add(4)
와 같이 build가 끝난 myList는 변경이 불가하게된다.
컬렉션 변환 함수
기존 컬렉션(List, Set 등)을 가공해서 새로운 컬렉션을 만들 수도 있다. 대표적인 컬렉션 변환 함수는 아래와 같다
| map | 각각의 요소를 변환해서 새로운 컬렉션 생성 |
| filter | 조건에 맞는 요소만 골라 새로운 컬렉션 생성 |
| forEach | 각각의 요소를 반복해서 내부로직 수행 (결과 반환 없음) |
| sortedBy | 특정 기준으로 정렬 |
| groupBy | 특정 기준에 따라 그룹을 만든다 |
| flatten | 여러 컬렉션을 하나로 평탄화(flatten) |
1. map
map은 컬렉션 안의 모든 요소를 변환해서 새로운 컬렉션을 만든다.
val numbers = listOf(1, 2, 3)
val doubled = numbers.map { it * 2 }
위와 같은 경우 doubled는 [2,4,6]을 가지는 새로운 list가 된다.
2.filter
filter는 조건을 만족하는 요소만 남긴다.
val numbers = listOf(1, 2, 3, 4, 5)
val evens = numbers.filter { it % 2 == 0 }
위와 같은 경우 even은 numbers의 요소중 2로 나누었을때 나머지가 0인 요소만을 요소로 가지는 새로운 리스트 [2,4]가 된다.
3.forEach
forEach는 컬렉션의 모든 요소에 대해 특정 작업을 수행할때 사용한다. 새 컬렉션을 반환하지는 않는다.
val numbers = listOf(1,2,3)
numbers.forEach { println(it) }
위와 같은 경우 numbers의 각요소를 출력하게 된다
4.sortedBy
sortedBy는 특정기준으로 컬렉션내 요소들을 정렬하여 새로운 컬렉션을 만든다.
val names = listOf("Jack", "asdasd", "Tom")
val sorted = names.sortedBy { it.length }
위와 같은 경우 sorted는 names의 각 요소들을 글자 수를 기준으로 정렬한 ["Tom","Jack","asdasd"]가 된다.
5.groupBy
groupBy는 컬랙션내 요소들을 특정 기준으로 묶어 새로운 컬렉션을 만든다.
val words = listOf("apple", "banana", "angel", "blueberry", "car")
val grouped = words.groupBy { it.first() }
위와 같은 경우 words의 요소들이 첫글자 기준으로 묶이게 된다.
[ "apple" , "angel" ],[ "banana" , "blueberry" ],[ "car" ]와 같이 묶이며 grouped은
{ a = [ "apple" , "angel" ], b = [ "banana" , "blueberry" ], c = [ "car" ] }와 같이 Map<기준, List<요소>> 형태가 된다.
6.flatten
flatten은 리스트안에 리스트가 있을때(중첩) 이들을 하나의 리스트로 만들어준다
val list = listOf(
listOf(1, 2),
listOf(3, 4),
listOf(5)
)
val flat = list.flatten { it }
위와 같이 리스트안에 [ [1,2] , [3,4] , [5] ] 이런식으로 리스트가 들어있을때 flat은 [1,2,3,4,5] 가 된다.
'공부 > Kotlin' 카테고리의 다른 글
| 데이터 클래스 (Data Class) (0) | 2025.04.26 |
|---|