STUDY/Kotlin

[Android 14 및 Kotlin 개발 완전 정복하기] 4일차-리스트와 객체

yeonee911 2025. 4. 16. 00:10

챗gpt 유료버전을 결제했다! 완전 똑똑이야


Listof와 MutableListOf

Kotlin에서 컬렉션 타입(collection type)은 여러 개의 데이터를 표현하는 방법이며 Array, List, Set, Map이 있다. List, Set, Map은 Collection 인터페이스를 구현한 클래스이며, 이를 통틀어 컬렉션 타입 클래스라고 한다. 그중 List순서가 있는 데이터 집합으로 데이터의 중복을 허용한다.

Collection 타입의 클래스는 가변 클래스불변 클래스로 나뉜다. Kotlin에서는 불변 타입인 List, 가변 타입인 MutableList를 제공한다. 불변 타입은 요소 추가, 삭제가 불가능하며, 가변 타입은  .add(), .remove() 등의 메서드를 통해 값을 자유롭게 수정할 수 있다. 

listOf()함수로 List 객체를, mutableListOf()함수를 통해 MutableList를 생성할 수 있다. 또한 mutableListOf() 함수는 타입 추론이 가능하기 때문에 명시적인 타입 선언 없이도 앞서 사용한 타입을 그대로 사용할 수 있다.

fun main() {

    // Immutable list
    // val shoppingList = listOf("Processor", "RAM", "Graphics Card", "SSD")

    // mutable list
    val shoppingList = mutableListOf("Processor", "RAM", "Graphics Card RTX 3060", "SSD")

    // adding items to lists
    shoppingList.add("Cooling System")
    shoppingList.remove("Graphics Card RTX 3060")
    shoppingList.add("Graphics Card RTX 4090")

    println(shoppingList) // [Processor, RAM, SSD, Cooling System, Graphics Card RTX 4090]
}

 

  •  Array와 List의 차이점

Array는 고정 크기의 배열, List는 요소 개수 제한 없는 컬렉션이다.

 

  • mutableListOf()를 val로 선언하는 이유

val은 참조(reference)를 바꿀 수 없다는 뜻으로, 그 안에 있는 내용(data)는 바꿀 수 있다.

val list = mutableListOf("a", "b", "c")
list.add("d")  // ✅ 가능
list.remove("b")  // ✅ 가능
// list = mutableListOf("x", "y")  // ❌ 안 됨! -> 참조 자체를 바꾸려 하니까

val list로 선언한 것은 이 변수가 특정 리스트를 가리키는 참조(주소)를 바꾸지 않겠다는 의미다. 이 리스트의 주소는 고정되지만, 리스트 내부의 요소는 변경할 수 있다. 반면 var로 선언하면, 이 변수는 나중에 다른 리스트를 가리키는 것으로 변경될 수 있다. 즉, 리스트 전체를 새로 덮어쓸 수 있다는 의미다.
따라서 일반적으로는 리스트 안의 요소만 바꾸고 참조는 유지하는 경우가 많기 때문에, 리스트 전체를 다른 것으로 바꾸는 실수를 막기 위해 val 선언을 권장한다.

 

리스트에서의 set 메서드

set() 메서드는 리스트에서 특정 인덱스의 항목을 새로운 값으로 교체사용된다. 개의 매개변수를 받으며, 번째는 바꾸고 싶은 요소의 인덱스, 번째는 새로 넣을 이다.

 

Contains 메서드 - 항목이 리스트에 있는지 확인

contains() 메서드는 리스트 안에 특정 항목이 포함되어 있는지 여부를 확인할 때 사용한다. 찾고 싶은 값을 인자로 전달하면 되고, 결과는 Boolean 타입으로 반환된다.

 

Kotlin에서 리스트 조작 연습

package com.example.kotlinbasics

fun main() {
    val fruitsList = mutableListOf("apple", "peach", "strawberry", "cherry", "banana")
    println(fruitsList)
    fruitsList.add("melon")
    println(fruitsList)
    fruitsList.remove("apple")
    println(fruitsList)
    if (fruitsList.contains("watermelon")) {
        println("Has watermelon")
    }
    else {
        println("No watermelon")
    }
}

 

 

리스트와 함께 사용하는 for루프

  for(item in shoppingList) {
        println(item)
        if (item == "RAM"){
            shoppingList.removeLast()
            break;
        }
    }

    println(shoppingList)

 

for 루프에서 인덱스 가져오기

  • for (i in 1..10) { ... } : 1부터 10까지 1씩 증가
  • for (i in 1 until 10) { ... } : 1부터 9까지 1씩 증가(10 미포함)
  • for (i in 2...10 step 2) { ... } : 2부터 10까지 2씩 증가
  • for (i in 10 downTo 1) { ... } : 10부터 1까지 1씩 감소