본문 바로가기
반응형

개발 지식/Kotlin
반응형
11

[Kotest] 클래스 프로퍼티 Value NULL 여부 한번에 검증하기 많은 개발자분들이 실무 및 개인 프로젝트 개발 시에 Test 파일을 작성한다. 내부 로직 검증 그리고 통합 테스트 검증등 여러가지 이유가 있겠지만 나 같은 경우 json 데이터를 내가 원하는 Object로 변환시에 그 값이 잘 매핑 되어 있는지 확인하고 싶을 때가 있다. 하지만, Kotest에서는 내부 필드값 검증과 shouldBeSameInstanceAs, shouldBeEqualToComparingFields와 같은 메소드들은 단순히 클래스 인스턴스의 동일 여부만 판단할 수 있었다. 이에 클래스 프로퍼티 Value NULL 여부 한번에 검증할 수 있는 메소드를 구현하고자 했다. 카프카 데이터 컨슈밍 -> 데이터 클래스 매핑 -> 추가 필드값에 대한 매핑 로직 place.json // place.jso.. 2023. 11. 25.
[Coroutine] 코루틴 빌더 간단 정리 runBlocking -> 코루틴을 생성하는 코루틴 빌더 runBlocking으로 감싸진 코드는 수행이 끝날 때까지 해당 쓰레드가 Blocking된다. (main쓰레드는 아니다!) 비동기로 동작하는 것이 아니라서 자주 쓰이진 않는다. 꼭 사용해야 하는 경우 라이브러리 또는 프레임워크에서 코루틴을 지원하지 않을 때 launch -> 쓰레드 차단 없이 새 코루틴을 생성하고 결과를 job이라는 객체로 반환, 비동기로 동작한다. job은 lauch 내 상태를 확인하거나 시작 취소 시킬 수 있다 Ex. job.start(), job.cancel()을 통해 해당 비동기 로직을 제어할 수 있다. lauch는 동작을 뒤로 미룰 수 있다. launch(start=CoroutineStart.LAZY) { } -> 실행하는.. 2023. 1. 12.
[Mapstruct] Protobuf repeated와 Kotlin List 매핑이 되지 않는 문제 개발하면서 약 일주일간의 삽질을 통해 해결했던 경험을 쓰려고 한다. 결론부터 이야기하자면 protobuf repeated와 코틀린 프로퍼티 또는 자바 객체간 변환을 mapstruct로는 완벽히 커버할 수 없으며 추가 라이브러리(https://github.com/entur/mapstruct-spi-protobuf)를 설정해야 한다. 최초 문제: protobuf와 kotlin 객체변환을 위해 mapstruct를 활용하고자 하였다. (보일러플레이트 코드를 지양하기 위해서) 그래서 다음과 같은 proto, kt를 작성하였다. base.proto message BaseResponse { string query = 1; int32 page_number = 2; int32 result_per_page = 3; str.. 2023. 1. 9.
[Coroutine] Composing Suspending Functions 이번에는 suspending 함수의 구성에 대해 정리하고자 한다. 1) 비동기함수의 순차적 실행 fun main() = runBlocking { val time = measureTimeMillis { val one = doSomethingUsefulOne() val two = doSomethingUsefulTwo() println("The answer is ${one + two}") } println("Completed in $time ms") } suspend fun doSomethingUsefulOne() : Int { println("doSomethingUsefulOne") delay(2000L) // 뭐 어떤 DB 호출이나 외부 통신에 걸리는 로직이 들어갈 것이다. return 13 } suspe.. 2022. 9. 2.
[Coroutine] Coroutine Cancellation And Timeout 지난번 장에서는 코루틴은 Builder로 생성해보는 것까지 진행하였다. 이번장에서는 코루틴 종료하는 2가지 방법 1) Cacellation 2) Timeout 에 대해 정리해보고자 한다. Cacellation 즉 코루틴이 종료 되기 위해서는 다음과 같은 세가지 조건을 만족해야 한다. 코루틴이 취소 되기 위해서는 다음과 같이 협조적이어야 한다. 코루틴 코드가 cancellable 해야 한다 suspend 함수는 취소 가능하다 이에 다음과 같은 예시를 코드로 작성해보고 테스트 해보자. join 객체의 cacel 함수 호출 join 객체의 cacel 함수 호출, But suspend 함수가 없다면? suspend 함수가 아닌 상태체크로 Cancel finally로 코루틴 종료 NonCancellable로 종.. 2022. 8. 29.
[Coroutine] CoroutineBasic 인프런에 코루틴을 검색해보니 다음과 같은 강좌가 있어 공부겸해서 블로그에 정리해보려고 한다. https://www.youtube.com/c/%EC%83%88%EC%B0%A8%EC%9B%90 새차원 새차원의 코틀린 강좌 입니다. http://blog.naver.com/cenodim www.youtube.com 1. 코루틴 (Co+ routine) 으로 루틴의 일종이다. (안드로이드 앱 개발은 kotlin으로 진행되는데 안드로이드 앱 쓰레드 개념을 보면 UI Thread가 메인 쓰레드이며 이 쓰레드 외에는 UI를 제어 할 수 없다. UI Thread 외 다른 기능이 동시에 필요하다면 AsynTask를 이용하거나(Deprecated 된 것으로 알고 있음) Sub Thread 또는 Handler를 활용하여 이 .. 2022. 8. 23.
[Kotlin] Kotlin 기초 - 05 (문자열) 이번장 에서는 문자열과 객체의 동일성에 대해 정리 해보고자 한다. length : 문자열 길이 수 lowerCase() : 소문자 변환 upperCaste() : 대문자 변환 var test = "Er.Ms.Kotlin.String" pritnln(test.length) println(test.lowerCase()) println(test.upperCase()) // 결과 // 19 // er.ms.kotlin.string // ER.MS.KOTLIN.STRING split (String args) : args 기준으로 나누기 joinToString() : String 리스트의 합 joinToString(String args) : args로 String list를 합 substring(beginInde.. 2022. 8. 21.
[Kotlin] Kotlin 기초 - 04 (스코프 함수) 스코프 함수 함수형 언어의 특징을 좀 더 편리하게 사용할 수 있도록 기본 제공하는 함수이다. 인스턴스를 스코프 함수 내에서 활용하게 되면 인스턴스 내의 속성이나 함수를 깔끔하게 쓸 수 있다. (Framework와 유사기능) 스코프 함수에는 apply run with also let .... 과 같이 다양한 함수가 있다. 예시 코드로 하나씩 살펴보자. 1) apply : 인스턴스를 생성 한 후 변수에 담기 전 초기화 과정을 수행할 때 많이 쓰인다. 보통 코틀린에서 클래스 및 클래스 객체 및 함수를 활용할 경우에는 다음과 같이 쓰인다. public inline fun T.apply(block: T.() -> Unit): T { contract { callsInPlace(block, InvocationKin.. 2022. 7. 17.
[Kotlin] Kotlin 기초 - 03 (스코프 /고차 람다 함수) 2022.04.27 - [개발 지식/Kotlin] - [Kotlin] Kotlin 기초 - 02 [Kotlin] Kotlin 기초 - 02 2022.04.24 - [개발 지식/Kotlin] - [Kotlin] Kotlin 기초 -01 [Kotlin] Kotlin 기초 -01 1. 변수 선언 : var , val - var : 선언 후 수정 가능 - val: 선언 후 수정 불가능 (Java에서 final과 같은 역할을 한다.).. erjuer.tistory.com 1. 코틀린의 프로젝트 구조 1) 코틀린은 클래스명과 파일명이 일치하지 않아도 된다. 2) 하나의 파일에 여러개의 클래스를 넣어도 알아서 컴파일이 가능하다. 파일이나 폴더를 기준으로 하지않고 파일내에 있는 패키지 단위로 구분하기 때문이다. 2. .. 2022. 5. 16.
[Kotlin] Kotlin 기초 - 02 (클래스/인터페이스) 2022.04.24 - [개발 지식/Kotlin] - [Kotlin] Kotlin 기초 -01 [Kotlin] Kotlin 기초 -01 1. 변수 선언 : var , val - var : 선언 후 수정 가능 - val: 선언 후 수정 불가능 (Java에서 final과 같은 역할을 한다.) 또한 변수타입을 지정 할 수 있다. // null인 값으로 선언 var c: Int? = null var intV.. erjuer.tistory.com 08. Class, Method Kotlin 기초 - 01 에서 class 관련하여 class 작성 및 생성자 생성까지 정리했다면 이번에는 상속 관련하여 적어보려고 한다. 08 - 1. 상속 자바 언어의 특징 중 하나인 상속은 코틀린에서도 그대로 적용 가능하다. 상속은 .. 2022. 4. 27.
[Kotlin] Kotlin 기초 -01 1. 변수 선언 : var , val - var : 선언 후 수정 가능 - val: 선언 후 수정 불가능 (Java에서 final과 같은 역할을 한다.) 또한 변수타입을 지정 할 수 있다. // null인 값으로 선언 var c: Int? = null var intValue: Int = 1234// Int var LongValue: Long = 1234L// Long var intValueByHex: Int = 0x1af // 16진수 //UTF-16 BE 인코딩 관리하므로 한글자당 2bytes var charValue: Char = 'a'// char var booleanExp: Boolean = true// Boolean var introduceStr: String = "블로그에 오신 여러분 환영합니.. 2022. 4. 24.