Kotlin 문법
mutable / immutable의 가변성 제약
알고리즘을 풀면서 생각없이 mutableList, map 등을 만들면서 풀었는데 인텔리제이에서 노란전구(ReSharper)가 떠있어서 갑자기 궁금해져서 찾아보게 되었다.
- 가급적 val, immutable-collections을 사용
- var과 val의 커스텀 getter를 사용하면 변경 가능한 것과 같은 val 프로퍼티를 표현 할 수 있다.
- Collection을 Mutable Collection으로 Down-casting하는 것은 위험하다.
- 필요한 경우엔 toMutableList()와 같은 함수를 사용하라.
- 변경 가능한 Collection은 val + Mutable Collection / var + Immutable Collection이 있다.
- var + Mutable Collection은 가급적 사용 금지❌
- 많은 속성을 지닌 불변 클래스를 계속 생성하는 것이 힘들다면 data class의 copy()
++
- 변경되는 값이 많은 코드는 디버깅하거나 이해하기 어렵다!!
- 변경되는 포인트를 이해하고 변경되는 값이 많은 만큼 값이 변경 되었을 때 그 값을 추적하는 것이 어렵기 때문이다.
- 멀티 쓰레드 환경에서 적절한 동기화가 필요하다.
- Muatble 값들은 멀티쓰레드 환경에서 잠재적인 충돌 가능성을 가지고 있다.
- Mutability는 테스트를 어렵게 한다.
- 가능한 모든 상태에 대해 테스트를 해야할 필요가 있기 때문에 변경 가능한 상태가 많을수록 테스트 해야하는 상태도 많아진다.
>>삶은 mutable을, 코드는 immutable을 지향하고 있습니다<<
참고한 블로그에 적혀있는 문구가 자꾸 생각난다.
const val ?
- ** 컴파일 시 할당된다. **
- string, Int 등 primitive type만 가능하다.
- 참조타입 X
copyOf, toArray, contentToString
- 배열을 복사할 때 사용된다.
더보기
fun main() {
//arrayOf 변수 선언 실시
var arr_one = arrayOf(1,2,3,4,5)
println("arrayOf 원본 : "+arr_one.contentToString()) //arrayOf 원본 : [1, 2, 3, 4, 5]
//arrayOf 전체 데이터 복사 실시
var arr_full_copy = arr_one.copyOf()
println("arrayOf 전체 복사 : "+arr_full_copy.contentToString()) //arrayOf 전체 복사 : [1, 2, 3, 4, 5]
//arrayOf 부분 데이터 복사 실시
var arr_range_copy = arr_one.copyOfRange(0, 3)
println("arrayOf 부분 복사 : "+arr_range_copy.contentToString()) //arrayOf 부분 복사 : [1, 2, 3]
//ArrayList 변수 선언 실시
var list_one = ArrayList<String>()
list_one.add("하나")
list_one.add("둘")
println("ArrayList 원본 : "+list_one.toString()) //ArrayList 원본 : [하나, 둘]
//ArrayList 전체 데이터 복사 실시
var list_full_copy = list_one.toArray()
println("ArrayList 전체 복사 : "+list_full_copy.contentToString()) //ArrayList 전체 복사 : [하나, 둘]
}
출력
출력
arrayOf 원본 : [1, 2, 3, 4, 5]
arrayOf 전체 복사 : [1, 2, 3, 4, 5]
arrayOf 부분 복사 : [1, 2, 3]
ArrayList 원본 : [하나, 둘]
ArrayList 전체 복사 : [하나, 둘]
추가적으로 Kotlin In Action
flatMap flatten
asSequence()
generateSequence()
에 대해 배웠다.
따로 정리할예정.
Android
AppCompat ?
간단히 설명하자면 다양한 api 버전을 지원해준다.
Activity 생명주기 (공식문서 내정리)
'Kotlin > TIL' 카테고리의 다른 글
TIL (03.26) (0) | 2024.03.26 |
---|---|
TIL (03.25) (1) | 2024.03.25 |
TIL (03.21) (0) | 2024.03.21 |
TIL (03.20) (0) | 2024.03.20 |
TIL (03.19) (0) | 2024.03.19 |