반응형
모든 내용은 Do it! 코틀린 프로그래밍을 바탕으로 정리한 것입니다.
컬렉션(Collection)
컬렉션은 자주 사용하는 기초적인 자료구조를 모아 놓은 일종의 프레임워크로 표준 라이브러리로 제공하고 있음
코틀린의 컬렉션 종류
- 코틀린의 컬렉션은 자바 컬렉션의 구조를 확장 구현한 것
- 자바와는 다르게 불변형(immutable - 읽기 전용)과 가변형(mutable)로 나뉨
- 자바에서는 오로지 가변형 컬렉션만 취급되므로 자바와 상호작용하는 코드에서는 주의해야 함
컬렉션 | 불변형 헬퍼 함수 | 가변형 헬퍼 함수 |
List | listOf | mutableListOf, arrayListOf |
Set | setOf | mutableSetOf, hashSetOf, linkedSetOf, sortedSetOf |
Map | mapOf | mubaleMapOf, hashMapOf, linkedMapOf, sortedMapOf |
* 변수를 선언할 때 불변형 val의 사용을 권장하듯이, 컬렉션도 불변형으로 선언할 것을 권장함
* 헬퍼 함수 : 컬렉션은 직접 사용해 생성하지 않고 특정 함수의 도움을 통해 생성하는데, 이때 사용하는 함수를 헬퍼(Helper) 함수라고 함
컬렉션 인터페이스
- 가장 상위에 있는 Iterable 인터페이스 : 컬렉션이 연속적인 요소를 표현할 수 있도록 함
- iterator()는 hasNext()와 next() 메서드를 가지고 요소를 순환함
- hasNext() : 읽을 요소가 있는지 확인하는 메서드
- next() : 데이터를 반환하는 메서드
- Collection 인터페이스 - 불변형
- 여기서 확장된 Set과 List 인터페이스 또한 읽기 전용 컬렉션임
size | 컬렉션의 크기 |
isEmpty() | 컬렉션이 비어있으면 true를 반환함 |
contains(element: E) | 특정 요소가 있다면 true를 반환함 |
containsAll(element: Colleciton<E>) | 인자로 받아들인 컬렉션이 있다면 true를 반환함 |
- MutableIterable과 MutableCollection 인터페이스 - 가변형
- 여기서 확장된 MutableSet, MutableList 또한 가변형 컬렉션임
add(element: E) | 인자로 전달받은 요소를 추가하고 true 반환 / 이미 있거나 중복이 허용되지 않으면 false 반환 |
remove(element: E) | 인자로 전달받은 요소를 삭제하고 true 반환 / 삭제하려는 요소가 없다면 false 반환 |
addAll(elements: Collection<E>) | 컬렉션을 인자로 받아 모든 요소를 추가하고 true 반환 / 실패 시 false 반환 |
removeAll(elements: Collection<E>) | 컬렉션을 인자로 받아 모든 요소를 삭제하고 true 반환 / 실패 시 false 반환 |
retainAll(elements: Collection<E>) | 인자로 전달받은 컬렉션의 요소만 보유하고 true 반환 / 실패 시 false 반환 |
clear() | 컬렉션의 모든 요소 삭제 |
List
순서에 따라 정렬된 요소를 가지는 컬렉션
불변형 List
listOf() 메서드
public fun <t> listOf(vararg elements: T): List<T>
- vararg는 가변 인자를 받을 수 있기 때문에 원하는 만큼 요소를 지정할 수 있음
- 값을 반환할 때는 List<T>를 사용함
- 형식 매개변수 <T>는 원하는 자료형을 지정해 선언할 수 있고, 사용하지 않으면 <Any>로 자료형을 혼합할 수 있음
fun main() {
var numbers: List<Int> = listOf(1, 2, 3, 4, 5)
var names: List<String> = listOf("one", "two", "three")
var mixedTypes = listOf("Hello", 1, 2.432, 's')
for (name in names) {
println(name)
}
for (number in numbers) print(number)
println()
}
emptyList() 메서드
비어 있는 List를 생성하려면 emptyList<>()를 사용할 수 있음
이때 반드시 형식 매개변수를 지정해야 함
val emptyList: List<String> = emptyList<String>()
listOfNotNull() 메서드
null을 제외한 요소만 반환해 List를 구성할 수 있음
val nonNullsList: List<Int> = listOfNotNull(2, 24, 3, null, 5, null)
println(nonNullsList) // [2, 24, 3, 5]
List의 주요 멤버 메서드
get(index: Int) | 특정 인덱스를 인자로 받아 해당 요소를 반환함 |
indexOf(element: E) | 인자로 받은 요소가 첫 번째로 나타나는 인덱스를 반환하며, 없으면 -1 반환 |
lastIndexOf(element: E) | 인자로 받은 요소가 마지막으로 나타나는 인덱스를 반환하며, 없으면 -1 반환 |
listIterator() | 인자로 받아들인 컬렉션이 있다면 true를 반환함 |
subList(fromIndex: Int, toIndex: Int) | 특정 인덱스의 from과 to 범위에 있는 요소 목록을 반환함 |
가변형 List
가변형 헬퍼 함수를 사용하면 요소를 쉽게 추가하거나 삭제할 수 있는 List를 생성할 수 있음
arrayListOf() 메서드
public fun <T> arrayListOf(vararg elements: T): ArrayList<T>
- 가변형 List를 생성하지만 반환 자료형은 자바의 ArrayList임
import java.util.*
fun main() {
val stringList: ArrayList<String> = arrayListOf<String>("Hi", "Hello", "Bye")
stringList.add("Java")
stringList.remove("Hello")
println(stringList) // [Hi, Bye, Java]
}
- 위 예제의 List는 가변형이기 때문에 add()와 remove()를 통해 요소를 추가하거나 삭제할 수 있음
- 컴파일할 때 반환되는 자료형은 List가 아닌 자바의 ArrayList임
mutableListOf() 메서드
public fun <T> mutableListOf(vararg elements: T): MutableList<T>
- MutableList 인터페이스를 사용하는 헬퍼 함수 mutableListOf()를 통해 List의 요소를 추가, 삭제, 교체할 수 있음
- 반환형은 ArrayList가 아닌 MutableList 임
fun main() {
val mutableList: MutableList<String> = mutableListOf<String>("Apple", "Banana", "Carrot")
mutableList.add("Dorazi")
mutableList.removeAt(1)
mutableList[0] = "Bori"
println(mutableList) // [Bori, Carrot, Dorazi]
val mutableListMixed = mutableListOf("Android", "iOS", 1, 25, 'X')
println(mutableListMixed) // [Android, iOS, 1, 25, X]
}
- add(), removeAt() 메서드를 통해 요소를 추가, 삭제할 수 있음
- set() 또는 대괄호 표현을 통해 인덱스에 해당하는 요소를 바로 변경할 수 있음
- 특정 자료형의 제네릭을 생략하면 여러 가지 자료형으로 구성된 MutableList를 할당할 수 있음
💡 불변형 List → 가변형 List?
fun main() {
val names: List<String> = listOf("one", "two", "three") // 불변형
val mutableName = names.toMutableList() // 새로운 가변형
mutableName.add("four")
println(mutableName) // [one, two, three, four]
}
- toMutableList() : 불변형 List를 가변형으로 변경하는 메서드
- 기존의 List는 그대로 두고 새로운 공간을 만듦
* 코틀린 컬렉션 Set, Map에 대한 내용은 다음 포스팅 참고!
반응형
'Kotlin > Kotlin 프로그래밍' 카테고리의 다른 글
[Kotlin/Coroutine] 코루틴(Coroutine) - 동시성 프로그래밍 (0) | 2021.06.03 |
---|---|
[Kotlin] 코틀린의 시퀀스(Sequence) (2) | 2021.06.02 |
[Kotlin] 컬렉션(Collection)의 확장함수 (0) | 2021.05.27 |
[Kotlin] 컬렉션(Collection) - Set, Map (0) | 2021.05.26 |
[Kotlin] 문자열(String) (0) | 2021.05.21 |
[Kotlin] 배열(Array) (0) | 2021.05.18 |
[Kotlin] 제네릭(Generic) (0) | 2021.05.18 |
[Kotlin] 다양한 클래스와 인터페이스 (3) (0) | 2021.05.13 |
댓글