App노자

[Kotlin] List 본문

Android/Kotlin

[Kotlin] List

앱의노예 2023. 7. 22. 20:41

1. List란?


List란 순서에 따라 정렬된 요소를 가지는 컬렉션이다

헬퍼함수인 listof()를 사용하여 값을 변경할 수 없는 불변형 List를 만들고 mutableListOf()를 사용해 값을 변경할 수 있는 가변형을 표현한다 불변형 List에서는 인자는 원하는 만큼의 가변 인자를 가지도록 vararg로 선언할 수 있다

 

https://kotlinlang.org/docs/kotlin-tour-collections.html#list

 

Collections | Kotlin

 

kotlinlang.org

2. 불변형 List


fun main() {

    var numbers: List<Int> = listOf(1, 2, 3, 4, 5, 1)
    var names: List<String> = listOf("one", "two", "three")
    for (name in names) {
        println(name)
    }
    for (num in numbers) print(num) // 한 줄에서 처리하기

   // List의 기본 멤버 메서드
    println(names.indices) //0..2
    println(names.size) // 3
    println(names.get(0)) // "one"
    println(names.indexOf("three")) // 2
    println(names.contains("two")) //  true

    // 여러가지 타입이 병합된 선언
    var mixedTypes = listOf("Hello", 1, 2.445, 's')
}
public fun <T> listOf(vararg elements: T): List<T>

불변형 List를 만들 때 사용하는 listOf()의 원형과 작성예시이다

vararg는 가변 인자를 받을 수 있기 때문에 원하는 만큼 요소를 지정할 수 있고 값을 반환할 때는 List<T>를 사용한다

형식 매개변수 <T>는 원하는 자료형을 지정해 선언할 수 있다

서로 다른 자료형을 가진 요소를 합쳐서 선언할 수도 있으며 이 경우와 자료형을 따로 지정하지 않을 경우 <Any>가 기본값이 된다

다양한 기본 멤버 메서드가 존재해 여러 방식으로 활용이 가능하다

val emptyList = emptyList<String>()

비어 있는 List를 생성하려면 emptyList<>()를 사용한다 

emptyList를 사용 시에는 반드시 형식 매개변수를 지정해야 한다

val nonNullsList: List<Int> = listOfNotNull(2, 45, 2, null, 5, null)

listOfNotNull()로 초기화하면 null을 제외한 요소만 반환해 List를 구성할 수 있다

null이 아닌 요소만 골라 컬렉션을 초기화한다

fun main() {
    val fruits = listOf("apple", "banana", "kiwi")

    // 요소만 출력
    for (item in fruits) {
        println(item)
    }

    // 인덱스와 함께 출력
    for (index in fruits.indices) { // 인덱스 지정
//        println("fruits[$index] = ${fruits[index]}")
        if (index%2 == 0) println("fruits[$index] = ${fruits[index]}") // 짝수만 고르기
    }

    // while 루프 이용하기
    var index = 0
    while (index < fruits.size) {
        println("fruits[$index] = ${fruits[index]}")
        index++
    }


}

List 같은 컬렉션에서 요소를 순환하기 위해 for문아너 while문을 사용한다

요소의 인덱스를 통해 List에 접근하려면 컬렉션에 indices 멤버를 추가한다

3. 가변형 List


//arrayListOf()

fun main() {
    // 가변형 List를 생성하고 자바의 ArrayList로 반환
    val stringList: ArrayList<String> = arrayListOf<String>("Hello", "Kotlin", "Wow")
    stringList.add("Java") // 추가
    stringList.remove("Hello") // 삭제
    println(stringList)

}

arrayListOf()는 가변형 List를 생성하지만 컴파일 시 반환 자료형은 List가 아닌 자바의 ArrayList이다

가변형이기 때문에 add(), remove()를 통해 요소를 추가하거나 삭제할 수 있다

//mutableListOf()

fun main() {
    // 가변형 List의 생성 및 추가, 삭제, 변경
    val mutableList: MutableList<String> = mutableListOf<String>("Kildong", "Dooly", "Chelsu")
    mutableList.add("Ben") // 추가
    mutableList.removeAt(1) // 인덱스 1 삭제
    mutableList[0] = "Sean" // 인덱스 0를 변경, set(index: Int, element: E)과 같은 역할
    println(mutableList)

    // 자료형의 혼합
    val mutableMixed = mutableListOf("Android", "Apple", 5, 6, 'X')
    println(mutableMixed)
}

mutableList 인터페이스를 사용하는 헬퍼 함수 mutableListOf()를 통해 List의 요소를 추가 삭제 교체 할 수 있다 

add(), removeAt()를 통해 요소를 추가하거나 삭제할 수 있으며 set() 혹은 대괄호 표현을 통해 인덱스에 해당되는 요소를 변경할 수 있다

제네릭 표현을 생략하면 여러가지 자료형으로 구성된 mutableList를 할당할수 있다

fun main() {

    // 불변형 List를 가변형으로 변환하기
    val names: List<String> = listOf("one", "two", "three") // 불변형 List

    val mutableNames = names.toMutableList()  // 새로운 가변형 List 가 만들어짐
    mutableNames.add("four")
    println(mutableNames)
}

불변형 List의 요소를 그대로 가변형 List를 생성하려면 toMutableList()를 사용한다

기존의 List를 변경하는 개념이 아니라 그대로 두고 새로운 공간을 만들어내는 개념이다

'Android > Kotlin' 카테고리의 다른 글

[Kotlin] sequence (시퀀스)  (0) 2023.08.03
[Kotlin] Set과 Map  (0) 2023.07.30
[Kotlin] Array 클래스  (0) 2023.07.21
[Kotlin] 제네릭(Generic)  (0) 2023.06.18
[Kotlin] 클래스와 클래스의 관계  (0) 2023.05.29