작년에 작성했던 글인데, 제대로 이해하지 못하고 썻던 글이라, 다시봐도 무슨말인지 모르겠더라. 이제 좀 감이와서 다시 정리해 업데이트 한다. Kotlin만의 특징중 하나로 scope functions 라고 불리는게 있다. ‘let’, ‘run’, ‘with’, ‘apply’, ‘also’ 의 5가지가 그것이다. 객체 생성시, 사용하는 함수들인데, 자체적인 scope를 갖는 코드블럭을 사용해서 scope function이라 불린다. Kotlin 공식문서 참조. 공식문서의 예를 가져와보면 다음과 같다. Person…
[태그:] kotlin
Multithread Singleton 구현에서의 Double-checked locking pattern
안드로이드 Room에서 Database 클래스의 Singleton 구현에 조금 의아해 보이는 코드가 있었다. Database class 코드를 다시보면 아래와 같은데, singleton 구현부분에서 getInstance() 함수만 떼어서 보자. 코드를 보면, instance의 null 여부를 두 번 체크하고 있다. 생각없이 보면 이상할 수 있는데, 멀티 쓰레드 동기화시 꼭 필요한 부분이며 Double-checked locking 이라고 부르는 디자인 패턴이다. 링크의 위키페이지를 따라가면 관련 설명이 있다….
Android : Paging Library
네트워크에서 데이터를 읽어오든지, 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을…