일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 코틀린 out
- standard input
- Test
- 자바
- cli 만들기
- Mutation testing
- 의존성역전원칙
- Java
- change refresh rate
- output stream
- 돌연변이 테스팅
- InnoDB
- standard output
- 코틀린
- IntelliJ
- 개인블로그 hugo
- hugo 로 블로그
- 코틀린 in
- Pitest
- resize image with go
- ruby
- resizer 구현
- MySQL
- image resizer with go
- 객체지향
- kotlin
- JPA
- 공짜블로그
- 코틀린 노트북
- Convariance
- Today
- Total
목록분류 전체보기 (160)
Rlog
Week6 선점형 멀티태스킹 대부분의 OS 는 선점형 멀티태스킹 방식을 취하고 있음. 예를 들면 A 프로세스나 스레드를 스케쥴링 하다가도, B 프로스세스나 스케쥴러가 좀 더 높은 우선순위로 실행되야 한다면, OS 가 A 프로세스를 중단시키고, B 프로세스를 실행시킬 수 있음 비선점형 멀티태스킹 OS 가 강제로 현재 실행중인 프로그램을 멈출 수 없음. 로드된 프로그램이 종료되어야 다른 프로그램이 실행됨. 보통 경량스레드들이 이에 속함. 보통 하나의 로직이 죽으면 전부 다 죽음. 비선점형 멀티태스킹의 단점 단점은 진짜 동시성이 아니다. 하나의 작업을 여러개의 쓰레드나 프로세서로 분산시킬 수 없음. -> 각 작업을 길게 쪼개면 각각 조각을 스레드로 분산시킬 수는 있음. 위의 사진 처럼 하나의 Job 을 잘게 ..
Coroutine Exception Handling Coroutine 의 Exception Handling 은 Coroutine 을 제대로 공부하지 않으면 사용하기 힘들다. 왜냐하면 사용하는 Coroutine Builder 마다 Exception 을 전파하는 방식이 다르기 때문이다. Coroutine Builder 간의 차이 launch 의 경우 Exception 이 발생하게 되면 즉시 Exception 을 위로 전파하는 성질이 있습니다. async 의 경우 Exception 이 발생해도 즉시 전파하지않고, await() 이 실행될때 전파합니다. 사실 이런 부분은 코드로 봐야 조금 더 직관적이므로 코드로 설명하겠습니다. launch launch 의 경우 위에서 설명했듯이 Exception 을 그 즉시 상..
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..
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..
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..
변성 (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) /..
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 적으로 새로..
개요 이 문서에서는 Blocking Structure / NonBlocking Structure 에 대해 내가 알고 있는 지식들을 연결하여 설명할 예정이다. 따라서 내용이 좀 길어질 수 있으며, 누군가에겐 루즈한 글일 수도 있다. Code Flow 현재 우리가 대중적으로 사용하는 컴퓨터에서 우리가 작성하는 Code 를 실행시키는 과정은 기본적으로 위에서 아래로 흐르려고 하는 성질이 있다. 나는 이를 "Top-Down" 이라고 표현한다. 가끔 condition 이나 go, switch 같은 회로를 만나면 위로 역전되는 현상이 있기도 하지만, 기본적으로는 위에서 아래로 흐르려는 방향이 있다. 즉, 그래서 대부분 우리는 코드를 동기적으로 짜는데 더 익숙할 수 밖에 없다. 기본적으로 이 문장 실행후 아래 문장이..