728x90

전체 글 169

코루틴 빌더 예외처리

Coroutine Exception Handling Coroutine 의 Exception Handling 은 Coroutine 을 제대로 공부하지 않으면 사용하기 힘들다. 왜냐하면 사용하는 Coroutine Builder 마다 Exception 을 전파하는 방식이 다르기 때문이다. Coroutine Builder 간의 차이 launch 의 경우 Exception 이 발생하게 되면 즉시 Exception 을 위로 전파하는 성질이 있습니다. async 의 경우 Exception 이 발생해도 즉시 전파하지않고, await() 이 실행될때 전파합니다. 사실 이런 부분은 코드로 봐야 조금 더 직관적이므로 코드로 설명하겠습니다. launch launch 의 경우 위에서 설명했듯이 Exception 을 그 즉시 상..

Kotlin 2022.07.07

CoroutineScope 과 Runblocking 의 차이

CoroutineScope VS Runblocking Kotlin Coroutines 을 학습했다면 위와 같은 고민을 하고 있을 가능성이 높다고 생각한다. 도대체 둘의 차이는 무엇일까? 일단 아래 예시 코드를 한번 보자. // 1번 코드 fun main() = runBlocking { val a = coroutineScope { delay(3000) 10 } println("a is calculated") val b = coroutineScope { delay(3000) 20 } println(a) // 10 println(b) // 20 } // 2번 코드 fun main() = runBlocking { val a = runBlocking { delay(5000) 10 } println("a is ca..

Kotlin 2022.07.05

Kotlin Coroutine Exception Handling

