일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 스레드 #코루틴
- TowmonUSB 연결오류
- mutable
- apk이름변경
- compse state
- json 저장
- 데이터바인딩
- 라이브데이터 postValue
- var 와 val
- Room
- 일회용 플라스틱
- 1회용컵
- 1회용 플라스틱컵
- TwomonUSB
- 생분해성 플라스틱
- Room 데이터베이스 업데이트
- 셀룰로오스-g-폴리락타이드 공중합체
- 코틀린 트리거 버튼
- 코틀린 이미지저장 #파일저장
- compse collectAsState
- #큐구조 #큐다운로드
- livedata
- PLA
- 안드로이드 스튜디오 애뮬레이터
- withContext
- 토글 험수
- Today
- Total
EnjoyLife
var 와 MutableList 사용이 헷갈릴 경우 본문
둘다 val 타입이지만 각각 mutableList,list 타입인 변수
val displayList1: MutableList<String> = mutableListOf("Apple", "Banana", "Cherry", "Date")
val displayList2: List<String> = listOf("Apple", "Banana", "Cherry", "Date")
"MutableList 형을 쓰면 무조건 쓰기가 가능하다는 것이니, 무조건 var 를 써야이 무슨 소리야?" 생각할 수있다.
나도 그랬으니까.
"헷갈리니 그냥 var 로 무조건 쓸래" 할수 있다. 이건 유지보수할 경우, 아주 치명적인 후회로 남을수 있다.
val displayList1: MutableList<String>
ㄴ 리스트의 항목 추가,수정은 가능하지만, 새로운 리스트로 재할당이 불가능하다는 뜻이다.
즉, displayList1 의 내부가 이렇게고 치자
ㄴ메모리 주소: 0x100
ㄴ값 : "Apple", "Banana", "Cherry", "Date"
1. "Apple", "Banana", "Cherry", "Date" 의 항목을 추가, 수정하는 것은 가능하다.
왜? MutableList 타입이니까.
2. 새로운 리스트로 재할당 할수 없다. ( 메모리 주소를 (0x100) 에서 (0x300) 으로 변경)
mutableListOf("Fig", "Grapes", "Honeydew") 이렇게 말이다. 왜? val 이니까.
이해가 안가면 더 쉽게
당신집에 친구들이 왔다가고, 회사동료들이 왔다가도 괜찮다. 그러나 당신집을 재건축하는건 불가능하다.
[심화과정]
각각 var,val 이지만 둘다 list(읽기) 타입인 변수
var displayList2: List<String> = listOf("Apple", "Banana", "Cherry", "Date")
val displayList3: List = listOf("Apple", "Banana", "Cherry", "Date")
1. 항목을 추가,수정 은 둘다 불가능하다 왜? List 타입이니까.
2. 새로운 리스트로 재할당(메모리 주소를 변경)이 가능한것 어느 것일까? displayList2 이다. 왜? var 이니까
추가로, displayList3 은 메모리 변경이 불가능 하다. 왜? val 이니까.
즉 새로운 리스트로 재할당이 불가능하다는 것이다.
displayList2 = listOf("Fig", "Grapes") // 컴파일 정상
displayList3 = listOf("Fig", "Grapes") // 컴파일 오류 (변경 불가)
동료가 결혼식에 안갈정도로 왜 그렇게 심각한 문제인가?
var 와 mutable 타입을 함께 사용할 경우 위험하다.
새로운 리스트로 재할당될 가능성이 있는 변수에만 선언해야 되는데,
이것을 남발해 버리면 다른 누군가가 아니 당신이 될수있고, 절대 새로운 리스트로 재할당하면 안되는 변수에 재할당을
해버리면 앱이 됐든,웹이 됐든 원하지 않는 데이터가 나올수있고, 해당 프로그램에 치명적인 오류가 발생한다.
마치 자바에서 전역변수 선언해 놓고, 여저 저기 데이터 재할당해서 난리나는 경우와 비슷하다.
당신이 퇴근했는데, 다른 사람이 그자리에 빌라로 지은것이다. 또 그 사람이 퇴근하고 집에 오니 다른사람이
그 자리에 카페를 지었다. 집 명의는 벌써 2번 변경됐다. var 로 당신이 집문서를 인터넷에 올린 탓이다.
이건 컴파일해도 정상적으로 빌드되기에 원인을 찾을 수 없다. 코드 전체를 분석하지 전까지....
'안드로이드 개발 > 개발팁' 카테고리의 다른 글
Room 프로세스 (0) | 2024.12.10 |
---|---|
Queue 구조로 다운로드 하기 (2) | 2024.11.05 |
계속 잊어버리는 onActivityResult 사용법 (0) | 2024.07.10 |
헷갈리는 토글 코드 (0) | 2024.06.30 |
퍼센트인코딩 적용 (0) | 2024.06.21 |