본문 바로가기
Kotlin/📕Kotlin 공부

Kotlin Mutable, Immutable List

by yewoneeee 2024. 7. 26.

Kotlin에는 두 가지 유형의 List가 있다

1. 읽기 목적으로 사용되는 Immutable List(불변)

2. 데이터를 쓸 수 있는 mutable List(가변)

 


잠깐 가변성과 불변성에 대해 알아보자

가변성(Mutability)

가변성은 상태를 가지는 경우를 말하는데, 아래와 같은 문제가 발생할 수 있다.

- 멀티스레드에서 값을 보장하지 못함

- 값의 예측이 어렵고 변경에 있어서 위험함

- 테스트와 디버깅이 어려움

- 상태 변경 발생 시 처리 필요

 

불변성(Immutability)

함수형 프로그래밍에서는 불변성을 중요하게 생각함.

Kotlin에서는 불변성을 강제하지는 않으나, 불변성을 권장하고 있음

불변성이란, 상태를 변경하지 않는 것

즉, 메모리의 특정 공간에 저장된 값을 변경하지 않는 것을 말함

 

불변성은 생성 시점 이후 한 번 정의된 상태를 유지하기 때문에 스레드 간 안정성이 보장되며, 동기화 문제도 해결 가능하다.

 

오늘은 Collection 중 mutable, immutable list에 대해 알아보자 

 


 

Immutable List

Kotlin에서 Immutable List를 만들 땐, listOf()를 사용한다.

listOf를 사용해서 정의한 리스트는 add, modify, delete 작업이 불가능하다.

fun main() {
    val list = listOf("yewon", "kotlin", "world")
    println(list)
}

 

데이터의 추가, 수정, 삭제를 위한 list as MutableList 과 같은 다운캐스팅 시도는 읽기 전용 규칙을 무시하기 때문에 지양해야 함

대신 toMutableList() 함수를 사용하면 된다.

 

Mutable List

kotlin에서 Mutable List를 만들 땐, mutableListOf()를 사용한다.

fun main() {
    val mutableList = mutableListOf("yewon", "kotlin", "world")
    mutableList.add("android") // 추가
    mutableList.set(0, "yewon kim") // 수정
    mutableList.remove("yewon") // 삭제
    println(mutableList)
    // 결과 [yewon kim, kotlin, world, android]
}

 

코틀린에서 var과 Mutable Collection을 사용하면 두 개의 가변 포인트를 모두 동기화 해줘야 하기 때문에 이렇게 사용하면 안됨

val + Mutable Collection, var + Immutable Collection을 사용하면 변경 가능한 Collection으로 사용이 가능함

 

 

참고

https://velog.io/@wlsrhkd4023/Kotlin-%EB%B6%88%EB%B3%80%EC%84%B1Immutability%EA%B3%BC-%EA%B0%80%EB%B3%80%EC%84%B1Mutability

 

[Kotlin] 불변성(Immutability)과 가변성(Mutability)

함수형 프로그래밍에서는 불변성을 중요하게 생각합니다. 코틀린은 함수형 프로그래밍을 지원하는 언어로 불변성을 강제하지않고 가변을 허용하지만 불변성을 권장하고 있습니다. 불변성(Immut

velog.io

https://medium.com/@anupamsingh696/kotlin-mutable-vs-immutable-list-a534ffbfa096

 

Kotlin Mutable Vs Immutable List

The Kotlin List helps the developer read and write data locally. There are two types of lists available in Kotlin. A list that is used only…

medium.com

 

'Kotlin > 📕Kotlin 공부' 카테고리의 다른 글

Kotlin 널 안정성(Null Safety)  (1) 2024.09.12
Kotlin backing field  (0) 2024.09.12
isEmpty, isBlank 차이  (0) 2024.07.27
StringBuilder  (0) 2024.07.20

댓글