일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ruby
- standard output
- cli 만들기
- Pitest
- JPA
- Java
- 객체지향
- image resizer with go
- 돌연변이 테스팅
- resize image with go
- 개인블로그 hugo
- Test
- 의존성역전원칙
- Convariance
- change refresh rate
- standard input
- 공짜블로그
- MySQL
- 코틀린 노트북
- hugo 로 블로그
- InnoDB
- 자바
- resizer 구현
- 코틀린 in
- 코틀린 out
- IntelliJ
- output stream
- Mutation testing
- 코틀린
- kotlin
- Today
- Total
목록전체 글 (160)
Rlog
Cancellation Cancellation 은 Coroutine 에서 정말 중요한 기능 중 하나이다. 앞서 Job Life Cycle 에 대해 우리가 공부했을때, Job 이 취소 될 수 있다는 것을 공부했었다. 또한 취소될때 곧바로 취소되는 것이 아니라 Cancelling State 에서 취소 되기전 Resource 반납등의 작업을 한다는 것 또한 알게 되었다. 따라서 코루틴을 활용한 Library 나 Framework 를 구성하게 될때, Cancelling 상태에서 어떤 작업을 할지를 잘 구성해야 자원을 낭비하지 않게 잘 구성될 수 있을 것 이다. 이번장은 중요한 만큼 Coroutine 코드도 많고, 내부 동작을 자세하게 들여볼 예정이다. Cancel 우리가 앞전에 봤던 Job 에는 cancel()..
Job 우리는 앞서서 Coroutine 의 기본 동작 원리 및 Continuation 과 CoroutineContext 와 같은 문맥을 유지해주는 부분에 관해서도 공부했다. Job 은 CoroutineContext 인데 앞서서 계속 얘기한 Structured Concurrency 를 유지하기 위한 하나의 수단이자 코루틴은 모두 자신만의 Job 을 가지고 있다. Context 와 다르게 상속받지 않고, 오로지 자신의 코루틴에만 의존한다. 이것도 말 보다 코드를 보는게 백배 이해가 빠르니 아래 코드를 한번 같이 보자. suspend fun main(): Unit = coroutineScope { val parentJob = coroutineContext[Job] println("[ParentJob] ${pa..
COROUTINE CONTEXT CoroutineContext 는 Coroutine 안에서 유지되도록 사용자가 별도로 정의한 문맥이라고 생각하면 좋은데, 따라서 Continuation 과 유사하게 우리가 가져가야 하는 문맥(Context) 이다. Coroutine Context 는 코드적으로 Map 이라고 생각하면 매우 이해하기 편하다. 따라서, CoroutineContext.Key 와 CoroutineContext.Element 의 조합으로 이루어져 있으며, Single Value 일수도 있고 여러개가 합쳐져 유사 Collection 과 같은 형태로 존재 할수도 있다. 이게 위처럼 말하면 사실 코드를 보지 않고는 무슨 소리인지 이해가 어려우므로 코드를 보고 다시 정의를 한번 보도록 하자 Coroutin..
Continuation Coroutine 에서 꼭 알아야 하는 부분 중 하나이지만 생소하지 않은 개념중 하나이다. Continuation 이란 말 자체가 생소해서 정의를 설명하기 보단, Continuation 이란 개념이 왜 만들어지게 됬는지 설명 하면 자연스럽게 이해될 것이라고 생각된다. 이 챕터는 진짜 상당히 어려울 수 있다. 잘 이해하고 넘어가야 왜 코틀린 바이트 코드가 그렇게 구성되는지 이해할 수 있다. Call Stack 과 Suspend Function 에서의 문제 아래 코드를 한번 살펴보자. fun a() { val a_temp = 1 val a_temp_zz = "zz" b() return "aa" } 위의 코드를 우리가 실행시킨다고 생각해보면, a() 함수를 실행시킨 뒤 Thread St..
왜 코루틴을 사용해야 할까? Java 에는 이미 멀티스레딩을 잘 지원하는 JavaFX 나 Reactor 와 같은 표준화된 라이브러리가 존재한다. 그럼에도 우리가 코루틴을 사용해야 하는 이유는 무엇일까? 코루틴은 이미 Lisp 와 같은 언어에서 예전에 구현된 적 있었으나, 별 다른 흥행을 얻지 못했었다. 그 이유는 실생활의 케이스에서 사용하기 적합하지 않았기 때문이라고 생각하는데, 코틀린 코루틴은 이러한 단점을 보완하여 실생활에서 좀 더 사용하기 적합하게 만들어졌다. 또한 코루틴은 Multi-Platform 언어로 코루틴으로 작성하면 해당 Platform 에 맞는 형태로 코드가 변경된다. 어떻게 보면 RxJava 나 Reactor 를 모르더라도 Coroutine 으로 코드를 작성하기만 하면 되는 것이다. ..
어떻게 하면 Spring MVC 에서 suspend 를 Controller 에 쓸 수 있을까 고민해보다가. Spring 5.3 Version 부터 코루틴 지원 한다는 Reddit 의 글을 보고 팀에서 이용하는 코틀린 버전을 2.4.5 버전으로 업그레이드 했다. 그 결과 Controller 에서 suspend 를 지원할 수 있게 되었다. 과연 어떻게 동작하는 걸까 알아보도록 하자. Reactive Type (Mono, Flux) 의 Return 가능 일단 suspend 가 붙은 controller 메소드의 return Type 을 알맞게 Mono 또는 Flux 형태로 바꾸어준다. Spring 내에서 Handler 의 ReturnValue 의 Type 에 따라서 알맞은 Handler 가 처리하게 되어 있다...
Java 에서 Collections API 를 통해서 List, Map, Set 등등 의 자료구조를 쉽게 사용할 수 있다. 종종 해당 Collections 에 있는 Data 를 정렬해야 할일이 있는데 어떻게 정렬되는지 한번 알아보도록 하자 Comparable Oracle 문서에 나와있는 정의는 아래와 같다. This ordering is referred to as the class's natural ordering, and the class's compareTo method is referred to as its natural comparison method. 간략하게 이야기 하면 객체의 자연적인 순서(숫자로 치면 1, 2, 3 ... 과 같은) 를 참조하여 정렬한다고 생각하면 될 것 같다. 더 나와 있..
"들어가기 앞서 이 글은 취준 / 면접시 알고리즘을 봐야 하나? 라는 토픽과는 전혀 무관하다. 난 단순히 엔지니어링 측면에서 알고리즘의 중요성에 대한 내 생각을 적어보려고 한다" 최근 알고리즘 문제 풀이에 재미를 느끼고 있는데 Leetcode 문제 풀이를 하던 중, 여러 배열의 문자들의 combination 을 어떻게 구성해야 할까? 라는 고민이 생겼다. 예를 들면 아래와 같은 상황이라고 가정해보자. 이 아티클에서 구현 Level 의 언어는 Python 을 이용하려고 한다. Kotlin 으로 구현해버리면, Kotlin 을 모르는 사람은 알기 힘든 경우도 종종 있어서, 내 생각에 psuedo code 에 비슷하게 구현가능 한 언어인 Python 을 선택했다. 위와 같은 상황에서 a 와 b 배열을 한단어씩 ..