본문 바로가기

Android/Kotlin20

[Android/Kotlin] Kotlin 컬렉션 확장 함수 정리: associateBy 사용법 Kotlin에서는 리스트나 배열과 같은 컬렉션을 다룰 때 유용한 확장 함수(Extension Function)들이 많이 제공됩니다. 그 중에서도 associateBy는 컬렉션을 Map으로 변환할 때 자주 사용되는 함수입니다.이 글에서는 associateBy의 기본 개념부터 실전 예제까지 정리해보았습니다.associateBy란?associateBy는 컬렉션(List, Array 등)의 요소를 기준값으로 묶어 Map으로 변환해주는 확장 함수입니다.즉, 리스트의 각 요소에서 특정 값을 꺼내 Key로 삼고, 해당 요소를 Value로 하여 Map을 만드는 방식입니다.기본 사용법val resultMap = list.associateBy { it.someProperty } someProperty는 각 요소에서 추출한.. 2025. 3. 27.
[Android/Kotlin] lateinit 이해하기: nullable과의 차이와 지연 초기화 이해하기 개발을 하다 보면, 변수를 선언할 때 초기값을 바로 할당하지 못하는 경우가 많습니다. lateinit 키워드를 자주 사용했지만, 왜 굳이 nullable 대신 lateinit을 써야 하는지 깊이 고민해보지 않았습니다.이번에 공부하면서 lateinit의 필요성과 nullable과의 차이점을 명확히 이해하게 되었고,그 내용을 정리해보았습니다. 1. lateinit 키워드의 의미와 사용 이유lateinit은 Kotlin에서 변수를 나중에 초기화할 것임을 명시하는 키워드입니다.이를 통해 초기화 시점을 유연하게 조정할 수 있습니다.Kotlin은 Null Safety를 보장하기 위해 변수를 선언할 때 반드시 초기화를 요구하지만,초기값을 바로 설정할 수 없는 경우에는 lateinit 키워드를 사용할 수 있습니다.예시.. 2025. 2. 25.
[Android/Kotlin] mutableMapOf vs hashMapOf 차이점 및 성능 비교 Kotlin에서 Map을 사용할 때 mutableMapOf와 hashMapOf 중 어떤 것을 선택하는 것이 더 좋을까요? 이번 글에서는 두 가지의 차이점과 성능 비교를 통해 언제 어떤 것을 선택하면 좋은지를 알아보겠습니다.1. mutableMapOf vs hashMapOf 차이점mutableMapOfval sitesAndPasswords = mutableMapOf()내부적으로 LinkedHashMap을 사용합니다.입력 순서를 유지하는 특징이 있습니다.성능은 일반적인 HashMap과 동일 (O(1) 조회, 삽입 가능).hashMapOfval sitesAndPasswords = hashMapOf()명시적으로 HashMap을 사용합니다.입력 순서를 유지하지 않음 (순서가 중요하지 않다면 더 적합).성능은 mu.. 2025. 2. 6.
[Android/Kotlin] fold 사용법과 예제 Kotlin의 fold는 컬렉션을 순회하면서 초기값을 설정하고, 이전 연산의 결과를 누적하면서 값을 계산하는 데 사용됩니다. 특히, 누적된 값을 유지하면서 새로운 값을 추가해야 하는 경우 유용합니다.이번 글에서는 fold를 활용하여 ATM 대기 시간 최소화 문제를 해결하는 예제를 통해 fold의 동작 원리를 알아보겠습니다.fold의 기본 구조initial: 초기값 (연산을 시작할 때 사용할 값)operation: 리스트의 각 요소를 순회하며 누적값(acc)과 현재 요소(T)를 사용해 연산을 수행하는 람다 함수결과값(R)이 누적되면서 최종 결과를 반환기본 예제: 리스트의 합 구하기val numbers = listOf(1, 2, 3, 4, 5)val sum = numbers.fold(0) { acc, num.. 2025. 2. 5.
[Android/Kotlin] 코틀린의 mutableMapOf()는 왜 LinkedHashMap을 사용할까? 코틀린에서 mutableMapOf()를 사용하면 내부적으로 LinkedHashMap이 생성됩니다.처음에는 mutableMapOf()를 단순히 사용했지만, 왜 기본 구현체가 LinkedHashMap일까? 라는 의문이 들었습니다.이 글에서는 그 이유를 고민해보고, HashMap, LinkedHashMap, TreeMap의 차이를 비교한 내용을 정리해보겠습니다.1. mutableMapOf()는 LinkedHashMap을 사용한다우선, mutableMapOf()가 내부적으로 어떤 자료구조를 사용하는지 확인해보겠습니다. 즉, 코틀린의 mutableMapOf()는 기본적으로 LinkedHashMap을 사용한다는 것을 확인할 수 있었습니다.그렇다면 왜 LinkedHashMap을 기본으로 사용할까?2. LinkedHa.. 2025. 2. 4.
[Android/Kotlin] 코틀린 컬렉션 함수: any와 all 코틀린의 컬렉션 함수 중 any와 all은 컬렉션 내부의 요소를 조건에 따라 검사할 때 사용하는 매우 유용한 함수입니다.이 두 함수는 조건을 간단하고 가독성 좋게 표현할 수 있어 자주 활용됩니다.\1. any 함수정의컬렉션의 요소 중 하나라도 조건을 만족하면 true를 반환.조건을 만족하는 요소를 찾으면 즉시 검사를 종료합니다.구문collection.any { 조건식 }반환값Boolean: 조건을 만족하는 요소가 하나라도 있으면 true, 그렇지 않으면 false.예제 1: 숫자 리스트에서 짝수가 하나라도 있는지 확인val numbers = listOf(1, 3, 5, 6, 7)val hasEven = numbers.any { it % 2 == 0 }println(hasEven) // 출력: true 리.. 2025. 1. 21.
[Android/Kotlin] removeAt: 요소 제거와 반환 동작 이해 코틀린의 MutableList는 동적으로 크기가 조정되는 리스트로, 다양한 메서드를 제공하여 데이터를 관리할 수 있습니다.그중에서도 removeAt 메서드는 특정 인덱스의 요소를 제거하면서 해당 요소를 반환하는 기능을 제공합니다.이번 글에서는 removeAt의 동작 원리와 사용 예제를 살펴보겠습니다.1. removeAt 메서드란?removeAt(index)는 리스트의 특정 인덱스에 있는 요소를 제거하고, 그 제거된 요소를 반환합니다. 이 메서드는 다음 두 가지 작업을 수행합니다:리스트에서 요소 제거:지정된 인덱스의 요소를 삭제합니다.삭제 후, 리스트의 크기가 1 감소합니다.제거된 요소 반환:삭제된 요소 자체를 반환하여, 호출한 코드에서 해당 값을 사용할 수 있습니다.2. removeAt의 동작 과정동작 .. 2025. 1. 17.
[Android/Kotlin] sortWith vs sortedWith: 차이와 사용법 코틀린에서는 리스트를 정렬할 때 sortWith와 sortedWith를 자주 사용합니다. 둘은 비슷하게 보이지만, 실제 사용 목적과 동작 방식에서 중요한 차이가 있습니다. 이 글에서는 두 함수의 차이점과 사용 방법에 대해서 정리 해 두겠습니다.1. sortWith원본 리스트를 변경하는 함수입니다.MutableList에서만 사용할 수 있습니다.반환값이 없으며, 리스트 자체를 정렬합니다.사용 예제val mutableList = mutableListOf(3, 1, 4, 1, 5, 9)mutableList.sortWith(compareBy { it }) // 오름차순 정렬println(mutableList) // 출력: [1, 1, 3, 4, 5, 9] compareBy는 정렬 기준을 지정하는 람다를 받아서 처.. 2025. 1. 2.
[Android/Kotlin] Kotlin의 ?. 연산자와 ?: 연산자: 실제 예시로 이해하기 개발 중 맵의 출발지/도착지를 재설정하는 기능을 구현하면서 Kotlin의 ?. 연산자와 ?: 연산자를 효율적으로 사용할 수 있는 상황이 발생했습니다.이 글에서는 실제 예시와 함께 두 연산자의 쓰임새를 정리하고, 어떻게 이를 활용해 코드를 간결하고 직관적으로 만들었는지 정리 해 두고자 합니다. 문제 상황: 맵의 마커 업데이트맵에서 사용자가 새로운 출발지나 도착지를 선택하면, 맵에 표시된 마커(레이블)를 업데이트해야 합니다. 이때 고려해야 할 점은 다음과 같습니다:마커가 이미 존재하는 경우기존 마커의 위치를 업데이트해야 합니다.마커가 존재하지 않는 경우새로 마커를 추가해야 합니다.해결 방법: ?. 연산자와 ?: 연산자의 활용이 문제를 해결하기 위해 아래와 같은 Kotlin 문법을 활용했습니다.destinat.. 2024. 11. 29.
반응형