간단한 기능이 필요하시다면 Calendar 클래스를 이용하여 직접 클래스를 구현하시구요(제 프로젝트의 경우), 복잡한 기능이 필요하시다면 JodaTime이나 Apache Date Util 같은 클래스를 가져다 쓰시면 됩니다.
OS 버전에 따라 직접 함수를 구현하실 경우라면, 다음을 참고하세요.
해당 기능을 사용하는 클래스에서 직접 OS 버전을 비교하지 마시고 wrapping을 하세요.
실제 구현을 담당할 인터페이스를 하나 만드세요.. 그리고 필요한 함수들을 정의하세요. (아래 함수들은 그냥 예시입니다.)
interface DateDelegate {
fun today(): Date
fun daysAgo(delta: Int) Date
fun daysAfter(dela: Int): Date
}
그런 다음 각 OS 레벨에 맞는 구현 클래스를 만드세요.
class DateDelegateBeforeOreo: DateDelegate {
overide fun today(): Date {}
overide fun daysAgo(delta: Int) Date {}
overide fun daysAfter(dela: Int): Date {}
}
class DateDelegateFromOreo: DateDelegate {
overide fun today(): Date {}
overide fun daysAgo(delta: Int) Date {}
overide fun daysAfter(dela: Int): Date {}
}
그런 다음 OS에 맞는 구현체를 리턴할 클래스를 만드세요.
object DateSupport {
val delegate: DateDelegate by lazy(LazyThreadSafeMode.NONE) {
if (sdkBeforeOero())
DateDelegateBeforeOreo()
else
DateDelegateFromOreo()
}
}
이제 이 코드를 사용하는 곳에서는 DateSupport를 사용하세요.
DateSupport.today()
DateSupport.daysAgo(2)
DateSupport.daysAfter(5)
Dagger나 Hilt같은 Dependencay Injeciton 라이브러리를 사용하신다면, 그걸 이용하시면 더 좋을 것 같습니다.