인프런 커뮤니티 질문&답변
mutable과 var의 차이점
작성
·
201
0
컬렉션 부분을 배우면서 한가지 이상한 점이 생겨서 질문드립니다.
강의 초반 var / val의 차이점을 알려주시면서 읽기, 쓰기 가능 혹은 읽기만 가능 이라고 알려주셨는데 val로 List을 만들면 당연히 각각의 변수의 값을 바꿀 수 없는 거 아닌가 싶어서요
또, val로 만든 List가 mutable을 붙이면 값이 변화할수 있다는게 조금 이해가 되지 않습니다
추정을 조금 해보자면 List을 만들면 List자체가 하나의 변수가 되어 val { } 안에 들어있는 값을 읽어오고 그 값을 List에 새롭게 저장하는 방식인가요? 만약에 그런 방식이 아니라면 이해가 되지 않는 부분입니다
반대로 생각하면 var로 선언한 변수들로 immutableList를 만들었을때 값이 변화가 안되는건가요?
퀴즈
프로그래밍이란 컴퓨터에게 특정 작업을 시키기 위한 무엇을 만드는 과정일까요?
하드웨어 부품
데이터베이스
명령어들의 집합 (프로그램)
사용자 인터페이스 디자인
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
var와 val의 차이는 변수의 재할당 가능 여부와 관련이 있습니다. var는 변수에 새로운 값을 재할당할 수 있지만, val는 초기에 할당된 값을 변경할 수 없습니다(읽기 전용).
컬렉션의 경우, val로 선언된 컬렉션은 컬렉션 자체를 재할당할 수 없습니다. 하지만 이것은 컬렉션이 가지고 있는 요소의 값을 변경할 수 없다는 의미는 아닙니다. 여기서 mutable과 immutable 컬렉션의 차이점이 중요합니다.
- Immutable 컬렉션(e.g.,
listOf(),mapOf())은 생성 후에 그 내용을 변경할 수 없습니다. 즉, 요소를 추가하거나 제거할 수 없습니다.
- Mutable 컬렉션(e.g.,
mutableListOf(),mutableMapOf())은 생성 후에도 요소를 추가하거나 삭제할 수 있습니다.
val로 선언된 List가 mutable일 경우, List를 재할당할 수는 없지만, List 내부의 요소를 수정할 수 있습니다(예: 요소 추가, 삭제). 반면에, immutable List를 사용하면 처음 생성할 때 지정한 요소를 변경할 수 없습니다.
var로 선언된 변수에 immutable 컬렉션을 할당하면, 변수에 다른 컬렉션을 재할당할 수는 있지만, 할당된 immutable 컬렉션의 요소를 변경할 수는 없습니다. 이 경우 변수를 다른 컬렉션으로 변경할 수 있어도, 할당된 컬렉션 자체의 변경은 불가능합니다.
즉, var/val은 변수의 재할당 가능성과 관련이 있고, mutable/immutable은 해당 컬렉션이 요소의 변경을 허용하는지에 대한 특성입니다.





