본문 바로가기

Kotlin

(13)
operator fun invoke 안드로이드에서 클린아키텍처를 적용할 때 UseCase를 만드는데 다음과 같은 형식으로 작성하는걸 많이 봤다. class GetSomething @Inject constructor(private val repository: Repository) { operator fun invoke(val param: String) = repository.getSomething(param) } 코틀린 공부하다보니 여기에 숨겨진 비밀을 알게됐다. A value of a function type can be invoked by using its invoke(...) operator: f.invoke(x) or just f(x). 즉 GetSomething.invoke(param)이 GetSomething(param) 이런식으..
정렬 오름차순과 내림차순 오름차순 : 1 -> 2 -> 3 -> ... (그래프를 그렸을 때 증가하는 모양) sort() 함수 사용 내림차순 : 9 -> 8 -> 7 -> ... sortDescending() 함수 사용 불변성에 따른 정렬: -ed sort() mutable한 데이터집합을 정렬할 때는 sort()를 사용한다 sorted() immutable한 데이터집합을 정렬할 때 -ed가 붙은 sorted()를 사용하면 원본 리스트는 변경하지 않고 정렬된 값을 새로운 리스트에 담아 반환한다. - immutable한 List를 정렬할 때는 : sorted() 사용 - mutable한 MutableList를 정렬할 때는 : sort(), sorted() 둘다 사용 가능 (sorted()의 경우 List로 반환)..
코루틴 1 보호되어 있는 글입니다.
[Kotlin In Action] 위임 kotlin 위임이 궁금해 책을 따라가며 내용을 정리했다 4.1.2 open, final, abstract 변경자: 기본적으로 final 상속을 위한 설계와 문서를 갖추거나, 그럴 수 없다면 상속을 금지하라 Effective Java_조슈아 블로크 정확한 문서가 없을 경우 하위 클래스에서 기반 클래스 작성자의 의도와 다르게 메소드를 오버라이드하여 사용할 가능성이 있다 이런 상황에서 하위 클래스가 기반 클래스에 대해 가졌던 가정이 기반 클래스의 변경으로 인해 깨져버리는 경우 하위 클래스의 동작이 예기치 않게 바뀌는 Fragile base class(취약한 기반 클래스) 문제가 발생할 수도 있다 final 코틀린에서는 상속의 문제점을 인지하고 기본적으로 모든 클래스와 메소드의 변경자값을 final로 설정했다..
연산자 오버로딩 Android UAMP 샘플 코드를 보다가 새로운 표현을 찾았다 private val browseTree: BrowseTree by lazy { BrowseTree(applicationContext, mediaSource) } val children = browseTree[parentMediaId]?.map { item -> MediaItem(item.description, item.flag)} BrowseTree는 단순 클래스인데 어떻게 []를 사용하여 값을 가져올 수 있는 걸까? BrowseTree 쪽으로 가보니 get을 오버 로딩하여 구현하고 있었다. private val mediaIdToChildren = mutableMapOf() operator fun get(mediaId: String) = ..