📖 개발 공부/kotlin
-
테스트 코드 개선하기: Kotest 모킹 초기화 및 구조 개선📖 개발 공부/kotlin 2024. 10. 27. 16:37
이번 개선의 목표는 테스트 코드의 가시성과 효율성을 높이는 데 있다.여러 케이스에서 원하는 동작을 정확히 호출하고 의도한 타입의 응답을 반환하는지 확인했지만, 기존 코드에서는 불필요한 모킹이 많아 가독성이 떨어졌다. 이에 개선한 사항과 과정에서 새롭게 알게 된 내용을 정리해보려고 한다.AS-IS기존 코드에서는 다음 세 가지 케이스를 나누어 테스트를 진행했다.LLM 최소 조건을 충족하고 LLM 응답이 성공하는 경우LLM을 호출하며, 결과로 ContentResultByLLM을 반환해야 한다.LLM 최소 조건을 충족하지만 LLM 응답이 실패하는 경우LLM 호출 후 실패 시, ContentResultByRuleBased를 반환해아 한다.LLM 최소 조건을 충족하지 않는 경우LLM을 호출하지 않고, Content..
-
Kotlin의 Value Class로 성능 최적화하기 (Codes like a class, works like an int.)📖 개발 공부/kotlin 2024. 10. 7. 22:21
코틀린, 저는 이렇게 쓰고 있습니다 | 카카오페이 기술 블로그코틀린으로 서비스를 개발하며 직접 경험한 코틀린의 매력을 소개합니다.tech.kakaopay.com위 글을 통해 value class를 처음 접하게 되었다. 더 깊이 이해하고 정리하기 위해 이번 글에서 value class에 대해 자세히 다뤄보려고 한다.Value Class란?Kotlin의 value class는 코틀린에서 값을 나타내기 위한 wrapper 클래스이다. 이는 primitive 타입의 값을 객체와 같이 다룰 수 있게 해주면서도, wrapper 클래스의 오버헤드 문제를 해결할 수 있다. 기존의 클래스와 Value Class의 차이점기존에 Kotlin에서는 데이터 처리를 위해 Data Class를 주로 사용했다. Data Class는..
-
Spring AOP를 Kotlin으로 개선해보기! (feat. 카카오페이 테크블로그)📖 개발 공부/kotlin 2024. 3. 17. 12:56
이번 글에서는 Spring AOP의 아쉬운 점과 함께 Kotlin의 Trailing Lambda 문법을 통해 개선하는 방법을 알아보려고 한다!카카오페이 테크블로그의 "Kotlin으로 Spring AOP 극복하기!" 글을 보고 해결한 내용이다. AOP 간단 설명AOP는 관점 지향 프로그래밍(Aspected Oriented Programming)으로 로깅, 트랜잭션과 같은 공통으로 실행되어야하는 부분을 비즈니스 로직에서 떼어내어 모듈화하여 재사용하는 것을 의미한다.AOP를 사용하여 비즈니스 로직을 작성하는 데에 집중할 수 있게 해준다. 이때 트랜잭션 로직과 같이 삽입되는 로직을 Advice, 그리고 로직이 삽입될 함수를 JoinPoint라고 정의한다. Spring AOP 아쉬운 점 살펴보기나는 Spri..
-
Kotest 예제와 함께 테스트 코드 살펴보기📖 개발 공부/kotlin 2024. 2. 4. 16:09
테스트 코드를 작성하는 이유 나는 크게 세가지 이유로 테스트 코드를 작성한다. 내가 개발한 기능들이 제대로 잘 동작하는지 확인하기 위함. 코드에 변경이 생겼을 때, 기존 기능에 영향을 주는지 여부를 확인하기 위함. 이를 통해 예상하지 못한 버그 발생을 사전에 찾아내고, 배포 시의 불안함을 줄일 수 있다. 테스트 코드를 통해 실제 코드의 작동 방식을 더 빠르게 이해시키기 위함. 정적인 문서는 쉽게 방치될 수 있다. (유경험자..) 따라서 테스트 코드는 변경된 기능들을 최신화할 수 밖에 없는! 유일(?)한 방법이라고 생각한다. 또한 문서라고 하믄, 가독성이 충분히 있어야 한다. 가독성 있는 테스트 코드는 정말 도움되는 문서라고 할 수 있다. 테스트 코드 용어 살펴보기 sut System Under Test ..
-
도메인 모델에 kotlin의 data class가 적합할까?📖 개발 공부/kotlin 2023. 12. 10. 12:00
회사 프로젝트에서 비즈니스 로직이 담긴 도메인 모델을 만들 때 kotlin의 data class를 사용하고 있다. 언제 class를 사용하고, 또 언제 data class를 사용하는 게 적합한지 제대로 숙지하지 못하고 무분별하게 쓰고 있는 것 같아 이번 기회에 공부해보려고 한다! 코틀린의 공식 문서를 보자 👀 Data classes in Kotlin are classes whose main purpose is to hold data. 데이터 클래스(Data class)는 데이터 보관 목적으로 만든 클래스를 말한다. 데이터 보관을 목적으로 만들었다라.. 뭔가 DTO의 역할을 말해주고 있는 것 같다. (데이터 전달) 도메인 모델은 데이터 보관 역할을 넘어서 비즈니스 로직을 구현하고 도메인의 행위를 정의하는 ..
-
[Kotlin] @Synchronized 어노테이션 동작 방식📖 개발 공부/kotlin 2023. 8. 3. 00:50
한줄요약: @Synchronized 어노테이션은 AOP와 관련된 게 아니라 synchronized JVM 메서드임을 알려주는 역할을 한다! 동시성 이슈 강의 스터디를 할 때 나는 코틀린으로 변환해서 코드를 작성하였다. 재고시스템으로 알아보는 동시성이슈 해결방법 인프런 재고시스템으로 알아보는 동시성이슈 해결방법 강의를 보면서 정리한 내용입니다. 재고시스템으로 알아보는 동시성이슈 해결방법 - 인프런 | 강의 동시성 이슈란 무엇인지 알아보고 처 ayoung0073.tistory.com 이때 synchronized 키워드를 쓸 수 없어 같은 동작을 하는 @Synchronized 어노테이션을 붙였다. 그리고 스터디 발표가 당청되어 내가 작성한 코드를 보며 발표를 하던 중..! 스터디를 같이 하는 팀원이 물었다. ..
-
[Kotlin] toBoolean(), toBooleanStrict()📖 개발 공부/kotlin 2023. 7. 26. 22:35
한줄 요약 문자열이 "true", "false"인 경우에만 Boolean 타입을 반환하고, 나머지는 예외 던지는 걸 기대한다면, toBoolean()이 아니라 toBooleanStrict() 을 사용하자. 코틀린에서 문자열(String)은 타입 변환을 해주는 확장 함수를 제공한다. toByte() toShort() toInt() toLong() toFloat() toDouble() toBoolean() 테스트 코드를 짜다가 생각치 못한 부분에서 버그를 발견했다. “random”.toBoolean() 은 어떤 값을 반환할거라 예상하는가? 한번 생각해보자. 나는 당연히 IllegalArgumentException 예외가 던져질 줄 알았다. 하지만 예상과 다르게, false 를 반환하는 것을 알 수 있다. f..
-
[Kotlin] sortedBy와 sortedWith의 차이점📖 개발 공부/kotlin 2023. 4. 9. 23:23
sortedBy sortBy는 원본 리스트를 바꾸고, sortedBy는 원본 리스트를 바꾸지 않고 소팅된 리스트를 리턴한다. selector을 지정하면 소팅 기준을 정할 수 있다. strings.sortedBy { it } 페어를 사용할때도 하나의 기준을 두고 정렬하고 싶을 때 사용하면 된다. pair에 접근할 때는 it.first, it.second로 접근하면 된다. 내림차순으로 정렬할 땐 sortedByDescending()을 사용하면 된다. sortedWith 역시 원본 리스트를 바꾸지 않고 소팅된 리스트를 리턴한다. sortedBy()와 다른 점 은 comparator을 지정해서 다중 기준을 둘 수 있다는 점이다.