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