📢 코틀린의 Collection 이란?
→ 연관있는 자료들을 모아두는 자료구조. 기본적으로 자바 컬렉션의 배경에서 확장된 형태. 자바와 달리 불변형과 가변형으로 나뉜다.자료구조란?
→ 프로그램에 필요한 자료들을 보여주거나 검색, 정렬하는 것*불변형 : (영)Immutable → 변하지 않는.
*가변형 : (영)Mutable → 변할수 있는.
📢 들어가기에 앞서 헬퍼함수를 먼저 알아보자.
헬퍼함수?
→ 컬렉션을 선언할 때 프로그래머가 직접 선언하는것이 아닌 정해진 특정 함수를 통해 선언하는것.
📋 List는 순서에 따라 요소가 정렬되며 값의 중복을 허용한다. 값의 변경이 불가능한(불변형) List를 선언할 때는 헬퍼함수 listOf()를 사용하고, 값의 변경이 가능한(가변형) List를 선언할 때는 mutableListOf() / arrayListOf()를 사용한다.
fun main() {
val number: List<Int> =
listOf(1, 2, 3, 4) // Int형 List
val string: List<String> =
listOf("1", "2", "3", "4") // String형 List
val painter: List<Painter> =
listOf(R.drawable.nyung, R.drawable.nyang) // Painter형 List
...
}
➡ listOf는 불변형을 가지고 있다. 이는 listOf로 선언된 변수안의 값을 변경, 추가, 삭제할 수가 없다.
fun main() {
val strList: MutableList<String> =
mutableListOf<String>("one", "two", "three") // String형 MutableList
val intList: ArrayList<Int> =
arrayListOf<Int>(4, 5, 6) // Int형 ArrayList
val mixList = mutableListOf("seven", 8, "nine") // String형과 Int형을 같이 사용 가능
...
}
➡ mutableListOf / arrayListOf는 가변형을 가지고 있다. 이는 mutableListOf /arrayListOf로 선언된 변수안의 값을 변경, 추가, 삭제할 수 있다. 두 함수의 차이는 mutableListOf는 MutableList를 반환하고 arrayListOf는 ArrayList를 반환한다. arrayListOf가 알고리즘에서 더 빠르다. 코틀린에서는 따로 스택 구조를 안쓰기 때문이다.
- 추가 : add()
- 삭제 : mutableListOf로 선언된 변수 → removeAt() / arrayListOf로 선언된 변수 → remove()
- 변경 : 인덱스에 직접 접근하여 요소 변경 가능
→ EX) strList[0] = 3 // 실행 결과 strList에 담겨져 있는 값은 3, “two”, “three”
함수 | 기능 |
---|---|
size() | 리스트 사이즈 변환 |
get(*index) | 해당 인덱스의 요소 가져오기 |
indexOf(*Element) | 해당 요소의 인덱스 번호 반환 |
contains(Element) | 해당 요소가 있으면 true / 없으면 false 반환 |
isEmpty() | 리스트가 비어있으면 true / 아니면 false 반환 |
*index : 인덱스
*Element : 요소
fun main() {
var list: ListOf<String> = listOf("1", "2", "3")
println(list.size()) // 3
println(list.get(0)) // "1"
println(list.indexOf("2")) // 1
println(list.contains("4")) // false
println(list.isEmpty()) // false
...
}
📋 Set은 정해진 순서가 없는 상태로 요소들의 집합을 나열하는 컬렉션이다. List와 달리 중복을 허용하지 않는다. 값의 변경이 불가능한(불변형) 헬퍼함수로 setOf()와 값의 변경이 가능한(가변형) 헬퍼함수 mutableSetOf() / hashSetOf() / linkedSetOf() / sortedSetOf() 가 있다.
fun main() {
val mixSet = setOf("one", 2, "three") // String형과 Int형을 같이 사용 가능
val strSet: Set<String> = setOf("four", "five", "six") // String형
val intSet: Set<Int> = setOf(7, 8, 9, 9) // Int형
println(intSet) // [7, 8, 9] 가 결과 값으로 나온다.
...
}
➡ setOf()는 불변형을 가지고 있다. 값의 추가, 변경, 삭제가 불가능하다. intSet을 선언했을 경우 요소가 중복이 되어 있어 기 때문에 중복된 요소는 처음 선언했을 때 한번만 저장한다.
fun main() {
val strSet: MutableSet<String> = mutableSetOf("one", "two", "three") // String형
val intSet: MutableSet<Int> = mutableSetOf(4, 5, 6) // Int형
val mixSet = mutableSetOf("seven", 8, "nine") // mix형
...
}
➡ mutableSetOf()는 가변형을 가지고 있다. 값의 추가, 삭제가 가능하다. 마찬가지로 중복된 요소는 처음 선언했을 때 한번만 저장한다.
- 추가 : add()
- 삭제 : remove()
함수 | 기능 |
---|---|
size() | set 사이즈 변환 |
indexOf(Element) | 해당 요소의 인덱스 번호 반환 |
contains(Element) | 해당 요소가 있으면 true / 없으면 false 반환 |
isEmpty() | set이 비어 있으면 true / 비어 있지 않으면 false |
clear() | 모든 요소를 제거 |
📋 map은 key - value 로 구성되어 있는 컬렉션이다. key와 value 는 중복을 허용한다. 불변형으로 사용할땐 헬퍼함수 mapOf()를 사용하고 가변형으로 사용할땐 mutableMapOf()를 사용한다.
‼ key가 중복이 될 경우 마지막에 선언된 value의 값으로 덮어씌어진다.
‼ value가 중복이 될 경우 key가 다를 경우 따로 저장이된다.
fun main() {
val strIntMap: Map<String, Int> =
mapOf("one" to 1, "two" to 2, "three" to 3) // "one"은 key, 1은 value...
val strAnyMap: Map<String, Any?> =
mapOf("four" to 4, "사" to 4, "five" to null)
// key 혹은 value에 null 값도 들어 갈 수 있다..
// key가 다르면 value의 값이 중복이 될 수 있다.
...
}
➡ mapOf()는 불변형을 가진다. key와 value 둘 다 추가, 삭제, 변경이 불가능하다.
fun main() {
val strMapOf: MutableMap<String, String?> =
mutableMapOf("one" to "one", "two" to null, "three" to "one")
// ["one" = "one, "two" = null, "three" = "one"] 을 저장
...
}
➡ mutableMapOf()는 가변형을 가진다. key와 value 둘 다 추가, 삭제, 변경이 가능하다.
- 추가 : put(key, value)
- 삭제 : remove(key)
- 변경 : 인덱스에 key를 넣고 바꾸려는 value 값을 넣는다.
→ EX) strMap[”one”] = “oneeee”
함수 | 기능 |
---|---|
size() | map의 크기를 반환 |
get(key) | key에 해당하는 value를 반환 |
contains(key) | 해당키가 있으면 true / 없으면 false 반환 |
isEmpty() | map이 비어있으면 true / 비어있지않으면 false 반환 |
clear() | 모든 key, value 삭제 |
✅ 코틀린의 다른것이 궁금할땐 아래 링크 확인
@evergreen_tree
좋은 글 감사합니다!