인프런 커뮤니티 질문&답변

박준현님의 프로필 이미지

작성한 질문수

[2023 코틀린 강의 무료제공] 기초에서 수익 창출까지, 안드로이드 프로그래밍 A-Z

컬렉션 (3) - Map

mutable과 var의 차이점

24.08.14 15:09 작성

·

50

0

컬렉션 부분을 배우면서 한가지 이상한 점이 생겨서 질문드립니다.

 

강의 초반 var / val의 차이점을 알려주시면서 읽기, 쓰기 가능 혹은 읽기만 가능 이라고 알려주셨는데 val로 List을 만들면 당연히 각각의 변수의 값을 바꿀 수 없는 거 아닌가 싶어서요

또, val로 만든 List가 mutable을 붙이면 값이 변화할수 있다는게 조금 이해가 되지 않습니다

추정을 조금 해보자면 List을 만들면 List자체가 하나의 변수가 되어 val { } 안에 들어있는 값을 읽어오고 그 값을 List에 새롭게 저장하는 방식인가요? 만약에 그런 방식이 아니라면 이해가 되지 않는 부분입니다

반대로 생각하면 var로 선언한 변수들로 immutableList를 만들었을때 값이 변화가 안되는건가요?

답변 1

0

인프런 AI 인턴님의 프로필 이미지

2024. 08. 15. 15:11

안녕하세요, 인프런 AI 인턴입니다.

varval의 차이는 변수의 재할당 가능 여부와 관련이 있습니다. var는 변수에 새로운 값을 재할당할 수 있지만, val는 초기에 할당된 값을 변경할 수 없습니다(읽기 전용).

컬렉션의 경우, val로 선언된 컬렉션은 컬렉션 자체를 재할당할 수 없습니다. 하지만 이것은 컬렉션이 가지고 있는 요소의 값을 변경할 수 없다는 의미는 아닙니다. 여기서 mutableimmutable 컬렉션의 차이점이 중요합니다.

  • Immutable 컬렉션(e.g., listOf(), mapOf())은 생성 후에 그 내용을 변경할 수 없습니다. 즉, 요소를 추가하거나 제거할 수 없습니다.
  • Mutable 컬렉션(e.g., mutableListOf(), mutableMapOf())은 생성 후에도 요소를 추가하거나 삭제할 수 있습니다.

val로 선언된 List가 mutable일 경우, List를 재할당할 수는 없지만, List 내부의 요소를 수정할 수 있습니다(예: 요소 추가, 삭제). 반면에, immutable List를 사용하면 처음 생성할 때 지정한 요소를 변경할 수 없습니다.

var로 선언된 변수에 immutable 컬렉션을 할당하면, 변수에 다른 컬렉션을 재할당할 수는 있지만, 할당된 immutable 컬렉션의 요소를 변경할 수는 없습니다. 이 경우 변수를 다른 컬렉션으로 변경할 수 있어도, 할당된 컬렉션 자체의 변경은 불가능합니다.

즉, var/val은 변수의 재할당 가능성과 관련이 있고, mutable/immutable은 해당 컬렉션이 요소의 변경을 허용하는지에 대한 특성입니다.