Coroutine - GlobalScope & Delay & Dispatchers & Context
·
📘 Backend/Kotlin
Coroutine GlobalScope 저번에 Coroutine의 CoroutineScope를 알아봤었는데 이번엔 GlobalScope를 알아보겠습니다. 코루틴은 실행의 일시중단(Suspend)&재개(Resume)를 할수있는 비선점형 멀티태스킹을 위한 서브루틴의 일반화가 가능하게 합니다. 다시 생각해보는 Coroutine 장점 스레드와 다른점은 Coroutine은 스레드와 함께 사용됩니다. Coroutine은 코드 실행 중 멈출 수 있고(Suspendable) 다시 실행(Resume)할 수 있는 제어능력이 있습니다. 또, 작업을 쉽게 전환하며 병렬성이 아닌 동시성을 지원하며 실시간 컨텍스트를 가능하게 하며, 세마포어, 뮤텍스같은 기본적인 동기화 작업도 불필요합니다. 비동기 코드이지만 동기코드처럼 보입니다..
이미지 압축 & 회전 & 변환
·
📘 Backend/Kotlin
이미지 압축 & 회전 fun rotateCompressImage(orientation : Int, width : Double, height : Double, file : File) : File { val atf = AffineTransform() var width = width var height = height when (orientation) { 1 -> {} 2 -> { atf.scale(-1.0, 1.0) atf.translate(-width, 0.0) } 3 -> { atf.translate(width, height) atf.rotate(Math.PI) } 4 -> { atf.scale(1.0, -1.0) atf.translate(0.0, -height) } 5 -> { atf.rotate(-M..
Coroutine - Suspend Fun
·
📘 Backend/Kotlin
Coroutine Suspend 코루틴은 기본적으로 일시중단이 가능하다. launch로 실행하든 async로 실행하든 내부에 해당 코루틴을 일시중단 해야하는 동작이 있으면, 코루틴은 일시 중단된다. 위 그림을 코드로 표현하면 다음과 같다. fun suspendEx() { val job3 = CoroutineScope(Dispatchers.IO).async { // 2. IO Thread에서 작업 3을 수행한다. (1..10000).sortedByDescending { it } // 5. 작업 3 완료 } val job1 = CoroutineScope(Dispatchers.Main).launch { // 1. Main Thread에서 작업 1을 수행한다. println(1) // 3. 작업 1의 남은 작업..
Kotlin - 구조 분해
·
📘 Backend/Kotlin
💡 구조 분해 (destructuring declaration) 변수 선언에서 괄호를 사용하는 것은 Kotlin의 구조 분해 선언(destructuring declaration)을 나타냅니다. 구조 분해 선언은 복합적인 데이터 구조에서 각 요소를 개별 변수로 분해할 수 있는 기능을 제공합니다. 예를 들어, val (id, name, age, team) = queryFactory.selectFrom(m).fetchFirst()의 경우 queryFactory.selectFrom(m).fetchFirst()의 결과로 반환된 튜플이나 다른 구조화된 데이터 유형에서 각각의 값을 id, name, age, team 변수에 할당합니다. 즉, fetchFirst()가 반환하는 데이터는 예를 들어 다음과 같은 형태로 구..
Kotest - Basic
·
📘 Backend/Kotlin
Kotest Basic Settings build.gradle testImplementation("io.kotest:kotest-runner-junit5:5.3.2") testImplementation("io.kotest.extensions:kotest-extensions-spring:1.1.1") plugins Kotest Spec 코틀린에는 테스트 레이아웃이 10개정도 있는데 이 중 하나를 상속받아 진행한다. 여러 테스트 프레임워크에서 영향을 받아 만들어진 것도 있고, 코틀린만을 위해 만들어진 것도 있다. Spec 어떤 스타일을 고르던 기능적 차이는 없다. 취향에 따라, 혹은 팀의 스타일에 따라 고르면 될 듯 하다. ex) FreeSpec internal class HumanTest: FreeSpec..