λ°˜μ‘ν˜•

Kotlin 17

[Springboot] JPA와 pageable ν™œμš©ν•œ sort μ •λ ¬ κ΅¬ν˜„ 방법

Introμ•ˆλ…•ν•˜μ„Έμš”. 이번 μ‹œκ°„μ—λŠ” spring boot μ—μ„œ JPA와 pageable ν™œμš©ν•œ sort μ •λ ¬ κ΅¬ν˜„ 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. user 데이터가 μžˆλ‹€λŠ” κ°€μ •ν•˜μ— 진행해보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.  1. User μ—”ν‹°ν‹° μ •μ˜ User μ—”ν‹°ν‹°μ—λŠ” id, name, email, createdDate λ“±μ˜ ν•„λ“œκ°€ μžˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.@Entitydata class User( @Id @GeneratedValue(strategy = GenerationType.IDENTITY) val id: Long, val name: String, val email: String, @CreatedDate val createdDate: LocalDateTime) 2. UserReposit..

[Kotlin] μ½”ν‹€λ¦° Mono, Flux λž€?

Introμ•ˆλ…•ν•˜μ„Έμš”:) 이번 μ‹œκ°„μ—λŠ” μ½”ν‹€λ¦° Mono, Flux 에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. μš”μ¦˜ λ‹€μ‹œ 코틀린을 ν•˜κ³  μžˆλŠ”λ° κ·Έμƒˆ κ°œλ…μ„ μžŠμ–΄λ¨Ήμ–΄ λ‹€μ‹œ 곡뢀가 ν•„μš”ν•  것 κ°™μ•„μš”! 😭 μ½”ν‹€λ¦° Mono, Fluxkotlinμ—μ„œ Mono, FluxλŠ” Reactor λΌμ΄λΈŒλŸ¬λ¦¬μ—μ„œ μ œκ³΅ν•˜λŠ” λΉ„동기 μŠ€νŠΈλ¦Όμ„ ν‘œν˜„ν•˜λŠ” νƒ€μž…μž…λ‹ˆλ‹€. μ΄λ“€μ€ λΉ„동기 ν”„λ‘œκ·Έλž˜λ°μ„ μ§€μ›ν•˜κΈ° μœ„ν•΄ λ§Œλ“€μ–΄μ‘ŒμœΌλ©°, Reactive Streams ν‘œμ€€μ„ λ”°λ¦…λ‹ˆλ‹€. Reactor λΌμ΄λΈŒλŸ¬λ¦¬λŠ” μžλ°” 기반의 λ¦¬μ•‘ν‹°λΈŒ ν”„λ‘œκ·Έλž˜λ°(비동기 슀트림 처리)λ₯Ό μœ„ν•œ λΌμ΄λΈŒλŸ¬λ¦¬μž…λ‹ˆλ‹€. Spring WebFlux와 같은 비동기 μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 주둜 μ‚¬μš©λ©λ‹ˆλ‹€. Spring WebFluxλŠ” Spring Frameworkμ—μ„œ μ œκ³΅ν•˜λŠ” λΉ„동기 λ° λ…ΌλΈ”λ‘œν‚Ή μ›Ή μ• ν”Œ..

Programming/Kotlin 2024.11.18

[Kotlin] lateinitλž€?

Intro μ•ˆλ…•ν•˜μ„Έμš”. μ΄λ²ˆμ‹œκ°„μ—λŠ” μ½”ν‹€λ¦°μ˜ lateinit 에 λŒ€ν•΄ μ•Œμ•„λ³΄λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. lateinit μ½”ν‹€λ¦°μ—μ„œ "lateinit"λŠ” 말 κ·ΈλŒ€λ‘œ late + init이 합쳐진 뜻으둜 λ‚˜μ€‘ μ΄ˆκΈ°ν™”λ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. 즉 지연 μ΄ˆκΈ°ν™” κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€. Use 일반적으둜 ν΄λž˜μŠ€λ‚˜ 객체의 ν”„λ‘œνΌν‹°λ₯Ό μ„ μ–Έν•  λ•Œ μ‚¬μš©λ©λ‹ˆλ‹€. ν•΄λ‹Ή ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ λ³€μˆ˜ μ„ μ–Έ μ‹œ μ¦‰μ‹œ μ΄ˆκΈ°ν™”λ˜μ§€ μ•Šκ³ , λ‚˜μ€‘μ— μ΄ˆκΈ°ν™” ν•  수 μžˆμŠ΅λ‹ˆλ‹€. Condition λ³€μˆ˜λŠ” 클래슀의 멀버 λ³€μˆ˜μΌ λ•Œλ§Œ lateinitλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ³€μˆ˜λŠ” non-null νƒ€μž…μ΄μ–΄μ•Ό ν•˜λ©°, primitive typeμ΄λ‚˜ String λ“±μ˜ 클래슀 νƒ€μž… 등이 될 수 μžˆμŠ΅λ‹ˆλ‹€. λ³€μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ μ¦‰μ‹œ μ΄ˆκΈ°ν™”ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€. λ³€μˆ˜λŠ” μ΄ˆκΈ°ν™”λ˜κΈ° 전에 μ‚¬μš©ν•˜λ©΄ ..

