이번 글에서는 리스트에 대해서 알아보도록 하겠습니다.
리스트(List)
리스트는 코틀린에서 컬렉션 클래스를 상속받는 세 클래스(List, Set, Map)중 하나입니다.
이전에 배웠던 배열(Array)와 비슷한 개념을 가지고 있는데, 어떤 것인지 자세히 알아봅시다.
리스트는 여러 개의 데이터들을 한 곳에 모아서 관리할 수 있습니다.
리스트를 만들 때에는 그냥 list와 mutableList로 나뉘게 되는데요.
list의 경우 최초 생성 시에만 값을 넣을 수 있으며, 이후에 해당 리스트의 값을 변경하거나 추가, 삭제할 수 없습니다.
반면 mutableList는 이러한 값의 변경이 가능한 리스트입니다.
그렇다면 배열과 리스트의 차이는 무엇일까요?
이 주제에 맞는 배열의 가장 큰 특징은 '크기가 정해져 있다'라는 부분일 것입니다.
때문에 배열은 데이터를 추가, 삭제하는데에 불편함이 따르게 됩니다.
배열은 크기가 정해져 있기 때문에 데이터를 추가하려면 더 큰 크기의 새로운 배열을 추가한 뒤,
기존의 배열을 이에 옮겨 담아야 하는 수작업이 필요하며, 데이터 삭제 시에도 데이터 자체는 null이나 다른 값으로
변경이 가능해도 배열의 크기 자체는 변경할 수 없기 때문에 어쩔 수 없이 메모리 낭비가 발생하게 됩니다.
반면, 리스트의 경우 이러한 크기의 변경을 동적으로 수행해주도록 되어있습니다.
때문에 데이터의 추가, 삭제 시 위와 같은 작업들을 따로 해주지 않아도 된다는 점이 가장 큰 차이점일 것입니다.
그러면 이제 리스트를 사용하는 법을 코드로 확인해봅시다.
fun main() {
var li1 = listOf(1, 2, 3)
var li2 = mutableListOf(3, 2, 1)
println(li1[0])
println(li2[0])
println(li1)
println(li2)
}
리스트를 선언하는 방법은 listOf와 mutableListOf가 있는데, 이름만 봐도 구분이 될 것 같으니 설명은 생략하겠습니다.
또한 리스트는 배열처럼 각 요소에 대해 index를 사용한 접근이 가능하며, 리스트 전체를 출력할 수도 있습니다.
이러한 리스트를 다룰 때에는 리스트에 관련된 함수들을 사용하는데, 어떤 것들이 있는지 몇 가지만 알아보겠습니다.
리스트 관련 함수
1. add : 리스트 요소 추가
add함수는 리스트에 새로운 요소를 추가할 때 사용하는 함수입니다.
위의 코드에서는 listOf로 선언된 변경 불가능한 리스트에 요소를 추가하려고 했기 때문에 오류가 발생했습니다.
해당 코드를 삭제하고 다시 코드를 실행할 시 li2리스트의 가장 끝에 새롭게 요소가 추가된 것을 볼 수 있습니다.
또한 add함수는 요소를 추가할 위치도 지정할 수도 있습니다.
fun main() {
var li1 = listOf(1, 2, 3)
var li2 = mutableListOf(3, 2, 1)
li2.add(1, 3)
println(li2)
}
이렇게 argument에 첫 번째를 위치로, 두 번째를 데이터로 입력해주게 되면
인덱스 1번의 자리, 즉 리스트의 두 번째 자리에 새로운 요소를 추가한 뒤, 본래 있던 데이터들은 뒤로 밀어내게 됩니다.
2. clear : 리스트의 모든 요소 삭제
clear함수는 해당 리스트의 모든 요소를 삭제하는 함수입니다.
fun main() {
var li2 = mutableListOf(3, 2, 1)
li2.clear()
println(li2)
}
3. remove : 리스트 요소 삭제
remove는 clear와 다르게 지정한 데이터와 일치하는 요소를 리스트에서 삭제합니다.
fun main() {
var li2 = mutableListOf(3, 2, 1)
li2.remove(3)
println(li2)
}
이때 삭제되는 요소는 리스트에서 해당 값을 가진 가장 앞의 요소입니다.
예를 들어 위의 코드에서 리스트가 [3, 2, 3, 1]이면 가장 앞의 3만 삭제되어 [2, 3, 1]이 됩니다.
또한, 삭제하려는 값이 해당 리스트 내에 존재하지 않으면 아무런 작업도 하지 않습니다.
이러한 remove와 비슷한 함수로 removeAt이 있는데요.
removeAt은 remove와 달리 데이터가 아닌 인덱스로 요소를 삭제합니다.
fun main() {
var li2 = mutableListOf(3, 2, 1)
li2.removeAt(1)
println(li2)
}
위와 같이 removeAt을 사용하면 리스트에서 1이 아니고 인덱스 1의 자리에 있는 2가 삭제됩니다.
4. sort : 리스트를 정렬하는 함수입니다.
fun main() {
var li2 = mutableListOf(3, 9, 1, 5, 2)
li2.sort()
println(li2)
}
sort함수는 기본적으로 리스트 내부의 요소들을 오름차순으로 정렬합니다.
리스트를 내림차순으로 정렬하고 싶다면 sortDescending함수를 사용하시면 됩니다.
fun main() {
var li2 = mutableListOf(3, 9, 1, 5, 2)
li2.sortDescending()
println(li2)
}
또한 sort함수와 비슷한 sorted함수라는 것이 존재하는데, 이 둘의 차이점은
sort함수의 경우 해당 리스트 자체를 정렬하여 변경하지만, sorted함수는 정렬된
새로운 리스트를 만들어 반환하기 때문에 기존의 리스트는 변하지 않게 됩니다.
fun main() {
var li2 = mutableListOf(3, 9, 1, 5, 2)
println(li2.sorted())
println(li2)
}
5. shuffle : 리스트의 요소를 섞는 함수입니다.
shuffle함수는 리스트 내의 요소를 무작위로 섞어주는 함수입니다.
fun main() {
var li2 = mutableListOf(3, 9, 1, 5, 2)
li2.shuffle()
println(li2)
li2.shuffle()
println(li2)
li2.shuffle()
println(li2)
}
이외에 리스트에 관련한 함수들은 아래의 링크에 가시면 확인할 수 있습니다.
kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/
이번 글은 이 정도로 마치도록 하겠습니다.
감사합니다.
'프로그래밍 언어 > 코틀린' 카테고리의 다른 글
코틀린 22. 맵(Map) (0) | 2021.01.01 |
---|---|
코틀린 21. 셋(Set) (0) | 2020.12.30 |
코틀린 19. 접근제한자 (0) | 2020.12.28 |
코틀린 18. 프로젝트 구조 (0) | 2020.12.27 |
코틀린 17. const와 상수 (0) | 2020.12.26 |