코틀린(7)
-
[Coroutine Flow] stateFlow 로 ui 업데이트시 주의 사항
1. stateFlow 생성 class LatestNewsViewModel( private val newsRepository: NewsRepository ) : ViewModel() { // Backing property to avoid state updates from other classes private val _uiState = MutableStateFlow(LatestNewsUiState.Success(emptyList())) // The UI collects from this StateFlow to get its state updates val uiState: StateFlow = _uiState init { viewModelScope.launch { newsRepository.favorite..
2022.01.27 -
[Android Kotlin Coroutine] 코루틴 기본정리 (CoroutineContext, Coroutine Builder, CoroutineScope, Coroutine Job, CoroutineDispatcher)
Coroutine 비동기적으로 실행되는 코드를 간소화하기 위해 Android에서 사용할 수 있는 동시 실행 설계 패턴 CoroutineContext interface CoroutineContext CoroutineContext는 다양한 요소의 집합으로 코루틴의 동작을 정의합니다. Job: 코루틴의 수명 주기 제어 CoroutineDispatcher: 적절한 스레드에 작업 전달 CoroutineName: 디버깅에 유용한 코루틴 이름 CoroutineExceptionHandler: 포착되지 않은 예외 처리 Coroutine Builder (launch, async)는 CoroutineContext 값을 optional로 지정할 수 있고 이를 통해 dispatcher 를 지정할 수 있다. fun main() ..
2022.01.18 -
[Kotlin/코틀린] Scope Functions / 기본 제공 함수 정리 let(), with(), apply(), run(), also()
1. let() 함수 - let() 함수는 블록에 자기 자신을 인수로 전달하고 수행된 결과를 반환 - 인수로 전달한 객체는 it으로 참조 - let()함수는 ?. (안전한 호출 연산자) 와 함께 사용하면 null 값이 아닐 때만 실행하는 코드로 사용할 수 있다 - 사용 : null 이 아닌 경우에 코드를 실행해야 하는 경우 // fun T.let(block: (T) -> R) : R val result = str?.let{ Integer.parseInt(it) } 2. with() 함수 - with() 함수는 인수로 객체를 받고 블록에 리시버 객체로 전달하며 수행된 결과를 반환 - 리시버 객체로 전달된 객체는 this로 접근 (this는 생략 가능) - 안전한 호출이 불가능 하므로 인수가 null이 아닌..
2020.06.11 -
[kotlin/코틀린] Collections(컬렉션) 함수 중 sortedWith과 sortWith 비교
프로그래머스 코딩 테스트 연습문제 중 "가장 큰 수" 문제를 풀다가 sortedWith과 sortWith의 차이점이 궁금해져서 쓰게 된 포스팅 먼저 나의 경우에는 IntArray를 String 타입으로 된 리스트로 변경한 다음 첫 번째 요소 + 두 번째 요소와 두 번째 요소 + 첫 번째 요소를 비교하여 내림차순으로 정렬하는 기능이 필요했다 fun solution(numbers: IntArray): String { val strings = arrayListOf() numbers.forEach { strings.add(it.toString()) } /** * 첫번째 + 두번째 와 두번째 + 첫번째 값을 비교하여 큰순서대로 정렬 * 기본 오름차순으로 나오기 때문에 매개변수 순서를 변경하여 내림차순으로 나올수 ..
2020.06.02 -
[Kotlin/코틀린] Pair 와 Triple
Pair와 Triple 이란? 두 개 혹은 세 개의 각각 다르거나 같은 데이터 값을 가지는 데이터 클래스를 대신하여 사용할 수 있도록 코틀린에서 제공해주는 미리 정의된 데이터 클래스라고 할 수 있다 이름에서도 알 수 있듯이 Pair는 두 개의 데이터 값을 가지고 있으며 Triple은 세 개의 데이터 값을 가지고 있다 1. Pair data class Pair : Serializable Pair(first: A, second: B) 사용 방법 first, second 프로퍼티 혹은 componentN 메서드를 사용하여 접근 가능하다 (매우 간단) val (a, b) = Pair(1, "two") println(a) // 1 println(b) // two //or val myPair = Pair("one"..
2020.06.01 -
[Koin/코인] Koin 시작하기
- Kotlin 개발자를위한 실용적인 경량 DI(dependency injection: 의존성 주입) 프레임 워크 - 프록시, 코드 생성, 리플렉션이없는 기능적 해상도 만 사용하여 순수한 Kotlin으로 작성된 DI 라이브러리 "Koin is a DSL, a light container and a pragmatic API" (여기서 DSL이란 ? Domain-Specific Languages : 도메인 특화 언어 즉, 특정 분야에 최적화된 프로그래밍 언어) * Dagger2 보다 진입장벽이 낮고 kotlin에 특화되어있어 Kotlin 사용자가 사용하기 더욱더 편리하다 1. build.gradle(:project) buildscript { ext{ koin_version = '1.0.2' } //Add J..
2020.04.24