프로그래밍 언어/코틀린

코틀린 20. 리스트(List)

닉네임못짓는사람 2020. 12. 28. 17:32
반응형

이번 글에서는 리스트에 대해서 알아보도록 하겠습니다.

리스트(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/

 

MutableList - Kotlin Programming Language

 

kotlinlang.org

이번 글은 이 정도로 마치도록 하겠습니다.

감사합니다.

반응형

'프로그래밍 언어 > 코틀린' 카테고리의 다른 글

코틀린 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