Exception Handling 앞에서도 말했듯 Coroutine 에는 Structured Concurrency 개념이 존재해서, Children 에서 Exception 이 전파될 경우 부모 또한 취소된다고 말했었다. 그래서 우리는 부모까지 uncaught Exception 이 전파되어서 취소되는 상황을 막아야 한다면, Exception 을 Handling 해야만 한다. Exception Handling 방법 가장 무난하게는 Try...Catch 를 사용하는 방법이 있을 수 있다. 참고로 아래 코드 처럼 launch 를 try..catch 로 덮는것은 아무의미가 없다. fun main(): Unit = runBlocking { try { launch { delay(1000) throw Error("So..

Kotlin 2022.07.05

Kotlin Coroutine Job

Jobs 코루틴에서 Job 이란 무엇일까? 컨셉적으로는 LifeCycle 에서 취소될 수 있는 것을 뜻한다. Job 을 알아야 하는 이유는 내가 알기론, 모든 ㄴKotlin Coroutines Library 를 이용해 만든 CoroutineBuilders 는 Job 을 만든다. Deffered 또한 Job Interface 를 상속하고 있다. Structured Concurrency Job 또한 코틀린의 기본원칙인 Structured Concurrency 를 따른다. 만약, Structured Concurrency 를 모른다면, 다시 이전포스트를 공부하고 오는게 좋다. 하여튼, 그래서 아래 Job 이 취소되거나, 부모 Job 이 취소될 경우 그 Scope 는 Cancel 될 것이다. Job LifeCyc..

Kotlin 2022.07.01

Kotlin) 변성

변성 (Variance) Generic Type 의 대체 가능성을 정의 (무공변, 반공변, 공변), 변성은 Genrice Parameter Type 간의 관계를 나타낼때 쓰이는 단어임. 무공변(invariance) Generic 의 Parameter Type 은 각각 고유하므로 GenericType 사이의 대체 가능성은 기본적으로 성립하지 않음. 이 상태가 무공변(invariance) 상태임. 이 말을 듣고 느낀 점은, 지금 까지 Generic Parameter 에 넣는 Type 을 자꾸, 내가 생성한 Class 들의 상속관계로 가져와서 생각하다보니, 공변을 한동안 이해하기 어려웠던 건가? 이런 생각이 들었다. class Tree(val value: T) var tree: Tree = Tree(10) /..

Kotlin 2022.06.30

Coroutine Builder

CoroutineBuilder Kotlin 에서 Suspend function 은 normal function 에서 호출할 수 없다. Suspend Function 은 오로지 Suspend Function 에서만 호출되어야 한다. 하지만 우리가 Suspend 를 사용해야 하는데, 모든 함수가 suspend 일 수 있을까? 적어도 main(프로그램 진입점) 은 suspend 하지 않을 수 있다. 그래서 코틀린은 suspend scope 를 만들 수 있도록 corutineBuilder 를 제공한다. 대표적으로 제공하는 세가지 corutineBuilder (launch, runBlocking, async) 에 대해 공부해보자. launch builder launch builder 는 concept 적으로 새로..

Kotlin 2022.06.27

Code 와 Blocking And Sync Model 에 관하여

개요 이 문서에서는 Blocking Structure / NonBlocking Structure 에 대해 내가 알고 있는 지식들을 연결하여 설명할 예정이다. 따라서 내용이 좀 길어질 수 있으며, 누군가에겐 루즈한 글일 수도 있다. Code Flow 현재 우리가 대중적으로 사용하는 컴퓨터에서 우리가 작성하는 Code 를 실행시키는 과정은 기본적으로 위에서 아래로 흐르려고 하는 성질이 있다. 나는 이를 "Top-Down" 이라고 표현한다. 가끔 condition 이나 go, switch 같은 회로를 만나면 위로 역전되는 현상이 있기도 하지만, 기본적으로는 위에서 아래로 흐르려는 방향이 있다. 즉, 그래서 대부분 우리는 코드를 동기적으로 짜는데 더 익숙할 수 밖에 없다. 기본적으로 이 문장 실행후 아래 문장이..

CS 2022.06.24

Inclusion / Exclusion Of Elements

Inclusion / Exclusion Of Elements 원소들은 어떤 집합에 포함될 수도, 포함되지 않을 수도 있다. 원소 a 가 집합 A 에 포함됨. $a \in A$ 원소 a 가 집합 A 에 포함되지 않음. $a \notin A$ Equal Sets 집합 A 의 모든 원소가 B 에 포함되고, 집합 B 의 모든 원소도 A 에 포함될때, A, B 는 서로 같은 집합이다. $A = {A, B, C} , B = {A, B, C}$ 일때, A 와 B 는 Equal Set 이다. $A = B [(\forall a \in A) \in B] \wedge [(\forall b \in B) \in A]$ Inclusion / Exclusion Of Sets SubSets 집합 A 의 모든원소가 집합 B 에 포함될..

Math 2022.06.20

Kotlin Coroutines

Kotlin Coroutines 에 대한 공부를 최근에 많이 하고 있는데 하면서 느껴지는 점은 Thread 간의 Context Switching 에 관한 내용을 Heap 으로 관리할께 라는 느낌이 강하게 들었다. 예전에는 어떻게 Context Switching 을 적은비용으로 한다는 거지 싶었는데, 이제는 대략적으로 이해가 간다. 언제 글을 정리할까 했다가 오늘 천천히 정리해보려고 한다. 기존 Context Switching 의 문제 일단 아주 간단하게 설명하겠다. 어차피 지금 글에서 이 내용이 중요한건 아니니까. 각 Thread 는 Local Stack 등 자신만의 데이터를 가지고 있는데, 다른 Thread 와 Switching 해야 할때 자신의 작업정보를 넘겨주어야 한다. 즉, Process Swit..

Kotlin 2022.06.19

Algebraic Properties And Equations

Algebraic Properties 이 아래 법칙은 모든 연산에 적용되는 것은 아니고, 이것이 적용된다고 증명된 연산에서 사용할 수 있는 법칙 같다고 생각함. 아래 법칙을 규정하는데 사용되는 모든 연산자나, 변수는 특정 연산자를 가르키는 것이아니라, abstract 하다고 생각하면 됨. Commutative Property (Law) $a \diamond b = b \diamond x$ 각 LHS, RHS 의 Variables 의 순서를 바꿔도 동등성이 성립함. 예를 들면 아래 처럼 $b \diamond a = x \diamond b$ Associative Property (Law) $(a \circ b) \diamond c = c \diamond (a \circ b)$ Destributive Prop..

Math 2022.06.19
728x90