[Android] ๐Ÿ“… Kotlinx.datetime์„ ํ™œ์šฉํ•œ PhotoCalendar ์˜คํ”ˆ์†Œ์Šค ๊ธฐ์—ฌํ•˜๊ธฐ

์•ˆ์„ธํ™ยท2025๋…„ 3์›” 16์ผ
post-thumbnail

๐Ÿ” ํ”„๋กœ์ ํŠธ ๊ฐœ์š”

PhotoCalendar๋Š” Kotlin ๊ธฐ๋ฐ˜์˜ ์˜คํ”ˆ์†Œ์Šค ์บ˜๋ฆฐ๋” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ, ๋‚ ์งœ ๋ฐ ์ผ์ • ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๊ธฐ์กด ์ฝ”๋“œ๋ฒ ์ด์Šค๋Š” java.util.time์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ, ํŠน์ • ๋ฒ„์ „์—์„œ๋Š” ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ธฐ์— kotlinx.datetime์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

๐Ÿ›  ํ•ด๊ฒฐ ๋ฐฉ์•ˆ

๊ธฐ์กด java.util.time ๋ฅผ kotlinx.datetime์œผ๋กœ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

1๏ธโƒฃ LocalDate.now() ๋Œ€์ฒด

java.util.time์˜ LocalDate.now()๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด Clock.System.now()์™€ TimeZone.currentSystemDefault()๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ˜„์žฌ ๋‚ ์งœ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ํ™•์žฅ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ–ˆ๋‹ค.

fun LocalDate.Companion.now(): LocalDate {
    return Clock.System.now()
        .toLocalDateTime(TimeZone.currentSystemDefault())
        .date
}

2๏ธโƒฃ YearMonth ๋Œ€์ฒด: ์ปค์Šคํ…€ DateYearMonth ํด๋ž˜์Šค ๊ตฌํ˜„

๊ธฐ์กด java.util.time.YearMonth๋ฅผ kotlinx.datetime์—์„œ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ปค์Šคํ…€ ๋ฐ์ดํ„ฐ ํด๋ž˜์Šค DateYearMonth๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์—ฐ-์›”์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๋‹ค.

data class DateYearMonth(val year: Int, val month: Int)

์ด๋ฅผ ํ†ตํ•ด YearMonth์™€ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฉฐ, ์—ฐ-์›” ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ™•์žฅํ–ˆ๋‹ค.

3๏ธโƒฃ ํ™•์žฅ ํ•จ์ˆ˜ ๊ตฌํ˜„

java.util.time์—์„œ ์ œ๊ณตํ•˜๋˜ ์ฃผ์š” ๊ธฐ๋Šฅ๋“ค์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ™•์žฅ ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋Œ€์ฒดํ–ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ • ์š”์ผ์„ ๊ธฐ์ค€์œผ๋กœ ๋‚ ์งœ๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” previousOrSame(target: DayOfWeek) ํ•จ์ˆ˜์™€, DateYearMonth ๊ฐ์ฒด์—์„œ ์›”์„ ๋”ํ•˜๋Š” plusMonths(months: Int) ํ•จ์ˆ˜๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ–ˆ๋‹ค.

internal fun LocalDate.previousOrSame(target: DayOfWeek): LocalDate { ... }
internal fun DateYearMonth.plusMonths(months: Int): DateYearMonth { ... }

ํ•ด๋‹น PR ๋งํฌ

๐ŸŽฏ ์ ์šฉ ๊ฒฐ๊ณผ

kotlinx.datetime์„ ์‚ฌ์šฉํ•˜์—ฌ Kotlin ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ์ง€์› ๊ฐ•ํ™”
java.util.time ์ข…์†์„ฑ์„ ์ œ๊ฑฐํ•˜๊ณ , ๋ณด๋‹ค ๊ฐ€๋ณ๊ณ  ํšจ์œจ์ ์ธ ๋‚ ์งœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
๊ธฐ์กด ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•˜๋ฉด์„œ, Kotlin ์Šคํƒ€์ผ์— ๋งž๋Š” API๋กœ ๊ฐœ์„ 

๐Ÿ”— ๋งˆ๋ฌด๋ฆฌ

์•ž์œผ๋กœ๋„ Kotlin ์ƒํƒœ๊ณ„์— ๋งž์ถฐ ๊ฐœ์„ ์„ ์ง„ํ–‰ํ•  ๊ณ„ํš์ด๋ฉฐ, PhotoCalendar ์˜คํ”ˆ์†Œ์Šค์— ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ์–ด ๋œป๊นŠ์€ ๊ฒฝํ—˜์ด์—ˆ๋‹ค.

์ฐธ๊ณ 

PhotoCalendar Repo

profile
๋‚˜๋งŒ์˜ ๊ฐœ๋ฐœ ์ผ๊ธฐ

0๊ฐœ์˜ ๋Œ“๊ธ€