kotlin 20

Java/Kotlin에서의 예외처리에 관하여

Java Exception Hierarchy Throwable은 모든 Exception 객체들의 부모 클래스다. 크게는 Error와 Exception으로 구분할 수 있고, Exception은 또 다시 Checked Exception과 Unchecked(Runtime) Exception으로 구분 된다. Error Error는 회복불가능한(non-recoverable) 오류다. 런타임에 Error가 발생하면 핸들링할 수 없다. 대표적으로는 메모리 부족(Out of Memory), 네트워크 포화(Network Saturation), 하드웨어 결함 등이 있다. Error를 인스턴스화 하거나 상속하거나, 직접 예외를 던지거나, 처리를 하려해서는 안된다. 위로 전파하는 것이 가장 좋다. Exception - Che..

Spring 뉴비가 배운 간단한 개념들

나도 확실하게 잘 다루는 서버 Framework를 하나 가지고 싶은데, 뭐로 할까 고민하다가 대중적이면서도 내가 현재 개발할때 익숙한 Java/Kotlin을 지원하는 Spring을 배워보자는 마음을 먹었다. "kotlin spring boot"이라고 검색하면 말은 느리지만 손은 빠른 아저씨의 유튜브 강의 시리즈가 나오는데, 이걸 보고 공부하고 있다. 이제...10강!까지들었다. 아직 찍먹한지 겨우 이틀되었지만 까먹기 전에, Spring에 관해 알아낸 것들을 간략히 정리 해 보겠다. Spring Framework vs Spring Boot https://spring.io/projects 에 가면 여러가지 Spring "프로젝트"라고 불리는 것들이 보인다. 이것은 Spring이라는 Framework에 속하거..

[안드로이드] 회전목마(Carousel) 애니메이션 구현하기

