5. 코루틴 채널(Channels) 및 흐름(Flow)코루틴에서 채널(Channels)과 플로우(Flow)는 비동기 데이터 스트림을 다루기 위한 두 가지 주요 방식입니다. 이들은 모두 비동기적인 작업을 순차적으로 또는 스트림 형태로 처리할 수 있게 해줍니다.5.1 코루틴 채널(Channels)채널(Channel)은 비동기 데이터 스트림을 처리하는 도구입니다. 코루틴에서 데이터를 한 쪽에서 전송하고, 다른 쪽에서 수신할 수 있게 해줍니다. 채널은 파이프처럼 동작하여, 여러 코루틴이 데이터를 주고받는 데 유용하게 사용할 수 있습니다.채널의 주요 특징:한 코루틴에서 데이터를 보내고(send), 다른 코루틴에서 데이터를 수신(receive)할 수 있습니다.데이터는 FIFO(First-In, First-Out) ..
4. 비동기 흐름 제어: suspend 함수와 withContext4.1 suspend 함수란?suspend는 코틀린에서 비동기 작업을 정의할 때 사용되는 키워드입니다. suspend 함수는 일시 중단될 수 있는 함수로, 실행 중간에 일시적으로 멈췄다가 다른 작업을 처리한 후 다시 재개될 수 있습니다. 일반 함수와는 달리 코루틴 내에서만 호출될 수 있으며, 비동기 작업을 처리하는 데 최적화되어 있습니다.suspend 함수는 동기적 코드처럼 작성하지만, 실제로는 비동기적으로 실행되어 코드 가독성을 크게 향상시킵니다.suspend 함수의 특징:코루틴 내에서만 호출될 수 있습니다.코루틴 내에서 호출된 suspend 함수는 일시적으로 중단되었다가 재개될 수 있습니다.비동기 흐름 제어를 동기적 코드처럼 간단하고 ..
3. 코루틴의 동작 원리 및 구조화된 동시성 (Structured Concurrency)이제 코틀린 코루틴에서 구조화된 동시성(Structured Concurrency)에 대해 살펴보겠습니다. 이 개념은 코루틴의 안정성과 예외 처리에 중요한 역할을 하며, 코드가 복잡해질수록 필수적으로 이해해야 할 개념입니다.3.1 코루틴의 동작 원리3.1.1 중단 함수(suspend 함수)코루틴은 중단 가능한 함수(suspend 함수)를 통해 비동기 작업을 중단하고 나중에 다시 재개할 수 있습니다. 코루틴 내에서 중단 함수가 호출되면, 해당 코루틴은 중단되며 다른 작업을 계속 진행할 수 있습니다. 코루틴의 핵심은 이러한 비동기 처리를 동기적 코드처럼 작성할 수 있다는 점입니다.예시로, delay 함수는 중단 함수의 한 ..
1. 코루틴의 기초 개념1.1 코루틴이란 무엇인가?코루틴(Coroutines)은 비동기 작업을 쉽게 처리하기 위한 경량 스레드라고 생각할 수 있습니다. 코틀린의 코루틴은 실제 스레드를 차지하지 않으면서도 비동기 작업을 수행할 수 있습니다. 비동기 프로그래밍의 복잡함을 줄이고, 코드가 동기적으로 실행되는 것처럼 보이면서도 효율적인 비동기 작업을 가능하게 해줍니다.1.2 코루틴의 장점과 스레드와의 차이점경량성: 코루틴은 스레드에 비해 매우 가볍습니다. 수천 개의 코루틴이 실행되더라도 시스템 리소스를 많이 차지하지 않습니다.비동기 처리: 코루틴은 비동기 처리를 단순하게 만듭니다. 기존의 스레드를 사용한 비동기 처리에 비해 코드가 더 직관적입니다.중단 및 재개 가능: suspend 키워드를 통해 코루틴은 일시 ..
20강. 코틀린의 어노테이션어노테이션이란?어노테이션을 붙여 개발자에게 의견을 알리거나 특별한 일이 일어나도록 할 수 있음어노테이션 만드는 방법annotation class Shapeannotation class Shape( val test: String, val number: Int, val clazz: KClass)KClass코드로 작성한 클래스를 표현하는 클래스val kClass: KClass = Annotation::class@Retention우리의 어노테이션이 저장되고 유지되는 방식을 제어@Retention(AnnotationRetention.RUNTIME)annotation class ShapeRetention의 종류SOURCE: 어노테이션이 컴파일때만 존재BINARY: 어노테이..
17강. 연산자 오버로딩연산자 오버로딩 특징operator키워드가 fun앞에 붙음함수의 이름과 파라미터가 정해져있음예시 - Pointdata class Point ( val x: Int, val y: Int) { fun zeroPointSymmetry() = Point(-x, -y)}fun main() { val point = Point(20, -10) println(point.zeroPointSymmetry())}zeroPointSymmetry() 메서드를 통해 점대칭을 구하고 있음하지만, 연산자 오버로딩을 통해 좀더 간단히 사용 가능unaryMinus(): 단항 마이더스 연산자data class Point ( val x: Int, val y: Int) { o..