Kotlin - List, MutableList

2022. 4. 20. 11:56IT/안드로이드

반응형

Kotlin 의 목록 유형에는 크게 두가지가 있다.

List - List는 만든 후 수정 불가.

MutableList - 만든 후 수정 가능. 요소를 추가, 삭제, 업데이트 할 수 있다.

 

List()

List는 여느 언어와 같이  Elemts 와 Index 가 아래와 같이 구성되어있다. 

값을 확인하고싶으면 아래와 같이 값을 불러온다.

println("First element: ${numbers[0]}")
println("Last index: ${numbers.size - 1}")
println("Last element: ${numbers[numbers.size - 1]}")
println("First: ${numbers.first()}")
println("Last: ${numbers.last()}")

맨 처음 요소 list.first(), 맨 마지막 요소 list.last()

또 다른 유용한 목록 작업중에는 , 주어진 값이 목록에 있는지 확인하는 contains() 라는 Method이다.

예를들어 1~6까지의 숫자만 있는 list 에서 list.contains(7) 을 호출하면 False가 뜰 것이다.

 

MuableListOf()

MutableList를 정의하려면 아래의 소스 중 둘중 하나로 선언하면 된다.

fun main() {
    //val entrees = mutableListOf<String>()
    val entrees: MutableList<String> = mutableListOf()
    
    println("Entrees: $entrees")

}

<String>처럼, Element의 유형을 선언 안해주면 Error가 뜬다. (Type 매개변수, <T>)

기본적으로 위와같이 선언을 해야, 빈 List가 출력이 된다. []

List Type 을 String으로 해주었으니, String 요소 만 넣어보겠다.

fun main() {
    //val entrees = mutableListOf<String>()
    val entrees: MutableList<String> = mutableListOf()
    entrees.add("noodles")
    entrees.add("spaghetti")    
    println("Entrees: $entrees")
    
    val moreItems = listOf("ravioli", "lasagna", "fettuccine")
    println("Add list: " + entrees.addAll(moreItems))
    println("Entrees: $entrees")
    
    entrees.remove("spaghetti")
    println("Entrees: $entrees")
    
    entrees.removeAt(3)
    println("Entrees: $entrees")
    
    entrees.clear()
    println("Entrees: $entrees")
}

결과 : 

Entrees: [noodles, spaghetti]
Add list: true
Entrees: [noodles, spaghetti, ravioli, lasagna, fettuccine]
Entrees: [noodles, ravioli, lasagna, fettuccine]
Entrees: [noodles, ravioli, lasagna]
Entrees: []

맨 처음에, add로 2가지를 넣었다. noodles와 spaghetti. 그래서 Entree에는 두가지만 표시되었다. 

다음은, 한꺼번에 여러개를 List에 넣는 방법이다. 

먼저 moreItems에 3개의 element를 넣고, addAll로 3가지를 한꺼번에 넣는다.

정상 처리되면 기존 entrees 뒤에 더 붙어서 list가 출력된다.

요소를 지우는 것.remove("요소") 로 지울수 있다. 또는 Index로 지울수도 있다. removeAt(숫자) 

전체 list를 지우기 위해서clear()를 호출한다. 

List가 비었는지 알기위해서는 , isEmpty() 로 확인한다.

 

## 요약 정리 ##

Kotlin에서는 Kotlin 표준 라이브러리를 통해 데이터 컬렉션을 더 쉽게 관리하고 조작할 수 있는 기능을 제공합니다. 컬렉션은 동일한 데이터 유형의 여러 객체로 정의할 수 있습니다. Kotlin에는 목록, 집합, 지도와 같은 다양한 기본 컬렉션 유형이 있습니다. 이 Codelab에서는 목록에 특히 중점을 두었고 향후 Codelab에서 집합과 지도를 자세히 알아봅니다.

  • 목록은 특정 유형 요소의 정렬된 컬렉션입니다(예: Strings. 목록).
  • 색인은 요소의 위치를 나타내는 정수 위치입니다(예: myList[2]).
  • 목록에서 첫 번째 요소는 색인 0(예: myList[0])에 있고 마지막 요소는 myList.size-1(예: myList[myList.size-1] 또는 myList.last())에 있습니다.
  • 두 가지 목록 유형은 다음과 같습니다. List, MutableList.
  • List는 읽기 전용으로, 초기화가 완료되면 수정할 수 없습니다. 그러나 원본을 변경하지 않고 새 목록을 반환하는 sorted()  reversed()와 같은 작업을 적용할 수 있습니다.
  • MutableList는 요소를 추가하거나 삭제, 수정하는 등 만든 후에 수정할 수 있습니다.
  • addAll()을 사용하여 항목 목록을 변경 가능한 목록에 추가할 수 있습니다.
  • while 루프를 사용하여 표현식이 false로 평가될 때까지 코드 블록을 실행하고 루프를 종료합니다.

