Kotlin
-
Kotlin Delegation 분석Kotlin 2023. 3. 6. 22:12
다른 언어들에 비해 코틀린이 제공해주는 독특한 기능이 있는데요. 바로 델리게이션입니다. 델리게이션을 지칭하는 위임 패턴은 이미 전통적인 디자인 패턴 중 하나이지만, 코틀린은 이러한 위임 패턴을 아주 간단히 구현할 수 있게 만들어, 언어 차원에서 위임 패턴 사용을 적극 권장하고 있습니다. 안드로이드 개발에서도 by lazy, by remember 등의 위임 패턴을 이미 많이 사용하는데요. 오늘은 코틀린 델리게이션에 대해 간단히 알아보는 시간을 가져볼까 합니다. 상속과 위임이란 무엇일까? 코드의 재사용성은 프로젝트가 커질 수록 매우 중요해집니다. 재사용성을 늘리는 기법은 아주 많은데요, 그 중 상속과 위임 패턴도 아주 대표적인 재사용성을 늘리는 기법입니다. 객체지향 개발 방식에서는 상속을 자주 사용하게 되는..
-
Kotlinx-SerializationKotlin 2023. 3. 6. 22:07
안녕하세요 안드로이드 12기 이지은입니다. 입사한지 얼마 안되었을때, 팀장님께서 붙여놓은 @Serializable 어노테이션을 보고 parcelable과 맨날 비교하는 그 serializable(Java 인터페이스)인줄 알고 질문을 했던적이 있었습니다.ㅎㅎ 그때 처음으로 kotlinx Serialization라이브러리 라는것을 알게 되었고, 어떻게 사용하는지 왜 쓰는지 등이 궁금해서 이번 기회에! 정리해보려고 가져와봤습니다.😊 Serialization Android에서 서버통신을 할때 서버 데이터인 JSON 형식을 직렬화 및 역직렬화를 하면서 Gson, Moshi 등의 라이브러리를 많이들 사용하시죠! 저도 원래는 제일 익숙한 Gson만 사용하다가, 구글 코드랩에서 Moshi를 사용하는걸 보고 Moshi도..
-
Scope Function BasicKotlin 2023. 3. 6. 21:18
안녕하세요 안드로이드 12기 주혜진입니다~ 회사에서 리뷰 받을 때 주로 제가 스코프 함수를 잘못? 사용해서 권장되는 사용법을 알려주시는 코멘트를 많이 받았었는데요~ 그래서 요번 블로그 주제로 스코프 함수로 정해봤습니다! 이전에 스코프 함수 글이 있긴 하지만! 저는 공식문서를 번역하면서 공부한 글이라 쉽게 쓱 읽기 좋을 것 같아요! 그럼 본론으로 고고! 목적 Executing a lambda on non-null objects: let Introducing an expression as a variable in local scope: let Object configuration: apply Object configuration and computing the result: run Running statem..
-
확장 함수, 람다 함수, 고차 함수의 기초Kotlin 2023. 3. 6. 20:58
Kotlin에서는 확장함수, 람다 식, 고차함수를 적절하게 사용하면 코드가 깔끔해지고, 공통 코드 구조를 뽑아낼 수 있습니다. 확장 함수의 기본 확장 함수는 간단합니다! 확장 함수는 어떤 클래스의 멤버 메소드인 것처럼, 즉 원래 클래스 안에 선언되어 있는 것처럼 호출이 가능하지만 사실은 그 클래스 밖에 선언된 함수입니다. 아주 쉬운 예제로 확인을 해보면, 한 문자열의 가장 마지막 문자를 출력해보는 예제입니다. fun String.lastChar(): Char = this.get(this.length - 1) 확장 함수는 일반 함수의 선언처럼 fun 키워드로 시작합니다. 이후에 확장할 클래스 이름( 이를 수신 객체 타입이라고 한다 )을 적고 점(.) 뒤에 함수의 이름을 적어주고, 함수 답게! 괄호 ()를 ..
-
How do Kotlin coroutines work internallyKotlin 2023. 3. 6. 13:00
안녕하세요 안드로이드 11기 강다현입니다. Coroutine under the hood 이번엔 코루틴의 내부 동작에 대해 살펴보도록 합시다. 이 내부 동작에서의 핵심 키워드는 Continuation (Continuation-Passing-Style)입니다. 우리가 코루틴을 사용할 때, 기본적으로 suspend function은 함수를 중간에 멈출수가 있습니다. 그러나 suspend function을 사용하다 보면 이런 의문이 생깁니다. 다시 멈추고 다시 돌아갈 땐 (resume) 내부적으로 어떻게 동작하는 걸까요? 어떤 포인트에서 다시 시작해야할지 어떻게 알까요? (일종의 마법같은? 현상!) 이 문제를 해결하기 위한 개념이 바로 Continuation-Passing-Style. CPS입니다. 먼저 간단한..
-
Coroutine Shared mutable state and concurrencyKotlin 2023. 3. 5. 13:41
Shared mutable state and concurrency 안녕하세요! 안드로이드 11기 강희원입니다. 이번 포스팅에서는 코루틴 공식 가이드의 Shared mutable state and concurrency에 대해 알아보도록 하겠습니다. 목차 The problem Volatiles are of no help Thread-safe data structures Thread confinement fine-grained Thread confinement coarse-grained Mutual exclusion Actors The problem 코루틴은 Dispatchers.Default와 같은 디스패처를 이용해서 다중 스레드에서 동작할 수 있습니다. 이 과정에서 여러 동시성 문제가 발생할 수 있는데, ..
-
코루틴(Coroutine)의 일시 중단 함수 사용하기Kotlin 2023. 3. 4. 02:13
Composing Suspending Functions 이번 포스팅에서는 코루틴의 일시 중단 함수를 조합하여 활용하는 방법을 알아본다. ※ IntelliJ나 Android Studio가 설치되어 있지 않다면 Kotlin 공식 사이트에서 지원하는 온라인 IDE(Kotlin Playground)를 사용하여 아래 코드를 실행할 수 있다. Sequential by default 아래 코드는 어떤 유용한 기능(?) 두 가지를 순차적으로 실행 및 조합하여 결과를 내도록 구현되어 있다. fun main() = runBlocking { val time = measureTimeMillis { val one = doSomethingUsefulOne() val two = doSomethingUsefulTwo() printl..
-
Coroutine FlowKotlin 2023. 3. 4. 00:49
Asynchronous Flow suspending function은 비동기로 단일값을 반환하는 반면, Flow는 비동기로 동작하면서 여러 개의 값을 반환하는 function을 만들 때 사용하는 coroutine builder입니다. flow {}로 생성된 block은 suspend 할 수 있습니다. flow 역시 builder 이기 때문에 suspend 키워드 없이 함수를 만들 수 있습니다. emit 함수를 이용해 값들을 방출합니다. collect함수를 이용해 방출된 값들을 수집합니다. code fun foo() = flow { for(i in 1..3) { delay(100) emit(i) } } fun main() = runBlocking { val startTime = System.currentT..