일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 카드 내역 공유 앱
- 안드로이드
- 올인원타이머
- RX
- Quickly
- 뷰 상태 저장
- 작성
- RxJava
- List
- onViewCreated
- nvidia-docker
- 대학톡
- andorid
- recyclerview
- 타이머앱
- 카드내역 공유
- android clean architecture
- fragment
- 특가게시판
- 안드로이드 클린 아키텍쳐
- Koin
- compileKotlin FAILED
- kotlin
- moveToState
- todofication
- 특가알람
- Android
- java.lang.OutOfMemoryError: Java heap space
- 뷰 상태복구
- 특가촌
- Today
- Total
목록kotlin (7)
seoft
concatMapEager는 기존 concatMap 역할에서 스트림이 병렬로 처리된다는 특징을 가지고 있다. 그렇기 때문에 동시성과 함께 순서가 보장되어야 될 경우 concatMapEager 연산자를 사용하면 된다. 여러 api host로부터 값을 받오는 즉시 처리하되, 순서를 보장해야되는게 요구사항이라고 가정을 해본다. request함수를 사전 정의 하였는데 각 url에 따른 randome 시간 후에 response가 오는 상황으로 가정하고 해당 함수를 거쳐 Single로 반환된다. url string 리스트를 개별 flowable로 반환하여 concatMapEager내에서 하나씩 태우게 되고 반환된 Single 결과값을 flowable으로 변환에 스트림을 진행한다. string리스트의 순서와 동일하게..
zip 연산자를 통해 Observable을 동시에 실행하고 결과값을 받아 처리할 수 있다. 이때 FunctionN 은 ~9 까지 지원하는데 만약 Observable이 컴파일단에 정해지지 않고 동적으로 할당되거나 갯수가 10개가 넘는 경우에는 위와 같은 방법으로 어려울 수 있고 다음과 같은 방법으로 사용할 수 있다. Observable(single) 자체로 구성된 리스트를 zip에 넣고, zip 내에서는 array로 받아 사용할 수 있다. 만약 Any타입으로 zip 내에서 사용되기 때문에 타입변환 등 타입에 대해 민감 할 경우 future를 사용하는 방법도 있다. 기존의 single 리스트를 toFuture시키면서 일괄 진행시키고, 합쳐야 될 상황에 get으로 비동기가 완료되고 반환된 값을 받아 처리할 수..
파일 다운로드 관련해서 DownloadManager를 사용할 수 도 있지만, 큰용량이 아닌 url로부터 단순 이미지를 받기 위해서는 상황에 따라 코드가 복잡하고 과할 수 도 있다. DownloadManager에 비해 Glide를 통한 방법으로 비교적 짧고 간단한 코드로 구현이 가능하다. Glide에 url을 넣어 진행시키고 완료되면 onResourceReady가 비동기로 호출되고 그 콜백 내에서 File을 생성, 변환 해주는 방법이다. 필자는 Rx에 병렬적으로 진행하기위해 Single타입으로 반환했으며 cache경로에 랜덤한 파일명으로 저장시켜 사용하였다. 상황에 맞게 알맞게 고쳐 사용하면 될 것같다. 위의 함수를 사용한 부분인데 single타입의 리스트를 zip에넣어 활용하였다 이미지 외의 다운로드, ..
[요약] 코틀린에서 리플랙션을 사용하면 KClass를 가지고 있다가 필요시 인스턴스화 할 수 있다. 다음과 같은 상황이 있다고 가정해보자(억지지만) 먼저 서버에서도 받아오고 다른대서도 공통으로 사용되는 데이터 클래스가 존재한다. 또한 특정 페이지에 공통으로 사용되는 프로퍼티들이 있어 타입별 enum으로 정의하여 사용한다. 공통으로 사용하는 페이지가 있고, 진입시 타입에 따라 알맞은 인스터스를 생성해 사용해야 한다. enum을 통해 분기를 타지 않고 사용할 수 있지만, 어쩔수 없이 인스터스 생성은 다음과같이 타입별로 if분기를 타서 정의한다. 지금은 분기가 크게 많지 않지만 타입이 3개가아니라 10개, 100개 if분기가 늘어날것이다 . 이런 분기를 없애기위해 enum으로 다른 분기는 제외시켰으나 인스턴스..
list의 아이템 중 set의 아이템이 1개이상 포함되는지 여부 체크(kotlin)
기존에 if 로 널처리 혹은 특정 처리 후 코드를 이어갈라면 코드가 길어지고, 뎁스가 깊어지는 경우 도 있다. 다음 처럼 사용하면 더 간결하게, 직관적으로 사용할 수 있다.
동시성 환경에서 리스트를 갱신할 때 immutable한 list를 새로 생성하여 list자체에 대입시킨다. 20.02.18 추가 밑에처럼 사용하다가 더 쉽고 직관적인 방법을 찾아 공유한다. 기존에 위와같은 방법을 사용했었는데, 밑에처럼 비교적 간단하게 사용 가능하다. kotlin list 생성 방법 중 varang을 받는 inline함수가 있는다. 이 함수에 리스트 인자를 넣으면 되는데, list를 array로 바꾸고 array앞에 spread연산자(*)를 사용하면 개별 변수로 되어 varang에 대입할 수 있다.