Kotlin/TIL

TIL (03.22)

내손은개발 🐾 2024. 3. 22. 21:24

Kotlin 문법


 

mutable / immutable의 가변성 제약

알고리즘을 풀면서 생각없이 mutableList, map 등을 만들면서 풀었는데 인텔리제이에서 노란전구(ReSharper)가 떠있어서 갑자기 궁금해져서 찾아보게 되었다.

  1. 가급적 val, immutable-collections을 사용
  2. var과 val의 커스텀 getter를 사용하면 변경 가능한 것과 같은 val 프로퍼티를 표현 할 수 있다.
  3. Collection을 Mutable Collection으로 Down-casting하는 것은 위험하다.
  4. 필요한 경우엔 toMutableList()와 같은 함수를 사용하라.
  5. 변경 가능한 Collection은 val + Mutable Collection / var + Immutable Collection이 있다.
  6. var + Mutable Collection은 가급적 사용 금지❌
  7. 많은 속성을 지닌 불변 클래스를 계속 생성하는 것이 힘들다면 data class의 copy()

++

  1. 변경되는 값이 많은 코드는 디버깅하거나 이해하기 어렵다!!
  2. 변경되는 포인트를 이해하고 변경되는 값이 많은 만큼 값이 변경 되었을 때 그 값을 추적하는 것이 어렵기 때문이다.
  3. 멀티 쓰레드 환경에서 적절한 동기화가 필요하다.
  4. Muatble 값들은 멀티쓰레드 환경에서 잠재적인 충돌 가능성을 가지고 있다.
  5. Mutability는 테스트를 어렵게 한다.
  6. 가능한 모든 상태에 대해 테스트를 해야할 필요가 있기 때문에 변경 가능한 상태가 많을수록 테스트 해야하는 상태도 많아진다.

>>삶은 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 생명주기 (공식문서 내정리)

 

Activity 생명주기 | Notion

Activity는 실행부터 종료까지 많은 상태 변활르 거치며 상태가 변할 때마다 생명주기 함수가 자동으로 호출된다.

ubiquitous-triangle-3a5.notion.site

 

'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