Kotlin/Kotlin
-
Kotlin takeIf와 takeUnless 함수Kotlin/Kotlin 2024. 3. 13. 00:01
개요 Kotlin에서 takeIf()와 takeUnless() 함수를 제공한다는 사실을 알게 되었고, 해당 함수들에 대해서 알아보고자 합니다. takeIf 함수 public inline fun T.takeIf(predicate: (T) -> Boolean): T? { contract { callsInPlace(predicate, InvocationKind.EXACTLY_ONCE) } return if (predicate(this)) this else null } takeIf 함수는 T (어떤 객체)의 확장함수입니다. predicate를 인자로 받아서 조건에 만족하는경우 자기 자신을 반환하거나 null을 반환합니다. takeUnless 함수 public inline fun T.takeUnless(predi..
-
Kotlin fold, reduce 메서드Kotlin/Kotlin 2024. 3. 10. 00:01
Reduce 메서드 public inline fun Iterable.reduce(operation: (acc: S, T) -> S): S { val iterator = this.iterator() if (!iterator.hasNext()) throw UnsupportedOperationException("Empty collection can't be reduced.") var accumulator: S = iterator.next() while (iterator.hasNext()) { accumulator = operation(accumulator, iterator.next()) } return accumulator } reduce 메서드의 경우 Iterable의 확장함수입니다. 초기값은 컬렉션의 첫 ..
-
Kotlin associateBy, groupBy 함수Kotlin/Kotlin 2024. 3. 9. 00:01
개요 Kotlin의 Collection을 다루는 방법 중 associateBy 함수와 groupBy 함수에 대해서 알아보고자 합니다. associateBy와 groupBy 함수 둘의 공통점은 collection의 특정한 키로 map을 만들어냅니다. 키는 KeySelector 매개변수에 정의되고 valueSelector는 키의 값에 어떤 내용을 저장할지를 정의합니다. associateBy와 groupBy 함수의 차이점 associateBy 함수는 key가 동일할 때 마지막으로 등장한 값을 덮어씌워서 사용하며 groupBy는 key가 동일하더라도 list로 모든 값을 다룰 수 있습니다. associateBy 내부구현 //key값만 받음 public inline fun Iterable.associateBy(k..
-
kotlin interface default methodKotlin/Kotlin 2024. 3. 5. 00:01
개요 Java8부터는 interface의 default method를 지원하지만 kotlin에서는 어떻게 활용해 볼 수 있을지에 대해 알아보고자 합니다. 문제 상황 No property betweenOsVer found for type ${EntityName} JPA를 활용하기 위해서는 interface를 정의하지만 해당 interface 내부에 기본 구현을 적용하고 싶어 default method를 활용하였습니다. default method를 활용하면 spring-data-jpa가 메서드의 이름을 기반으로 쿼리를 만들어주지 않기 때문에 하지만 kotlin에서는 deafult method를 기본적으로 지원하지 않아 메서드 이름을 기반으로 쿼리를 만들어주려다가 약속된 네이밍이 아니기 때문에 위와 같은 에러..
-
kotlin delegated propertiesKotlin/Kotlin 2024. 3. 1. 00:01
개요 class Example { var p: String by Delegate() } kotlin을 활용하다 보면 by 키워드등이 활용되는 예시를 만난 적들이 있으며 해당 문법을 잘 모르는 상황에서 당황스러운 경험들이 있습니다. kotlin delegated property에 대해 이해하기 위해 글을 작성해보가 합니다. Delegated Properties란? delegated는 "위임된" 이라는 뜻을 가집니다. 즉 프로퍼티의 속성을 미리 정의된 다른 속성에게 위임한다는 의미를 가집니다. Kotlin에서는 by 키워드를 활용하여 프로퍼티의 위임을 수행할 수 있습니다. Interface의 구현체를 다른 객체에게 위임할 수 있고, Property의 Accessor 구현을 다른 객체의 위임할 수도 있습니다...
-
Kotlin 제네릭에 대해 알아보기Kotlin/Kotlin 2024. 2. 29. 00:01
개요 Java의 제네릭, Kotlin의 제네릭 등에 대해 학습하였고 포스팅도 여러 차례 썼지만 아직도 제네릭에 대한 이해도가 부족하다고 느낍니다. 이번기회에 확실하게 제네릭의 타입 변환에 대해 이해해보고자 합니다. 제네릭 사용하는 이유 예를들어 String을 담고 싶은 Box, Int를 담고 싶은 Box 클래스를 만들기 위해서는 어떻게 해야 할까요? @Test fun `다양한 타입을 구현하기 위한 방법-v1`(){ IntBox(3) StringBox("Hello Generic") } data class IntBox( val value: Int, ) data class StringBox( val value: String, ) IntBox, StirngBox 클래스를 만들면 됩니다! 이제 이외의 여러 가지 ..
-
kotlin operator fun invokeKotlin/Kotlin 2024. 2. 19. 00:01
개요 kotlin의 operator 중 invoke라는 연산자를 알게 되어 알아보고자 합니다. invoke 연산자란? object MyFunction{ operator fun invoke(str: String): String{ return str.lowercase() //소문자로 바꿔줌 } } operator fun invoke를 활용하여 invoke 연산자를 정의할 수 있습니다. MyFunction Object는 문자를 받아 소문자로 변환해주는 역할을 수행합니다. 다음과 같이 호출해볼 수 있습니다. val upperCaseString = "HELLO WORLD" println(MyFunction.invoke(upperCaseString)) //hello world invoke의 특성상 메서드 이름을 생..
-
Kotlin Synchonized와 MultiThreadKotlin/Kotlin 2023. 11. 22. 00:01
Synchonized란? thread-safe를 위해 Java에서는 synchonized 키워드를 활용하여 data의 안정성과 신뢰성을 보장합니다. kotlin에서는 어떻게 할 수 있을지 알아보겠습니다. SynchonizedCounter 구현 class SynchronizedCounter { private var count = 0 fun increaseCount(){ count++ } fun getCurrentCount(): Int{ return count } } increaseCount를 호출하여 count를 증가시키는 클래스입니다. MultiThread Test @Test fun `kotlin Synchronized 테스트해보기`(){ val counter = SynchronizedCounter() ..