Language

Language/Kotlin

[Kotlin - Coroutine] Flow 제어하기 (예외, 완료 등)

코루틴 관련 포스팅은 아래의 포스팅들을 같이 순차적으로 참고하시면 좋습니다. 클릭하면 해당 포스팅으로 이동합니다. 1. 코루틴 기본 개념 2. 코루틴 빌더 3. Job과 코루틴의 라이프 사이클 4. 코루틴 컨텍스트와 스코프 5. Flow 기본 개념 6. Flow 핵심 API 정복하기 7. Flow 제어하기 (예외, 완료 등) 이번 포스팅에서는 `Flow`를 제어하는 방법에 대해서 다룰 것이다. 저번 포스팅에서는 특정 작업을 수행하는 기능에 대해서 다뤘다면, 이번에는 `Flow`를 제어할 수 있는 여러 방법과 함수들을 다룰 예정이다. 예외를 처리하는 것 부터 시작해서, 완료, 시작, 재시도, 취소 등의 주제를 다룰 것이다. Flow의 예외 처리와 예외 투명성 일반적으로 코틀린으로 프로그래밍을 한다면, `..

Language/Kotlin

[Kotlin - Coroutine] Flow 핵심 API 정복하기

코루틴 관련 포스팅은 아래의 포스팅들을 같이 순차적으로 참고하시면 좋습니다. 클릭하면 해당 포스팅으로 이동합니다. 1. 코루틴 기본 개념 2. 코루틴 빌더 3. Job과 코루틴의 라이프 사이클 4. 코루틴 컨텍스트와 스코프 5. Flow 기본 개념 6. Flow 핵심 API 정복하기 7. Flow 제어하기 (예외, 완료 등) 이전 포스팅에는 Flow의 기본 개념과 특징들에 대해서 서술했다. 이번에는 중간 연산자(intermediate operator), 종결 연산자(terminal operator), 버퍼링(buffering), 여러 코루틴의 조합(composing), 평탄화(flattening) 들과 관련하여 핵심 API들을 상세하게 살펴보도록 하자. 중간 연산자 `Flow`는 `Collection`..

Language/Kotlin

[Kotlin - Coroutine] Flow 기본 개념

코루틴 관련 포스팅은 아래의 포스팅들을 같이 순차적으로 참고하시면 좋습니다. 클릭하면 해당 포스팅으로 이동합니다. 1. 코루틴 기본 개념 2. 코루틴 빌더 3. Job과 코루틴의 라이프 사이클 4. 코루틴 컨텍스트와 스코프 5. Flow 기본 개념 6. Flow 핵심 API 정복하기 7. Flow 제어하기 (예외, 완료 등) 이전에 봤던 `async` 빌더를 사용해서 코루틴을 만들면, `await`을 통해 단일 값을 반환받을 수 있었다. 그렇다면 코루틴을 통해 여러 값들을 비동기 연산으로 반환받는 방법도 있을까? 당연히 있다. 이는 `Flow`을 통해서 가능하다. 이번 포스팅에서는 `Flow`에 대한 기본적인 문법, 특징들을 알아보고 다음 포스팅에 실제 주로 사용하는 API들을 살펴보자. Flow란? `..

Language/Kotlin

[Kotlin - Coroutine] 코루틴 컨텍스트와 스코프

