네트워크에서 데이터를 읽어오든지, DB에 저장된걸 가져오든지 데이터가 매우 많아지면 한번에 읽어올 때 문제가 생기게된다. 그렇다고 화면에 보이는 만큼만 매번 읽어오게되면, 스크롤등을 이용하여 데이터를 살펴볼 때, 렉이 생길 것이다. 이를 해결하기위해 사용자 입력에 충분히 반응할만큼 여유있는 데이터를 읽어오고, 사용자가 추가적으로 데이터를 살펴볼 때, 필요한 만큼씩 미리 읽어오는 기법이 오래전부터 사용되어 왔다. 이걸 paging 기법이라 하는데, 꼭…
Kotlin : Sealed class vs Enum
다수의 코드에서 Enum 역할을 하는 곳에 Sealed class를 사용하는걸 보게 됐고, 한 번 정리하고 넘어갈 필요성을 느꼈다. 간단하게 얘기하자면, Sealed class는 enum class처럼 동일하게 사용가능하면서 보다 유연하고 확장성을 가진다. Enum class 먼저 간단히 Enum class를 살펴보자. enum은 같은 카테고리의 상수들을 나열한 것이다. Kotlin 공식사이트의 예제를 가져오면 다음과 같이 사용한다. 기존 언어들에서도 사용하는 가장 간단한 형태이다….
Kotlin: inline 정리
Inline 코틀린에서 higher-order function에 사용되는 lambda 표현식은 새로운 함수객체를 생성하게 된다. 일상적으로 사용되는 lambda 표현식이 매우 간단한 형태임을 생각하면, 매번 사용시 객체를 생성하고 메모리를 할당하는게 상당한 오버헤드임을 알 수 있다. 이러한 오버헤드를 없애기 위해, 함수객체를 생성하지 않고 함수안의 코드를 직접 넣어주도록 하는 키워드가 ‘inline’이다. 간단한 코드를 가지고 확인해보자. lambda 함수를 인자로 갖는 간단한 higher-order function을…
Android: “No type arguments expected for …”
Android 개발중에 “No type arguments expected for …” 란 에러메세지를 만난다면 아마도 다른 패키지를 import하고 있을 것이다. 예를들어 나같은 경우, RecyclerView에 ListAdapter를 사용하는데 위 에러가 떴고, 조금 헤맨후에 다음이 잘못 됐음을 알았다. RecyclerView의 경우, gerneric 인자 개수가 다르게 사용된다. 올바른 import는 다음과 같다. 이런 간단한 기록에 블로그 포스팅을 해야하나 살짝 고민했는데, 삽질의 기록은 여기 남기는게…
DB relationship with Room
앞서 DB relationship 에 대해 SQLite로 알아보았다. one to one, one to many, many to many relationship에 대해선 이전글을 참고하고, 동일한 내용을 Room에서 구현해보자. Room 적용시 꼭 직접 테스트 하길 바란다. 처음 사용해보면서 SQL을 사용하는 것보다 오히려 혼란스러운 점도 많았다. 예를들어, api level 24 인 android 7.0 에뮬레이터에선 테이블 생성이 안된건지 그런 테이블이 없다며 오류를…