📘 Backend/Kotlin2023. 7. 13. 18:37Coroutine - GlobalScope & Delay & Dispatchers & Context

Coroutine GlobalScope 저번에 Coroutine의 CoroutineScope를 알아봤었는데 이번엔 GlobalScope를 알아보겠습니다. 코루틴은 실행의 일시중단(Suspend)&재개(Resume)를 할수있는 비선점형 멀티태스킹을 위한 서브루틴의 일반화가 가능하게 합니다. 다시 생각해보는 Coroutine 장점 스레드와 다른점은 Coroutine은 스레드와 함께 사용됩니다. Coroutine은 코드 실행 중 멈출 수 있고(Suspendable) 다시 실행(Resume)할 수 있는 제어능력이 있습니다. 또, 작업을 쉽게 전환하며 병렬성이 아닌 동시성을 지원하며 실시간 컨텍스트를 가능하게 하며, 세마포어, 뮤텍스같은 기본적인 동기화 작업도 불필요합니다. 비동기 코드이지만 동기코드처럼 보입니다..

📘 Backend/Kotlin2023. 5. 23. 10:11이미지 압축 & 회전 & 변환

이미지 압축 & 회전 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..

📘 Backend/Kotlin2023. 5. 22. 12:00Coroutine - Suspend Fun

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의 남은 작업..

📘 Backend/Kotlin2023. 5. 20. 18:54Kotlin - 구조 분해

💡 구조 분해 (destructuring declaration) 변수 선언에서 괄호를 사용하는 것은 Kotlin의 구조 분해 선언(destructuring declaration)을 나타냅니다. 구조 분해 선언은 복합적인 데이터 구조에서 각 요소를 개별 변수로 분해할 수 있는 기능을 제공합니다. 예를 들어, val (id, name, age, team) = queryFactory.selectFrom(m).fetchFirst()의 경우 queryFactory.selectFrom(m).fetchFirst()의 결과로 반환된 튜플이나 다른 구조화된 데이터 유형에서 각각의 값을 id, name, age, team 변수에 할당합니다. 즉, fetchFirst()가 반환하는 데이터는 예를 들어 다음과 같은 형태로 구..

📘 Backend/Kotlin2023. 5. 18. 19:45Kotest - Basic

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..

📘 Backend/Kotlin2023. 4. 30. 23:21Coroutine - Basic

💡 Coroutine 코틀린에서 코루틴은 비동기 프로그래밍에 유용한 기능입니다. 코루틴을 사용하면 비동기 처리를 할 때 콜백 함수를 작성하지 않아도 되며, 코드의 가독성과 유지보수성도 높아집니다. 코루틴을 사용하기 위해서는 다음과 같은 과정이 필요합니다. 코루틴 라이브러리 추가하기 코루틴을 사용하기 위해서는 코루틴 라이브러리를 추가해야 합니다. 코루틴 라이브러리는 코틀린 표준 라이브러리의 일부이므로 별도의 설치나 설정이 필요하지 않습니다. 따라서, 프로젝트의 build.gradle 파일에 다음과 같이 의존성을 추가합니다. dependencies { implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2' } 코루틴 스코프 생..

📘 Backend/Kotlin2023. 4. 30. 14:49(Buffered)InputStream & OutputStream Class

💡 (Buffered) InputStream & OutputStream InputStream과 OutputStream 클래스는 바이트 단위로 데이터를 읽고 쓰는 기본적인 입출력 클래스입니다. 이 클래스를 활용하여 파일 입출력 뿐만 아니라 네트워크 상에서도 데이터를 주고받을 수 있습니다. InputStream과 OutputStream 클래스의 주요 메서드와 사용법을 예시와 함께 알아보겠습니다. InputStream 클래스 read(): 1바이트씩 데이터를 읽어옵니다. 반환값은 읽은 데이터의 바이트 값입니다. 더 이상 읽을 데이터가 없을 경우 -1을 반환합니다. read(b: ByteArray): 지정한 바이트 배열에 데이터를 읽어옵니다. 읽은 바이트 수를 반환합니다. read(b: ByteArray, of..

image