728x90

2022/10 6

Kotlin Sequence

Kotlin Sequence Kotlin 에는 Collection 과 함께 Sequence 라는 스펙이 존재한다. 공식문서에 따르면 Collection 처럼 Element 를 저장하는 방식이 아니고, Iterator 에 가깝다. 정확히는 순회하면서 Element 를 생산(Produce) 한다. Lazily Evaluation Sequence 의 가장 큰 장점은 지연 평가가 가능하다는 것이다. 즉, 우리가 Collection 을 사용하여 map, filter, ... 와 같은 연산을 수행하게 될 경우 그 즉시 값을 계산하게 된다. 예를 들면 listOf(1,2,3,4,5).map {it * 2} 와 같이 될 경우 5개 Element 를 그 즉시 계산하게 된다는 것이다. 당연하게도 위와 같이 즉시 연산이 필..

Kotlin 2022.10.25

Kotlin Coroutine Series - 7 ) Dispatcher

Dispatcher Dispatcher 는 코루틴에서 중요한 기능적 역할을 한다. 코루틴의 Task 가 어떤 Thread 에서 실행할지 결정하는 역할을 해준다. 앞서 봤듯이, 코틀린에서 우리가 코루틴을 이용하여 코드를 작성하면, 아래와 같이 분기가 쳐지는 것을 확인할 수 있다. fun originalFunction(continuation: Continuation): Any { continuation as OriginalFunctionContination if (continuation.label == 0) { continuation.thisLocalVariable = 10 continuation.thisLocalVariable2 = "Local Value" println("Start!!") continua..

Kotlin 2022.10.22

Kotlin Coroutine Series - 6 ) Coroutine Scope

Coroutine Scope 코루틴에서 영역(Scope) 는 코루틴 컨텍스트와 코루틴의 생명주기(LifeCycle) 을 관리하기 위해 사용된다. 따라서 코루틴은, 앞서 배웠던 구조화된 동시성(Structured Concurrency) 를 위해서, 자신만의 Job 을 보유하게 된다. GlobalScope 를 왠만해서 사용하지 말라고 하는 이유 또한, 코루틴의 시작과 종료를 관리하기 어려운 상태로 빠져들 수 있으므로 Memory Leak 현상을 초래할 수 있게 된다. coroutineScope 함수 coroutineScope(block) 함수는 새롭게 코루틴을 만드는 역할을 한다. coroutineScope 의 특이한 특성은 새로운 코루틴이 끝나기전까지, 이전 코루틴을 일시중단시키게 된다. 예를 들기 위한 ..

Kotlin 2022.10.22

Kotlin Contract

Kotlin 을 사용하다 보면 유용한 확장함수들을 많이 만들어서 사용하게 되는데요. 이 확장함수를 사용하다 보면 "스마트 캐스트" 와의 문제에 부딪히고는 합니다. 한번 코드를 통해 Smart Cast 를 알아보도록 합시다. Smartcast 위에서 설명한 예시를 코드로 보여주자면, 아래와 같은 상황인데요. 분명 isNotNull 이라는 제가만든 커스텀 확장함수로 NullCheck 를 함에도 불구하고 아래와 같이 `?(safe-null)` 을 써야만 하는 상황입니다. 이 상황은 왜 발생할까요? Kotlin 의 SmartCast 는 쉽게 얘기해서 컴파일러(Compiler) 가 Programmer 대신에 Casting 을 Smart 해주게 하는 기능을 뜻합니다. 즉, 위 코드가 SmartCasting 이 안되..

Kotlin 2022.10.03

Kotlin Spring JSR-303 Issue 해결

Kotlin JSR-303 Issue Kotlin Spring 을 통해 개발하다보면 생각보다 Spring 에서 Kotlin 스럽게 사용하기 위해 몇가지 Custom 을 해줘야 하는 상황들이 생깁니다. 아래와 같이 Kotlin Coroutines 는 Spring 5.3 부터 지원되는 Spec 으로 Controller 에서 suspend method 를 이용하는것을 가능하게 해줍니다. suspend modifier 와 hibernate validation Issue 따라서 기존의 Validation 들을 그대로 내비둔채 suspend modifier 를 붙여주게 되면 실제로 테스트 해볼때 아래와 같은 에러를 마주하게 됩니다. 이유는 hibernate-validation 이 Coroutines 를 Suppor..

Kotlin 2022.10.03

Kotlin Coroutine Series5 ) Cancellation And Exception Handling

Cancellation Cancellation 은 Coroutine 에서 정말 중요한 기능 중 하나이다. 앞서 Job Life Cycle 에 대해 우리가 공부했을때, Job 이 취소 될 수 있다는 것을 공부했었다. 또한 취소될때 곧바로 취소되는 것이 아니라 Cancelling State 에서 취소 되기전 Resource 반납등의 작업을 한다는 것 또한 알게 되었다. 따라서 코루틴을 활용한 Library 나 Framework 를 구성하게 될때, Cancelling 상태에서 어떤 작업을 할지를 잘 구성해야 자원을 낭비하지 않게 잘 구성될 수 있을 것 이다. 이번장은 중요한 만큼 Coroutine 코드도 많고, 내부 동작을 자세하게 들여볼 예정이다. Cancel 우리가 앞전에 봤던 Job 에는 cancel()..

Kotlin 2022.10.01
728x90