Develop!/Kotlin

list int kotlin

체리필터 2023. 7. 31. 17:47
728x90
반응형

kotlin에서 list를 만들 때는 listOf 함수를 사용한다.

listOf로 만들어진 list는 기본적으로 immutable 객체이다. mutable로 생성하려면 mutalbeListOf을 사용하면 된다.

mutable list를 변할 수 없는 val 변수에 담으면 어떻게 될까?

fun listTest() {
    val list1 = mutableListOf('A')
    list1 += 'A'
    list1.plusAssign('A')
    println(list1)

    val list2 = listOf('B')
//    list2 += 'B'
//    list2 = list2 + 'B'
    println(list2)

    var list3 = listOf('C')
    list3 += 'C'
    val newList = list3 + 'C'
    list3 = newList
    println(list3)
}

list1이 val로 정의되어 있지만 list 자체가 mutable 이기 때문에 값을 담는 행위 자체가 문제 없이 이루어 진다.

디버그 포인트를 찍고 진행시켜 보면 아래와 같이 나온다.

mutable로 정의 된 list는 ArrayList 라고 나온다.

두 번째 list2의 경우에는 immutable로 정의 하였기 때문에 값을 추가하는 행위는 문제가 발생하게 된다.

list3와 같이 var로 정의 된 변수에 immutable list를 담게 되면 어떻게 될까?

아무런 이상 없이 값이 추가 되게 된다. 이를 디버깅 포인트를 찍고 보게 되면 다음과 같이 나오게 된다.

초반에는 list2와 같이 immutable list로 동작하게 되어서 Collections 타입으로 보여진다. 하지만 list3에 'C'를 추가하게 되는 순간 다음과 같이 변하게 된다.

list3는 Collection아 아니라 ArrayList로 변하게 된다. 그리고 list3에 C를 추가 하면서 newList로 담게 될 경우 아래처럼 값이 담기게 된다.

즉 newList는 3개의 값을 담고 있고, list3는 아직 2개의 값을 담게 된다.

다시 newList를 list3로 담게 되면 이번에는 list3도 값이 3개가 된다.

디버깅을 하면서 값이나 변수의 형태를 천천히 보게 되면 이해를 할 수 있게 된다.

 

 

 

728x90
반응형

'Develop! > Kotlin' 카테고리의 다른 글

Set in Kotlin  (0) 2023.08.02
가변인자 목록 in Kotlin  (0) 2023.08.02
생성자 in kotlin  (0) 2023.07.27
'in' in kotlin  (0) 2023.07.26
for loop in kotlin  (0) 2023.07.21