Kotlin
-
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..
-
도메인 모델에 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을 지정해서 다중 기준을 둘 수 있다는 점이다.
-
[Kotlin] const와 val의 차이📖 개발 공부/kotlin 2023. 4. 1. 11:20
언제든 값을 바꿀 수 있는 var과 초기화하면 값을 바꿀 수 없는 val의 2가지 선언 방법이 존재한다. 또한 상수를 선언할 수 있는 const val 라는 선언이 존재한다. 그렇다면 값을 바꿀 수 없는 val 와 상수를 선언하는 const val 의 차이점은 무엇일까? 바로 "불변성"에 관련한 차이점이다. val 은 값이 런타임 시에 결정되는 상수인데, 이는 독립적인 동일한 프로그램 수행 중에 프로그램 수행에 따라 값이 바뀔 수 있음을 의미한다. 예를 들어 두 숫자를 더한 값을 반환하는 함수를 사용해서 val 값을 정한다고 했을 때, 이 값은 함수의 parameter로 들어가는 숫자에 따라 언제든지 달라질 수 있다. 때문에 val 값은 불완전한 불변성을 가지고 있는 것이다. const val 은 값이 ..