Programming/Kotlin 2023.05.10

[Kotlin] Text '..' could not be parsed: Unable to obtain LocalDate from TemporalAccessor 였λ₯˜ 원인 및 ν•΄κ²° 방법

Intro μ•ˆλ…•ν•˜μ„Έμš”. μ½”ν‹€λ¦° μŠ€νŠΈλ§μ„ μ½”ν‹€λ¦° λ‚ μ§œλ‘œ λ³€ν™˜ν•˜λ˜ 도쀑 μ•„λž˜μ™€ 같은 μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. import java.math.BigDecimal import java.math.RoundingMode import java.time.LocalDate import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.util.* fun main(args: Array) { val input = "2301" val formatter = DateTimeFormatter.ofPattern("yyMM", Locale.KOREA) val date = LocalDate.parse(input, formatter).minusYears..

Programming/Kotlin 2023.03.30

[Kotlin] μ½”ν‹€λ¦° νŠΉμ • λ¬Έμžμ—΄ κΈ°μ€€μœΌλ‘œ 자λ₯΄λŠ” 방법 (split ν•¨μˆ˜ 이용)

Intro μ•ˆλ…•ν•˜μ„Έμš”. μ΄λ²ˆμ‹œκ°„μ—λŠ” μ½”ν‹€λ¦°μ—μ„œ νŠΉμ • λ¬Έμžμ—΄μ„ κΈ°μ€€μœΌλ‘œ 자λ₯΄λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. How to solve the problem μ½”ν‹€λ¦°μ—μ„œ νŠΉμ • λ¬Έμžμ—΄μ„ κΈ°μ€€μœΌλ‘œ 자λ₯΄λŠ” 방법은 λ‹€μ–‘ν•œλ°μš”, μ €λŠ” split ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄λ΄€μŠ΅λ‹ˆλ‹€. μ•„λž˜μ™€ 같은 슀트링이 μžˆλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€. ν•΄λ‹Ή μŠ€νŠΈλ§μ—μ„œ split ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ '-' λ¬Έμžμ—΄ κΈ°μ€€μœΌλ‘œ μž˜λΌμ€λ‹ˆλ‹€. fun main() { val string = "kotlin-typescript-javascript" val result = string.split('-'); println(result) println(result[0]) println(result[1]) println(result[2]) } μœ„ μ½”λ“œ μ‹€ν–‰ κ²°κ³ΌλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. [kot..

Programming/Kotlin 2023.03.14

[Kotlin] μž…λ ₯ 받은 λ‚ μ§œλ‘œ 경과일수 κ΅¬ν•˜λŠ” 방법 (get the day of the year as an integer in Kotlin)

Intro μ•ˆλ…•ν•˜μ„Έμš”. 이번 μ‹œκ°„μ—λŠ” μ½”ν‹€λ¦°μ—μ„œ μž…λ ₯ 받은 λ‚ μ§œλ‘œ 경과일수λ₯Ό κ΅¬ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. How to solve the problem μ•„λž˜ μ½”λ“œλ₯Ό ν™œμš©ν•˜λ©΄ μž…λ ₯ 받은 λ‚ μ§œλ‘œ ν•΄λ‹Ή κ²½κ³Ό 일수λ₯Ό ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€. /** * You can edit, run, and share this code. * play.kotlinlang.org */ fun main() { // μœ€λ…„ νŒλ³„ λ©”μ†Œλ“œ (1 μœ€λ…„, 0 평년) fun isLeap(year: Int): Int { return if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) 1 else 0 } fun dayOfYear(year: Int, month: Int, day: Int): Int {..

Programming/Kotlin 2023.03.02

[Kotlin] μ½”ν‹€λ¦° ν˜„μž¬ λ‚ μ§œ DateTime μ—μ„œ μ‹œκ°„ μΆ”κ°€ν•˜λŠ” 법

Intro μ•ˆλ…•ν•˜μ„Έμš”. 이번 μ‹œκ°„μ—λŠ” μ½”ν‹€λ¦°μ—μ„œ ν˜„μž¬ λ‚ μ§œ DateTime μ—μ„œ μ‹œκ°„ μΆ”κ°€ν•˜λŠ” 법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. How to implement μš°μ„  LocalDateTime 을 톡해 ν˜„μž¬ λ‚ μ§œ 및 μ‹œκ°„μ„ κ΅¬ν•©λ‹ˆλ‹€. κ·Έ 이후 plusHours λ©”μ†Œλ“œλ₯Ό 톡해 μ›ν•˜λŠ” κ°’λ§ŒνΌ μ‹œκ°„μ„ 더해주면 λ©λ‹ˆλ‹€. import java.time.LocalDate import java.time.LocalDateTime fun main(args: Array) { val todayDateTime: LocalDateTime = LocalDateTime.now() println("Current date and time: $todayDateTime") println("Add 9 Hour date and time: ${today..

Programming/Kotlin 2023.02.13

[Kotlin] μ½”ν‹€λ¦° 리슀트 list νŠΉμ • ν•„λ“œλ‘œ λ‚΄λ¦Όμ°¨μˆœ(DESC) μ •λ ¬ν•˜λŠ” 방법

Intro μ•ˆλ…•ν•˜μ„Έμš”. 이번 μ‹œκ°„μ—λŠ” μ½”ν‹€λ¦°μ—μ„œ λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. How to do μ½”ν‹€λ¦° λ‚΄μž₯ ν•¨μˆ˜μΈ sortedByDescending λ₯Ό μ‚¬μš©ν•˜λ©΄ λ˜λŠ”λ°μš”, λ‚΄λ¦Όμ°¨μˆœμ— μ‚¬μš©ν•˜κ³ μž ν•˜λŠ” νŠΉμ • ν•„λ“œ 값을 λ„£μ–΄μ£Όλ©΄ λ©λ‹ˆλ‹€. result.sortedByDescending { it.date } https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/sorted-by-descending.html

Programming/Kotlin 2023.01.20

[Kotlin] μ½”ν‹€λ¦° λ¬Έμžμ—΄ κ΅μ²΄ν•˜κΈ° / λ¬Έμžμ—΄μ˜ νŠΉμ • μΈλ±μŠ€μ— 문자 λ°”κΎΈλŠ” 방법

Intro μ•ˆλ…•ν•˜μ„Έμš”. 이번 μ‹œκ°„μ—λŠ” μ½”ν‹€λ¦° λ¬Έμžμ—΄ (string)의 νŠΉμ • 인덱슀 문자 λ°”κΎΈλŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. How to do 인덱슀 문자 λ°”κΎΈλŠ” λ§Žμ€ 방법이 μžˆκ² μ§€λ§Œ, μ €λŠ” substring() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ§„ν–‰ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€. μ•„λž˜μ™€ 같이 "20230116"μ΄λΌλŠ” λ¬Έμžμ—΄μ΄ μžˆλ‹€κ³  κ°€μ •ν•΄λ΄…μ‹œλ‹€. μ—¬κΈ°μ„œ 인덱슀 4 μœ„μΉ˜μ— "12"둜 λ°”κΎΈκΈ° μœ„ν•΄ μ•„λž˜μ™€ 같이 κ΅¬ν˜„ν•˜μ˜€μŠ΅λ‹ˆλ‹€. substring() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ꡐ체할 문자λ₯Ό λΆ„λ¦¬ν•˜κ³ , + μ—°μ‚°μžλ₯Ό 톡해 λ‚˜λ¨Έμ§€ λ¬Έμžμ—΄μ„ λ”ν•΄μ€λ‹ˆλ‹€. println()을 톡해 λ‚˜μ˜¨ κ²°κ³ΌλŠ” "20231216" μž…λ‹ˆλ‹€. "01"이 "12"둜 잘 λ°”λ€Œμ–΄ λ™μž‘ν•˜κ³  μžˆλ„€μš” :) fun main() { var string = "20230116" val char = "12..

Programming/Kotlin 2023.01.16

[Kotlin] μ½”ν‹€λ¦° mutableList μˆ˜μ • 및 μ‚­μ œν•˜λŠ” 방법

Intro μ•ˆλ…•ν•˜μ„Έμš”. 이번 μ‹œκ°„μ—λŠ” μ½”ν‹€λ¦°μ—μ„œ mutableList λ₯Ό μˆ˜μ • 및 μ‚­μ œν•˜λŠ” 방법에 λŒ€ν•΄ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. MutableList μ½”ν‹€λ¦°μ—μ„œ μˆ˜μ • 및 μ‚­μ œ λ“±κ³Ό 같은 μž‘μ—…μ„ ν•˜κΈ° μœ„ν•΄μ„œλŠ” Listκ°€ μ•„λ‹Œ, mutableList둜 μ„ μ–Έν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€. 기본적으둜 val, var λ³€μˆ˜λ₯Ό μ œκ³΅ν•˜κ³  μžˆλŠ”λ°μš”, valλŠ” 읽기만 κ°€λŠ₯ν•˜κ³ , var은 읽기 및 μˆ˜μ •μ΄ κ°€λŠ₯ν•©λ‹ˆλ‹€. How to do μ•„λž˜ μ½”λ“œμ™€ 같이 μˆ˜μ • ν˜Ήμ€ μ‚­μ œκ°€ κ°€λŠ₯ν•©λ‹ˆλ‹€. μˆ˜μ •ν•˜κ³  싢을 경우, ν•΄λ‹Ή μΈλ±μŠ€μ— μƒˆλ‘œμš΄ 값을 λ„£μ–΄μ£Όλ©΄ 되고, μ‚­μ œλ₯Ό ν•˜κ³  싢을 경우 removeAt() λ©”μ†Œλ“œλ₯Ό ν™œμš©ν•˜μ—¬ μ‚­μ œν•˜κ³ μž ν•˜λŠ” 인덱슀 번호λ₯Ό λ„£μ–΄μ€λ‹ˆλ‹€. fun main() { val list: MutableList = mutableListOf() lis..

Programming/Kotlin 2023.01.16
λ°˜μ‘ν˜•