Kotlin
-
Kotlin Value Class란?Kotlin 2023. 9. 1. 00:01
개요 코틀린에서는 VO(Value Object)를 어떻게 만드는지 알아보다가 Value Class에 대해 알게 되었습니다. VO란 특정한 비즈니스값을 담는 객체라고 합니다. Kotlin 1.5에 출시된 기능입니다. Kotlin의 Value Class란? 비즈니스 로직에서 특정 type에 대한 wrapper class를 생성해야 하는 경우가 있을 수 있습니다. 하지만 추가적인 heap alloation으로 런타임이 오버헤드가 발생하게 됩니다. 특히 래핑 된 타입이 원시타입(primitive type)인 경우에는 런타임에 크게 최적화되는데 이런 장점을 누리지 못합니다. 이런 문제를 해결하기 위해 kotlin에서는 inline class를 소개합니다. value class Password(private val..
-
[Kotlin] 상태패턴으로 배송상태를 변경해보자Kotlin/Kotlin 2023. 8. 29. 00:01
Github시작전에 모든 코드는 github에서 확인할 수 있습니다.https://github.com/Junuu/spring-study/tree/main/delivery-state-pattern 상태패턴을 알아보기 전 배송상태부터 정의5개의 배송상태를 정의해 보았습니다.위의 코드를 구현한다면 각 상태를 전이하기 전에 유효성 체크등을 잘 수행해주어야 합니다. 다음과 같이 pseudo 코드를 작성해 볼 수 있습니다.if(state == '준비'){ if(currentState == '관리자 확인전 대기') { //준비로 상태 변경 } else{ //변경할 수 없는 상태 Exception 또는 아무것도 하지 않음 }} 예를 들어 상태가 20~30가지라면? 변경해야 할..
-
Coroutines이란?Kotlin/코루틴 2023. 6. 20. 00:01
개요 Kotlin을 사용하며 Coroutines를 사용하여 여러 동시처리를 하기 위해 공부해보고자 합니다. Coroutine이란? 코투린은 루틴의 일종이며, Co는 with 또는 together를 뜻합니다. Routine이란 하나의 task 또는 함수로 생각하면 됩니다. 이름만 보았을때는 코틀린에서 만들어진 개념같지만 코틀린의 것만이 아니며 여러 언어에서 지원하고 있는 개념입니다. 예를 들어 javascript의 async await를 사용한 경험이 있다면 이미 코루틴을 사용해 본 경험이 있는 것입니다. 코루틴은 실행을 일시 중단했다가 다시 시작할 수 있는 컴퓨터 프로그램 구성 요소로, 협력적 멀티태스킹을 위한 서브루틴을 일반화합니다. 코루틴은 협동 작업, 예외, 이벤트 루프, 반복자, 무한 목록 및 파..
-
Mapstrcut 변환시 함수 호출하기Kotlin 2023. 5. 22. 00:01
개요 Mapstruct를 사용하여 SignUpRequest -> SignUpUser로 변환 시 userId 부분에 IDGenerator 함수를 호출하여 변환하고자 합니다. SignUpRequest data class SignUpRequest( @get:JsonProperty("userName", required = true) val userName: kotlin.String, @field:Valid @get:JsonProperty("mobileCarrier", required = true) val mobileCarrier: MobileCarrierType, @get:Pattern(regexp="^[\\d]*$") @get:Size(min=11,max=11) @get:JsonProperty("mobileN..
-
Kotlin으로 Jwt 개발하기Kotlin 2023. 5. 14. 00:01
개요 이전에 Java를 통해 jjwt0.9.1 라이브러리로 jwt를 구현했던 내용이 담겨있으며, jwt에 대한 기본적인 개념들이 정리되어 있는 글입니다. https://junuuu.tistory.com/307 JWT란? JWT 원리, 사용법 JWT란? JWT란 Json Web Token의 약자로써 Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token입니다. Claim이란 사용자 정보나 데이터 속성 등을 의미합니다. 즉, Claim 토큰이라 하면 junuuu.tistory.com 하지만 Kotlin을 기준으로 작성해보고자 했을 때 다음과 같은 에러가 발생했습니다. java.lang.UnsupportedOperationException at java.base/java.u..
-
52장 - mutable 컬렉션 사용을 고려하라Kotlin/Effective Kotlin 요약 2023. 4. 16. 00:01
불변 컬렉션과 가변 컬렉션의 성능 가변 컬렉션이 성능적인 측면에서 조금 더 빠릅니다. 불변 컬렉션에 요소를 추가하는 것이 이해 안 될 수 있지만 요소를 추가하려면 새로운 컬렉션을 만들어서 요소를 추가해야 합니다. 컬렉션을 복제하는 것은 비용이 많이 듭니다. 안정성 하지만 아이템1에서 이야기했듯이 불변 컬렉션을 사용하게 되면 동기화와 캡슐화 측면에서 안전합니다. 결론 지역변수를 사용할 때는 가변 컬렉션을 사용하는 것이 더 합리적입니다. 표준 라이브러리도 내부적인 처리를 수행할 때는 가변 컬렉션을 사용하도록 구현되어 있습니다.
-
51장 - 성능이 중요한 부분에는 기본 자료형 배열을 사용하라Kotlin/Effective Kotlin 요약 2023. 4. 15. 00:01
기본자료형 배열과 컬렉션 List, Set 등의 컬렉션은 제네릭 타입입니다. 제네렉 타입에서는 기본 자료형을 사용할 수 없어 랩핑된 타입을 사용해야 합니다. 하지만 성능이 중요한 코드라면 IntArray와 LongArray 등의 기본 자료형을 활용하는 배열을 사용하는 것이 좋습니다. 보통 라이브러리 개발자, 게임 개발자, 고급 그래픽을 처리해야 하는 개발자들에게 도움이 됩니다. 성능의 차이(IntArray vs List) 1,000,000개(백만)의 정수를 갖는 컬렉션을 만든다고 가정하겠습니다. 단순하게 할당되는 영역(5배 차이) IntArray 400,000,016바이트 List 2,000,006,944바이트 성능(25% 차이) 단순하게 평균을 구하는 처리를 수행하면 기본 자료형 배열이 25% 정도 더..
-
50장 - 컬렉션 처리 단계 수를 제한하라Kotlin/Effective Kotlin 요약 2023. 4. 14. 00:01
컬렉션의 비용 모든 컬렉션 처리 메서드는 비용이 많이 듭니다. 내부적으로 요소들을 활용해 반복을 돌며, 추가적인 컬렉션을 만들어 사용하기도 합니다. 시퀀스도 시퀀스 전체를 랩 하는 객체가 만들어지며, 조작을 위해 또 다른 추가적인 객체를 만들어냅니다. 컬렉션의 처리의 단계 수 컬렉션과 시퀀스의 처리 수가 많다면 꽤 큰 비용이 들어갑니다. 어떤 메서드를 사용하는지에 따라서 컬렉션 처리의 단계 수가 달라집니다. 따라서 적절한 메서드를 활용해서 컬렉션 처리 단계 수를 적절하게 제한하는 것이 좋습니다. 이 코드보다는 이 코드가 좋습니다. .filter { it != null } .map { it } .filterNotNull() .map { Transformation } .filterNotNull() .mapN..