
PhotoCalendar๋ Kotlin ๊ธฐ๋ฐ์ ์คํ์์ค ์บ๋ฆฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ๋ ์ง ๋ฐ ์ผ์ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ค์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค๋ java.util.time์ ์ฌ์ฉํ๊ณ ์์์ง๋ง, ํน์ ๋ฒ์ ์์๋ ํธํ๋์ง ์๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๊ธฐ์ kotlinx.datetime์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ์์ ์ ์งํํ๋ค.
๊ธฐ์กด java.util.time ๋ฅผ kotlinx.datetime์ผ๋ก ๋์ฒดํ๊ธฐ ์ํด ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ๋ค.
java.util.time์ LocalDate.now()๋ฅผ ๋์ฒดํ๊ธฐ ์ํด Clock.System.now()์ TimeZone.currentSystemDefault()๋ฅผ ํ์ฉํ์ฌ ํ์ฌ ๋ ์ง๋ฅผ ๊ฐ์ ธ์ค๋ ํ์ฅ ํจ์๋ฅผ ๊ตฌํํ๋ค.
fun LocalDate.Companion.now(): LocalDate {
return Clock.System.now()
.toLocalDateTime(TimeZone.currentSystemDefault())
.date
}
๊ธฐ์กด java.util.time.YearMonth๋ฅผ kotlinx.datetime์์ ์ ๊ณตํ์ง ์๊ธฐ ๋๋ฌธ์ ์ปค์คํ ๋ฐ์ดํฐ ํด๋์ค DateYearMonth๋ฅผ ์์ฑํ์ฌ ์ฐ-์์ ๋ค๋ฃฐ ์ ์๋๋ก ํ๋ค.
data class DateYearMonth(val year: Int, val month: Int)
์ด๋ฅผ ํตํด YearMonth์ ๋์ผํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ, ์ฐ-์ ์ฐ์ฐ์ ์ํํ ์ ์๋๋ก ํ์ฅํ๋ค.
java.util.time์์ ์ ๊ณตํ๋ ์ฃผ์ ๊ธฐ๋ฅ๋ค์ ์ ์งํ๊ธฐ ์ํด ํ์ฅ ํจ์๋ฅผ ํ์ฉํ์ฌ ๋์ฒดํ๋ค.
์๋ฅผ ๋ค์ด, ํน์ ์์ผ์ ๊ธฐ์ค์ผ๋ก ๋ ์ง๋ฅผ ๊ณ์ฐํ๋ previousOrSame(target: DayOfWeek) ํจ์์, DateYearMonth ๊ฐ์ฒด์์ ์์ ๋ํ๋ plusMonths(months: Int) ํจ์๋ฅผ ์ง์ ๊ตฌํํ๋ค.
internal fun LocalDate.previousOrSame(target: DayOfWeek): LocalDate { ... }
internal fun DateYearMonth.plusMonths(months: Int): DateYearMonth { ... }

kotlinx.datetime์ ์ฌ์ฉํ์ฌ Kotlin ๋ฉํฐํ๋ซํผ ์ง์ ๊ฐํ
java.util.time ์ข
์์ฑ์ ์ ๊ฑฐํ๊ณ , ๋ณด๋ค ๊ฐ๋ณ๊ณ ํจ์จ์ ์ธ ๋ ์ง ์ฒ๋ฆฌ ๊ฐ๋ฅ
๊ธฐ์กด ๊ธฐ๋ฅ์ ์ ์งํ๋ฉด์, Kotlin ์คํ์ผ์ ๋ง๋ API๋ก ๊ฐ์
์์ผ๋ก๋ Kotlin ์ํ๊ณ์ ๋ง์ถฐ ๊ฐ์ ์ ์งํํ ๊ณํ์ด๋ฉฐ, PhotoCalendar ์คํ์์ค์ ๊ธฐ์ฌํ ์ ์์ด ๋ป๊น์ ๊ฒฝํ์ด์๋ค.