songining
Kotlin ์œ„์ž„ ํ”„๋กœํผํ‹ฐ Observable
Language/Kotlin 2023. 9. 5. 21:20

์ฝ”ํ‹€๋ฆฐ์€ ํ”„๋กœํผํ‹ฐ ์œ„์ž„ ์ด๋ผ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ํ”„๋กœํผํ‹ฐ ์œ„์ž„์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ ํ”„๋กœํผํ‹ฐ์˜ ํ–‰์œ„๋ฅผ ์ถ”์ถœํ•ด์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. Observable ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ ๋ณ€๊ฒฝ์„ ๊ฐ์ง€ํ•˜์—ฌ callback์œผ๋กœ ์›ํ•˜๋Š” ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. Delegates.observable ํ•จ์ˆ˜๋ฅผ ๋ณด๋ฉด 2๊ฐœ์˜ ์ธ์ž๋ฅผ ๋ฐ›์œผ๋ฉฐ ์ดˆ๊ธฐ๊ฐ’๊ณผ ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์ด ์žˆ์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜ (onChange) ๋กœ ์ด์šฐ๋Ÿฌ์ ธ์žˆ๋‹ค. public inline fun observable(initialValue: T, crossinline onChange: (property: KProperty, oldValue: T, newValue: T) -> Unit): ReadWriteProperty = object : ObservableProperty(i..

[Kotlin] associateBy, groupBy
Language/Kotlin 2023. 2. 21. 16:45

collections API ์ค‘ ํ•˜๋‚˜๋กœ ์ปฌ๋ ‰์…˜์„ Map ํ˜•ํƒœ๋กœ ๋ณ€ํ˜•์‹œ์ผœ์ฃผ๋Š” API ์ด๋‹ค. associateBy ํ•จ์ˆ˜์™€ groupBy ํ•จ์ˆ˜๋Š” ์ง€์ •๋œ key์— ์˜ํ•ด ์ธ๋ฑ์‹ฑ๋œ ์ปฌ๋ ‰์…˜์˜ ์›์†Œ๋กœ๋ถ€ํ„ฐ Map์„ ๋งŒ๋“ค์–ด์ค€๋‹ค. associateBy public inline fun Iterable.associateBy(keySelector: (T) -> K): Map { val capacity = mapCapacity(collectionSizeOrDefault(10)).coerceAtLeast(16) return associateByTo(LinkedHashMap(capacity), keySelector) } ๋งค๊ฐœ๋ณ€์ˆ˜์—๋Š” T๋ฅผ ์ „๋‹ฌํ•˜๊ณ  key๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๋žŒ๋‹คํ•จ์ˆ˜ keySelector๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์€ key..

Kotlin Coroutine Context, Coroutine Builder
Language/Kotlin 2022. 11. 1. 14:30

Coroutine Context ์ฝ”๋ฃจํ‹ด์€ ํ•ญ์ƒ Coroutine Context๋กœ ๊ตฌ์„ฑ๋œ ์ฝ˜ํ…์ŠคํŠธ ์•ˆ์—์„œ ์‹คํ–‰๋˜๋Š”๋ฐ, ์ด ์ฝ˜ํ…์ŠคํŠธ๋Š” Dispatchers์™€ Job์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. Dispatchers๋Š” ์ฝ”๋ฃจํ‹ด์ด ์‹คํ–‰๋  ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์ •ํ•˜๋Š” ์—ญํ•  Default : CPU์—์„œ ๋งŽ์€ ์—ฐ์‚ฐ์ด ํ•„์š”ํ•œ ์ฒ˜๋ฆฌ ๋™์‹œ์ž‘์—… ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋Š” CPU ์ฝ”์–ด ์ˆ˜์™€ ๊ฐ™๋‹ค. IO : ํŒŒ์ผ ์ž…์ถœ๋ ฅ, ๋„คํŠธ์›Œํฌ ์ฝœ ๋“ฑ ์˜ค๋ž˜ ๋Œ€๊ธฐํ•˜๋Š” ์ƒํ™ฉ์ผ ๋•Œ Blocking IO์šฉ ๊ณต์œ  ์Šค๋ ˆ๋“œํ’€์—์„œ ๋™์ž‘ Default์™€ ์Šค๋ ˆ๋“œ๋ฅผ ๊ณต์œ ํ•˜๋ฏ€๋กœ withContext์—์„œ Dispatcher ๋ณ€๊ฒฝ ์‹œ, ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ํ•˜์ง€ ์•Š๊ณ  ๋™์ผํ•œ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋จ Main: ์ฝ”๋ฃจํ‹ด์—์„œ ์ฒ˜๋ฆฌ๋œ ๊ฐ’์„ UI์— ๋ฐ˜์˜ํ•  ๋•Œ ๋ฉ”์ธ์Šค๋ ˆ๋“œ์—์„œ ๋™์ž‘ UnConfined ๋ฉ”์ธ์Šค๋ ˆ๋“œ์—์„œ ๋™์ž‘ C..

Kotlin inline fun, reified
Language/Kotlin 2022. 10. 28. 13:30

Reified ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ œ๋„ค๋ฆญ ํ•จ์ˆ˜์—์„œ Runtime์— ํƒ€์ž… ์ •๋ณด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋‹ค. (๋ณดํ†ต์€ ์ปดํŒŒ์ผ ์‹œ์—๋งŒ ํƒ€์ž…์„ ์•Œ ์ˆ˜ ์žˆ๊ณ  ๋Ÿฐํƒ€์ž„์—์„œ ํƒ€์ž… ์ •๋ณด๋Š” ์กด์žฌํ•˜์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.) ์ฆ‰, ๋Ÿฐํƒ€์ž„์‹œ์—๋„ ํƒ€์ž… ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ธ์Šคํ„ด์Šค๋ฅผ ์ฐพ๊ธฐ๊ฐ€ ์‰ฝ๋‹ค. reified ๋Š” inline fun๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ T ํƒ€์ž… ํด๋ž˜์Šค๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค. ์ถ”๊ฐ€์ ์œผ๋กœ T ํด๋ž˜์Šค๋ฅผ ๋„˜๊ฒจ์ค„ ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ์ ์ด ์ข‹์€ ๊ฒƒ ๊ฐ™๋‹ค. ๋‹ค์Œ์€ R2dbcEntityTemplate ์ฟผ๋ฆฌ ์‹คํ–‰์„ ์œ„ํ•œ ํ•จ์ˆ˜์ด๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ) private fun executeQuery(build: Select, entityClass: KClass): Flow = r2dbcEntityTemplate.query( QueryBuil..