while (expression) {

// While the expression is true, execute this code block

}

  • for 루프를 사용하여 목록의 모든 항목을 반복합니다.

for (item in myList) {

// Execute this code block for each element of the list

}

  • vararg 수정자를 사용하면 가변적인 인수 수를 함수나 생성자에 전달할 수 있습니다.

 

++

반복해서 해봐야것구만... 

더보기
class Order(val orderNumber: Int) {
    private val itemList = mutableListOf<Item>()
    /*
    fun addItem(newItem: Item) {
        itemList.add(newItem)
    }
    fun addAll(newItems: List<Item>) {
        itemList.addAll(newItems)
    }
    */
    fun addItem(newItem: Item): Order {
        itemList.add(newItem)
        return this
    }
    fun addAll(newItems: List<Item>): Order {
        itemList.addAll(newItems)
        return this
    }
    
    fun print() {
        println("Order #${orderNumber}")
        var total = 0
        for (item in itemList) {
            println("${item}: $${item.price}")
            total += item.price
        }
        println("Total: $${total}")
    }
}

open class Item(val name: String, val price: Int)
//Item이 상위클래스.. subclass가 상위클래스에서 확장되므로, 
// 클래스는 open 과 함께 표시해야한다.
class Noodles: Item("Noodles", 10) {
    override fun toString(): String {
        return name
    }
}
/*
class Vegi(val topping1: String,
          val topping2: String,
          val topping3: String): Item("Vegi", 5) {
    override fun toString(): String {
        return name
    }
}
*/

/*
class Vegi(val toppings: List<String>): Item("Vegi", 5) {
    override fun toString(): String {
        return name
    }
}
*/

class Vegi(vararg val toppings: String) : Item("Vegi", 5) {
    override fun toString(): String {
        if (toppings.isEmpty()) {
            return "$name Chef's Choice"
        } else {
            return name + " " + toppings.joinToString()
        }
    }
}
fun main() {
    
    val ordersList = mutableListOf<Order>()
    
	val order1 = Order(1)
    order1.addItem(Noodles())
    //order1.print()
    ordersList.add(order1)
    
    println()
    
    val order2 = Order(2)
    order2.addItem(Noodles())
    order2.addItem(Vegi())
    //order2.print()
    ordersList.add(order2)
    println()
    
    val order3 = Order(3)
    val items = listOf(Noodles(), Vegi("Carrots", "Beans", "Celery"))
    order3.addAll(items)
    ordersList.add(order3)
    //order3.print()
    
    val order4 = Order(4).addItem(Noodles()).addItem(Vegi("Cabbage", "Onion"))
    ordersList.add(order4)
    
    val order5 = Order(5)
    .addItem(Noodles())
    .addItem(Noodles())
    .addItem(Vegi("Spinach"))
    ordersList.add(order5)
    
    for(order in ordersList) {
        order.print()
        println()
    }
}

## 결과 값 ##

Order #1
Noodles: $10
Total: $10

Order #2
Noodles: $10
Vegi Chef's Choice: $5
Total: $15

Order #3
Noodles: $10
Vegi Carrots, Beans, Celery: $5
Total: $15

Order #4
Noodles: $10
Vegi Cabbage, Onion: $5
Total: $15

Order #5
Noodles: $10
Noodles: $10
Vegi Spinach: $5
Total: $25

 

 

728x90
반응형

'IT > 안드로이드' 카테고리의 다른 글

Android - 수명 주기  (6) 2022.04.27
Android - RecyclerView  (6) 2022.04.20
Android - Material Design page  (2) 2022.04.19
Kotlin의 클래스 및 상속 - 3  (1) 2022.04.18
Kotlin의 클래스 및 상속 - 2  (1) 2022.04.18