코루틴 관련 포스팅은 아래의 포스팅들을 같이 순차적으로 참고하시면 좋습니다. 클릭하면 해당 포스팅으로 이동합니다. 1. 코루틴 기본 개념 2. 코루틴 빌더 3. Job과 코루틴의 라이프 사이클 4. 코루틴 컨텍스트와 스코프 5. Flow 기본 개념 6. Flow 핵심 API 정복하기 7. Flow 제어하기 (예외, 완료 등) 이전 포스팅에서 코루틴의 라이프 사이클과 관련해서 여러 내용들을 다루었다. 이에 이어서 코루틴이 실행에 필요한 요소를 저장하는 코루틴 컨텍스트를 `CoroutineDispatcher` 라는 컨텍스트에 집중해서 알아볼 것이다. 그리고 전체 코루틴의 라이프사이클을 쉽게 관리할 수 있도록 만드는 코루틴 스코프에 대해서 알아보고, 이 코루틴 스코프를 생성하는 스코프 빌더(혹은 scope f..

Language/Kotlin

[Kotlin - Coroutine] Job과 코루틴의 라이프 사이클

코루틴 관련 포스팅은 아래의 포스팅들을 같이 순차적으로 참고하시면 좋습니다. 클릭하면 해당 포스팅으로 이동합니다. 1. 코루틴 기본 개념 2. 코루틴 빌더 3. Job과 코루틴의 라이프 사이클 4. 코루틴 컨텍스트와 스코프 5. Flow 기본 개념 6. Flow 핵심 API 정복하기 7. Flow 제어하기 (예외, 완료 등) 이전 포스팅에서 코루틴 빌더 중 하나인 `launch`에 대해서 다루었었고, 이 빌더가 반환하는 값인 `Job`에 대해서 간단히 코루틴을 제어하는 역할이라고 설명했었다. 코루틴을 제어한다는 것은 코루틴의 시작과 취소, 완료 전반을 제어한다는 말과 같다. 즉, 코루틴의 라이프사이클은 `Job`을 통해 관리되고 있으며, 코루틴의 상태는 `Job`의 상태를 통해 관리된다. 코루틴의 시작되..

Language/Kotlin

[Kotlin - Coroutine] 코루틴 빌더

코루틴 관련 포스팅은 아래의 포스팅들을 같이 순차적으로 참고하시면 좋습니다. 클릭하면 해당 포스팅으로 이동합니다. 1. 코루틴 기본 개념 2. 코루틴 빌더 3. Job과 코루틴의 라이프 사이클 4. 코루틴 컨텍스트와 스코프 5. Flow 기본 개념 6. Flow 핵심 API 정복하기 7. Flow 제어하기 (예외, 완료 등) 이전까지 코루틴의 개념에 대해서 살펴보았다. 이제 실제 코루틴을 사용해보기 위해, 새로운 코루틴을 만드는 방법을 알아보자. 새로운 코루틴은 `runBlocking`, `launch`, `async` 총 3가지 주요 코루틴 빌더를 사용해서 만들 수 있다. 이 외에 스코프 빌더(혹은 scope function)을 통해서도 코루틴을 생성할 수 있긴 한데, 코루틴에 대해 더 상세하게 알아본..

Language/Kotlin

[Kotlin - Coroutine] 코루틴 기본 개념

코루틴 관련 포스팅은 아래의 포스팅들을 같이 순차적으로 참고하시면 좋습니다. 클릭하면 해당 포스팅으로 이동합니다. 1. 코루틴 기본 개념 2. 코루틴 빌더 3. Job과 코루틴의 라이프 사이클 4. 코루틴 컨텍스트와 스코프 5. Flow 기본 개념 6. Flow 핵심 API 정복하기 7. Flow 제어하기 (예외, 완료 등) 코루틴이란? 코루틴은 협력을 의미하는 "co"와 routine이 합쳐진 말로, 말 그대로 협력하는 루틴이라는 뜻을 가지고 있다. 그렇다면 일반적으로 프로그래밍 세계에서 루틴은 무엇을 의미할까? 어떤 프로그램이 실행될 때 불려지거나 반복해서 사용되도록 만들어진 일련의 코드들을 지칭하는 용어라고 한다. 쉽게 그냥 함수라고 말할 수 있다. 이에 확장해서 서브루틴이라는 개념도 있는데, 루틴..

Language/Kotlin

[Kotlin] 리플렉션

리플렉션이란? 리플렉션(Reflection)은 런타임에 프로그램의 구조를 파악할 수 있도록 하는 언어 및 라이브러리 기능의 집합을 의미한다. 코틀린을 기준으로 쉽게 설명하면 런타임 시점에 동적으로 요소들(클래스, 프로퍼티, 함수 등)에 접근하여 구조를 파악하고 내부 요소들을 사용할 수 있도록 만들어놓은 일련의 기능들이라고 보면 될 거 같다. 보통 해당 요소의 런타임 참조를 리플렉션 객체로 얻어서 리플렉션 관련 기능들을 사용한다. 리플렉션 객체는 K로 시작하는 리플렉션 인터페이스의 구현체 객체로, 아래에서 구조를 자세히 살펴보도록 하자. 리플렉션 인터페이스 구조 코틀린 언어에서 제공하는 요소별로 인터페이스가 구분되어 설계되어 있는데, 해당 인터페이스 구현체를 얻어 코틀린의 리플렉션 기능들을 사용할 수..

Language/Kotlin

[Kotlin] 어노테이션

어노테이션 어노테이션은 소스코드에 메타데이터를 첨부하는 수단을 의미한다. 간단하게 주석이라고 생각해도 된다. @RestController @RequestMapping("/test") class TestController 위와 같이 `@`와 함께 붙어있는 코드를 어노테이션이라고 하며, 보통 Spring 프레임워크를 사용하면 `@Controller`, `@Service`, `@Repository` 이런 어노테이션을 많이 사용하기 때문에 익숙할 것이다. 어노테이션 선언 및 사용 annotation class Annotation1 annotation class Annotation2 @Annotation1 class Class1 @[Annotation1 Annotation2] class Class2 자바에서는 `..

Language/Kotlin

[Kotlin] Kotlin과 DSL

DSL이란 DSL은 Domain Specific Language의 약자이다. 말 그대로 도메인에 특화된 언어라는 소리인데, 특정 도메인에 국한된, 특정 도메인을 위해 만들어진 언어이다. 대표적으로 HTML은 웹페이지를 위해, Markdown은 문서 작업을 위해 특화된 언어이기 때문에 DSL이라고 부를 수 있다. 반면 여러 목적을 위해 범용적으로 사용할 수 있는 언어를 GPL(General Purpose Language)라고 한다. GPL을 이용해서 다양한 문제를 해결하거나 다양한 소프트웨어를 개발할 수 있다. 대표적으로 C, Java, Kotlin, Javascript, Python 등의 언어를 GPL이라고 부를 수 있다. DSL은 특정 도메인을 위해 만들어진 언어이기 때문에 범위가 특정 도메인에 국한된..

괴발자
'Language' 카테고리의 글 목록