게임에서 아이템이나 캐릭터 선택을 할때 회전 목마처럼 돌아가는 선택 애니메이션을 자주 볼 수 있는데, 이것을 안드로이드에서 구현해 볼 수 있는 기회가 생겼다. 사실 노가다를 하면 어떻게든 구현할 수 있지만, 이번에는 문제를 분석하고 쪼개보는 연습을 겸해봤다. 💡 요구사항: 3가지 종류의 상자가 있고, 이 상자들을 돌려가면서 열 상자를 선택하게 해주세요. 1. 상자 유형 데이터화 첫번째로 해야할 일은 상자를 데이터화하는거다. enum 클래스로 상자의 이미지, 가격, 이름이 담긴 LuckyBoxType을 만들어 주었다. enum을 사용한 이유는 순차적 접근이 sealed class보다 훨씬 쉽기 때문이다. enum class LuckyBoxType( val image: Int = 0, val cost: In..

Flow.map() vs Flow.transform()

fun getPagedFavoritePosts(): Flow = Pager( config = PagingConfig(25), pagingSourceFactory = { GenericPagingSource { afterKey -> redditApi.loadFavoritePosts(getUserName(), afterKey) } } ).flow.transform { pagingData -> emit(pagingData.map { (it.data as PostDto).map() }) } 우연히 오픈소스 코드를 보다가, 나라면 map을 썼을 것 같던 구문에 transform을 사용한 것을 발견했다. transform? 처음 들어봤는데 이름이 map과 왠지 비슷한 일을 할 것같아서 찾아보았다. map Flow의 ..

[Kotlin] 클로저(Closure)에 대해 알아보자

Closure와 일반함수의 차이점 Closure는 outer scope에 있는 변수에 접근할 수 있지만, 일반 함수는 그렇지 못하다. 일반 함수는 자신이 정의된 영역 내에서만 변수를 사용할 수 있다. Closure는 함수를 값으로 취급하여 변수에 저장하거나 다른 함수의 인자나 반환값으로 사용할 수 있지만, 일반 함수는 그렇지 못하다. 일반 함수는 이름을 통해서만 호출할 수 있다. Closure는 실행 시점에 생성되고 소멸되지만, 일반 함수는 컴파일 시점에 생성되고 소멸되지 않는다. Closure는 상황에 따라 다른 값을 가질 수 있지만, 일반 함수는 항상 동일한 값을 가진다. Kotlin closure Kotlin에서 Closure는 상위 함수의 영역에 있는 변수에 접근할 수 있는 함수다. Kotlin은..

Kotlin은 왜 나왔고, 왜 Android 공식언어로 채택되었을까?

Kotlin은 어떤 언어? Intelij IDE로 유명한 Jetbrains에서 개발 2017년 구글에서 안드로이드 개발 정식언어로 채택 (왜 채택?) ‘Interoperatablity’ 강조, 틈새를 파고드는 전략 → 기존에 개발된 프로젝트 / 라이브러리를 그대로 사용가능 엄청 특별한건 아님… JVM language들 다 되긴함 Scala / Groovy / Jython… Kotlin In Action: Kotlin의 주요 목표는 더 간결하고, 생산적이면서 안전한 Java의 대안을 제공하는 것. → But Java의 대안에 초점보다는 실용적임 / 간결함 / 안전한 언어에 초점 객체지향 프로그래밍 뿐만아니라 함수형 프로그래밍 스타일도 지원 일급함수(First-class functions) 불변값 (Immu..

[Kotlin] CompletableDeferred의 개념과 활용

Promise가 그리울때 이벤트 기반으로 통신하는 프로토콜을 구현중에, JS의 Promise나 Dart의 Completer와 비슷한 역할을 하는 Kotlin 친구가 없을까하다 찾게되었다. 완벽한 대체재다! CompletableDeferred는 public function을 이용해 완료하거나 취소할 수 있는 Deferred이다. 이를 활용하면 내가 원하는 시점까지 기다렸다가 값을 받을 수 있다. 그럼 SuspendableCoroutine이랑 뭐가 다르냐? 라는 생각이 들 수 있다. SuspentableCoroutine은 해당 블록 안에서만 complete/cancel을 제어할 수 있지만, CompletableDeferred는 그런 제약이 없다. CompletableDeferred : Functions ab..

Kotlin coroutine : async vs launch 차이

async vs launch async 결과를 반환하는 코루틴을 시작하는데 사용 예외(Exception)가 발생할 경우 결과를 반환에 포함한다. 결과 또는 예외를 포함하는 Deferred를 반환 launch 결과를 반환하지 않는 코루틴을 시작하는데 사용 본인 혹은 자신 코루틴의 실행을 취소하기위해 사용할 수 있는 Job을 반환 Job: Fire and forget Job Job은 생성될때 기본적으로 자동 시작된다. 하지만, 이를 자동시작 되지 않게하려면 CoroutineStart.LAZY를 사용할 수 있다. Job join() vs start() join: Job을 완료할때까지 대기한다. start: 애플리케이션이 Job이 완료될때까지 기다리지 않는다. Job의 라이프 사이클 New: 생성됨 Active..

국기 이모지 동적으로 생성하기 (ISO 국가코드 사용)

국가 코드(ISO-3166-1 Alpha-2 Code)를 사용하여 국기 이모지 유니코드를 얻어오는 방법이다. 반대로, 국기 이모지를 받아서 국가 코드로 변환할 수도 있다. 반드시 countryCode가 제대로 들어온다는 보장이 있어야하기 때문에 "/^[a-z]{2}$/i" 같은 정규식을 추가해 줄 수도 있다. Javascript const OFFSET = 127397; function getFlag(countryCode) { const codePoints = [...countryCode.toUpperCase()].map(c => c.codePointAt() + OFFSET); return String.fromCodePoint(...codePoints); } Kotlin const val OFFSET = ..

Kotlin Scope functions의 쓰임새 (let, run, with, apply, also, takeIf, takeUnless) with skydove's pokedex

코틀린에서는 특정한 객체에대해 이름없이 접근할 수 있는 스코프를 형성하는 함수가 존재하는데, 이것이 바로 스코프 함수(Scope function)이다. 5가지로 이루어져있고, 목록은 아래와 같다. let run with apply also 이들을 코틀린 공식 문서와함께, 이 안드로이드 바닥에서 유명한 오픈소스 프로젝트인 Skydove님의 Pokedex 코드와 함께 살펴보려고한다. 기본적으로는 이들 모두 하는일은 동일하다. 어떤 객체에 대한 코드블록을 실행시키는거다. 차이점은 리턴값, 그리고 블록안에서 해당 객체가 어떻게 참조되는지뿐이다. 함수명 객체참조 리턴값 Extension함수 인지? let it Lambda result O run this Lambda result O run - Lambda resu..