Kotlin/Kotlin | Spring 학습기록

[Kotlin] mutableList로 List에서 수정과 삭제를 해보자

kth990303 2022. 5. 13. 18:24
반응형

코틀린에서는 기본적으로 val, var 두 가지 변수를 제공해준다. 이 둘은 읽기 전용이냐, 수정이 가능하냐로 차이가 존재한다.

 

코틀린의 리스트도 마찬가지이다. 기본적으로 코틀린에서의 List는 add, remove와 같은 수정, 추가, 삭제 작업이 불가능하다. 코틀린에서 add, remove를 하기 위해선 List가 아닌 mutableList로 선언해주어야 한다.

mutableList에서는 수정, 추가, 삭제 작업이 가능하다.
List에서는 수정, 삭제, 추가 작업이 불가능하다.

참고로 mutableList는 List의 자식 클래스로써 상속 관계이다.

 

그렇기 때문에 List<Int> = mutableListOf()와 같이 선언하는 것도 가능하다. 하지만, 부모 클래스 타입의 변수는 자식 클래스의 메서드에 접근할 수 없으므로 아래와 같아 같이 코드를 작성해도 add, remove 등은 불가능하다. java에서의 List는 add, remove가 가능했기 때문에 헷갈릴 수도 있는데, 코틀린에서의 List는 add, remove가 안되는 점을 명심하자.

수정, 삭제, 추가 작업이 불가능하다.


만약 list를 MutableList로 바꿔주고 싶다면 toMutableList()를 사용하면 된다. toMutableList()를 이용하여 반환된 값은 MutableList 타입의 변수가 되므로, is List가 아닌 is List<*> 타입 체크 조건문을 통과할 수 있게 된다.

list2는 MutableList 타입이므로, list2 is List는 컴파일 에러가 발생하게 된다.

 

참고로 반대의 의미인 toList()도 존재한다.


포스팅에서 사용된 코드들은 IDE에서 작성된 게 아니다. 코틀린 공식문서에서 제공해주는 컴파일러를 이용했다.

https://kotlinlang.org/

 

filter, map 등을 이용하여 바로 List를 반환할 수 있는 api 함수들이 많아 mutableList를 사용할 일이 많지는 않을 수 있다.

하지만, 꼭 필요할 때에 mutableList가 아닌 List를 쓰면서 add, remove가 안된다고 당황하지 않도록 포스팅을 작성해보았다 :)

반응형