728x90

코틀린에서 val 과 var의 차이는 불변과 가변의 차이로 알고 있음,

val name = "name"

name = "KIM" //변경불가능 

var age = 10

age = 20 //변경가능 

val 은 Java의 final 과 비슷함 한 번 초기화 후에, 값이 변경이 불가능한데  array,list,set,map를 생성할때도 마찬가지로 읽기전용 listOf() , setOf() , mapOf() 등의 불변 함수, mutableListOf() , mutableSetOf() , mutableMapOf() 등과 같이 가변함수로 나누어져 있는데,

val list = mutableListOf(1,2,3)
list.add(4) // 4요소 추가
list.remove(1) // 1요소 제거
list[2] = 5 //2번째 index 값 5로 변경

val list = mutableListOf() 이 형태는 val 인데 어떻게 값이 변경이 될까 갑작스럽게 혼란스러움 

 

그래서 val 과 var 의 의미를 다시 생각해 보니 val 과 var 이 읽기 전용, 변경가능 이라는 말이, 값을 할당할 때 재할당이 가능하냐 불가능하냐로 이해하고 있고, list를 val 로 선언을 해도 값을 변경가능한 이유는 list변수 자체는 불변성이지만 변수가 참조하는 객체가 불변성을 가지는 것은 아니기 때문에, 선언할때  mutableListOf()..등 -> mutable(가변)이냐 listOf()..등 -> immutable(불변) 으로 생성해서 사용한다. (요소를 추가하고 제거하는 것은 list 변수 자체를 변경하는게 아님)   

 

다시 생각해보니 헷갈렸던 부분이 해소가됨

val list = mutableListOf(1,2,3)
list = mutableListOf(2,3,4) //당연하게도 val 로 선언한 list는 값을 재할당 할 수 없음
var varList = mutableListOf(1,2,3)
varList = mutableListOf(4,5,6) //재할당 가능

그렇다고 varList 를 listOf() immutable로 만들수는 없음 

 

 

 

 

+ Recent posts