본문 바로가기
반응형

Kotlin
반응형
11

[Kotest] 클래스 프로퍼티 Value NULL 여부 한번에 검증하기 많은 개발자분들이 실무 및 개인 프로젝트 개발 시에 Test 파일을 작성한다. 내부 로직 검증 그리고 통합 테스트 검증등 여러가지 이유가 있겠지만 나 같은 경우 json 데이터를 내가 원하는 Object로 변환시에 그 값이 잘 매핑 되어 있는지 확인하고 싶을 때가 있다. 하지만, Kotest에서는 내부 필드값 검증과 shouldBeSameInstanceAs, shouldBeEqualToComparingFields와 같은 메소드들은 단순히 클래스 인스턴스의 동일 여부만 판단할 수 있었다. 이에 클래스 프로퍼티 Value NULL 여부 한번에 검증할 수 있는 메소드를 구현하고자 했다. 카프카 데이터 컨슈밍 -> 데이터 클래스 매핑 -> 추가 필드값에 대한 매핑 로직 place.json // place.jso.. 2023. 11. 25.
[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.
[WebFlux] WebFlux Kotlin MapStruct 적용 entity(document) -> DTO 로 변환시 mapStruct를 자주 활용한다. WebFlux kotlin 환경에서는 다음과 같은 설정으로 활용할 수 있다. // build.gradle.kts implementation("org.mapstruct:mapstruct:1.5.0.RC1") kapt("org.mapstruct:mapstruct-processor:1.5.0.RC1") plugins { ... kotlin("kapt") version "1.6.21" ... } mapper 인터페이스에서 toBaseDto 함수를 선언하였다 . BaseDocument -> BaseDTO로 변경할 것이다. // Mapper 인터페이스 import reactor.core.publisher.Flux @Mapper.. 2022. 5. 10.
[Spring] SpringBoot + WebFlux + Kotlin + ReactiveMongo 프로젝트 생성 실무 개발 및 서비스를 제공함에 있어 서버에 많은 요청이 있을 경우 Tread Pool 과 Timeout 등 Spring Web의 설정을 각 상황마다 수정하곤 하였다. 이에 Spring 5부터 등장한 Reactvie 스타일 모듈인 Webflux에 대해 관심이 생기기 시작하였고 간단한 Sample Case 맛보기 정도로 진행해보려한다. 앞으로 이 토이 프로젝트에 관심 있는 여러가지 모듈 및 프로토콜 들을 더해 갈 예정이다. Project SDK로는 amazon에서 제공하는 corretto-11을 사용하였다. corretto는 OpenJDK로 Java SE 표준과 호환된다. 또한 Dependencies는 다음과 같이 설정하였다. Webflux를 MVC 모듈로 비교하자면 MVC : Controller - Se.. 2022. 5. 1.
[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.