Kotlin (22) 썸네일형 리스트형 [Kotlin] inline, noinline 🍀 Inline Function Kotlin에서 고차함수를 사용하면 추가적인 메모리 할당 및 함수 호출로 Runtime Overhead가 발생한다. inline function은 내부적으로 함수 내용을 호출되는 위치에 복사하며, Runtime overhead를 줄여준다. inline을 사용하면 무의미한 객체 생성을 예방할 수 있다. 예시로 든 함수를 java로 decompile해보면 어떻게 될까 ? fun main(args: Array) { val result = squareFunction(a = 3, function = { print("sson peace") }) println(result) } fun squareFunction(a: Int, function: () -> Unit): Int { func.. [Kotlin] High Order Function(고차함수) ✅High Order Function은 함수를 변수로 넘겨주거나 ,이를 반환하는 함수이다. 우선 Kotlin공식 문서의 예제를 한번 살펴보자. High-order functions and lambdas | Kotlin kotlinlang.org fun Collection.fold( initial: R, combine: (acc: R, nextElement: T) -> R ): R { var accumulator: R = initial for (element: T in this) { accumulator = combine(accumulator, element) } return accumulator } combine parameter는 (R, T) -> R 이라는 함수로 정의되어 있다. 즉, R과 T를 인자.. [Android] Navigation Backstack Controll and Pass Data Navigation을 이용하면 어떻게 fragment에서 결과값을 받아올 수 있을까? NavBackStackEntry와 LiveData를 활용하면 fragment의 결과값 전달을 할 수 있다. NavBackStackEntry - 말 그대로 NavController의 BackStack으로 집입시켜주는 메서드이다. - 이를 통해서 SavedStateHandle에 접근할 수 있다. - SavedStateHandle은 viewModel의 상태를 저장해놓은 Saved State를 다루기 위한 객체이다. 그렇다면 navigation에는 backstack을 관리하기 위한 옵션들에 대해서 간단히 짚고 넘어가자 popUpTo는 주어진 도착점이 나올때까지 백스택을 팝업한다. popUpToInclusive 속성이 1) fa.. [Android] Multi Select Gallery만들기 with Paging 앱에서 사진을 불러와야 할 때 어떻게 하셨나요?? 보통 Intent를 사용하여 핸드폰의 갤러리를 열고 사진을 가져왔을 것입니다. 이 방식으로 했을 때 제 스마트폰은 삼성갤러리로 접근이 되어 이미지 다중 선택이 되지 않습니다. (아니면 제가 방법을 모르는걸지도,,?) 그래서 저는 MediaStore에서 이미지 파일을 모두 불러온 뒤 Recyclerview에 로드해주었습니다. 많은 스마트폰에는 보통 수천개에서 수만개의 사진이 저장되어 있기 때문에 한번에 뷰에 로딩하는 것이 아니라 Paging을 이용하여 스크롤할 때마다 원하는 청크만큼 데이터를 요청하여 가져옵니다. 이렇게 하면 갤러리앱을 열지 않고 성능 저하 없이 직접 커스텀해서 사용할 수 있습니다! 1️⃣ Dependency추가 - version은 3.0... [Android] Paging3 Library in Jetpack Paging3란? Jetpack의 라이브러리 중 하나로 다양한 데이터 소스로 부터 데이터를 나누어 효과적으로 로딩해준다. 네트워크 또는 로컬 데이터베이스에서 데이터 페이지를 쉽게 로드할 수 있다. Paging3의 강력한 장점은 Coroutines 뿐만 LiveData, RxJava를 최고수준으로 지원한다. Paging3의 주요 클래스에 대해서 알아보자! 1️⃣ Paging Source - 네트워크 또는 데이터베이스에서 페이징된 데이터 로드를 담당하는 추상 클래스이다. - 이 클래스를 구현하려면 페이지 키 타입을 정의해야한다. - PagingSource에서 로드된 데이터는 PagingData 인스턴스로 관리된다. - 데이터를 검색하는 방법을 정의한다. PagingDatasource에는 크게 1) Posit.. [Android] RxJava로 Room구현하기 2021.03.25 - [Android] - [Android] 검색어 저장 기능 구현해보기(dagger-hilt, room, coroutine, mvvm) 지난번에는 naver 영화 검색을 구현하고 검색 키워드 자동저장 기능을 Coroutine + Room으로 구현했다. 이번 포스팅에서는 이전에 놓친 부분들을 리팩토링하고 RxJava로 구현하고자 한다. 1) SearchEntity.kt - entity부분은 이전 포스팅에서 변경된 부분은 없다. @Entity(tableName = "search_history") data class SearchEntity( @PrimaryKey(autoGenerate = true) val id: Int? = null, @ColumnInfo(name = "search_que.. [Android] 검색어 저장 기능 구현해보기(dagger-hilt, room, coroutine, mvvm) 지난 포스팅에서 RxJava로 naver api를 이용하여 영화 검색 기능을 만들어 보았다. 2021.03.22 - [Android] - [Android] Naver검색 api - RxJava, Retrofit, MVVM, Hilt 이번에는 영화를 검색했을 때 최근 검색어 자동저장을 Room을 이용해 만들어보았다. 이번에도 RxJava로 구현을 하려고 했으나 먼저 Coroutine으로 작성하는 법을 포스팅하고 RxJava를 더 공부한 다음 리팩토링 하고자 한다. 1) build.gradle(module: app) dependency 추가 - 다음과 같이 Room 의존성을 추가해준다. ext { retrofit_version = "2.9.0" lifecycle_version = "2.2.0" room_ve.. [Android] Naver검색 api - RxJava, Retrofit, MVVM, Hilt ReactiveX는 비동기 프로그래밍 그리고 Observable 시퀀스를 이용해 이벤트를 처리하기 위한 라이브러리이다. 이 라이브러리는 Observer Pattern을 사용한다. 필요로 하는 데이터들을 요청하여 받아오는 방식이 아닌, 데이터가 변경되면 요청을 받겠다는 구독신청을 해놓고 변경사항이 발생하면 전달 받는 방식이다. Observable은 onNext, onError, onComplete 세가지 알림을 구독자에게 전달한다. 1) onNext : Observable이 데이터 발행을 알림 2) onError : error가 발생했을을 알리고 Observable을 종료 3) onComplete : 모든 이벤트가 발행을 완료했음을 알림 RxJava2부터는 Observable과 Single 클래스 이외에도.. 이전 1 2 3 다음