List, Set, Map
Kotlin에는 컬렉션이라는 자료구조가 존재합니다.
컬렉션은 같은 타입의 여러 객체를 저장하고 관리하기 위해 설계된 자료구조입니다.
컬렉션에는 List, Set, Map이 존재하는데 이에 대해 알아보겠습니다.
List
List를 간단히 설명하자면 순서가 있는 자료구조입니다.
- 특징
- 포인터를 사용하여 다음 값의 주소를 가리켜 데이터가 순서대로 이어져 있습니다.
- index로도 접근 가능한데 이는 메모리상에 순서대로 있다는 것을 뜻하는 게 아니라 데이터의 순번을 의미합니다.
- element의 값으로 null을 넣을 수 없습니다.
- 구현
- list에는 element의 추가와 변경이 불가능한 일반적인 list와 추가와 변경이 가능한 mutableList가 있습니다.
val numbers = listOf(1, 2, 3, 4, 5)
val emptyNumbers = listOf<Int>()
// mutable
val mutableNumbers = mutableListOf(1, 2, 3, 4, 5)
val mutableEmptyNumbers = mutableListOf<Int>()
val mutableEmptyNumbers = mutableListOf()
list를 index로 접근할 때 해당 index에 데이터가 존재하지 않으면 IndexOutOfBoundsException 에러가 발생합니다.
이는 다음 코드와 같이 방지할 수 있습니다.
val numbers = listOf(1, 2, 3, 4, 5)
numbers.getOrNull(5) // 5번째 데이터에 접근, 데이터가 없으면 null 반환
numbers.getOrElse(5){-1} // 5번째 데이터에 접근, 데이터가 없으면 else인 -1을 반환
numbers.elementAtOrNull(5) // getOrNull과 동일
numbers.elementAtOrElse(5){-100} // getOrElse와 동일
Set
set이란 고유한 요소들을 갖는 자료구조입니다.
- 특징
- Kotlin에서 Set은 element의 순서를 유지하기 때문에 index로 접근 가능합니다.
- index가 있지만 두 개의 Set이 크기가 같고, element가 모두 동일하면 element의 순서와 상관없이 두 Set은 동일합니다.
- 구현
- list와 마찬가지로 추가와 변경이 불가능한 일반적인 set과 추가와 변경이 가능한 mutableSet이 있습니다.
val numbers = setOf(1, 2, 3, 4, 5)
val numbers = setOf<Int>()
val numbers = mutableSetOf(1, 2, 3, 4, 5) // mutable
numbers.add(6)
numbers.remove(1) // numbers -> (2, 3, 4, 5)
Map
Map이란 key-value 구조의 자료구조입니다.
key 값으로 value 값에 접근합니다.
- 특징
- 빈 Map에 접근하면 Exception을 발생시키지 않고 null을 반환합니다.
- 같은 key를 가진 값을 추가했다면 마지막에 추가한 값으로 변경됩니다.
- 그렇기에 key는 하나만 존재할 수 있고 이를 만족한다면 value 값은 중복이 될 수 있습니다.
- Set과 마찬가지로 크기가 같고, element가 모두 동일하면 두 Map은 동일합니다.
- 구현
- list와 마찬가지로 추가와 변경이 불가능한 일반적인 map과 추가와 변경이 가능한 mutableMap이 있습니다.
val value = mapOf(1 to "a", 2 to "b")
val value = mapOf<Int, String>()
value[0] // null
val mutableValue = mutableMapOf(1 to "a", 2 to "b")
mutableValue.put(3, "c")
mutableValue[4] = "d"
mutableValue.remove(2) // key가 2인 element를 제거
※ 잘못된 정보, 혹은 다른 의견이 있다면 댓글로 말해주세요. 감사합니다.
'Android > Kotlin' 카테고리의 다른 글
백킹프로퍼티(Backing Properties)란? (0) | 2023.04.06 |
---|---|
Kotlin 연산자 - ? / !! / ?: / is / as (0) | 2023.02.22 |
Scope Function (0) | 2023.02.21 |