마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

JAVA 8 호환 관련 문의

0 추천
안녕하세요.

C#, C++ 언어로만 개발을 진행하다 안드로이드를 코틀린으로 습득을 하려고 이것저것 공부를 하고 있습니다.

 

개발을 하다보니 JAVA 8 에서만 제공하는 클래스들이 있어서 개발자분들께서는 어떤식으로 개발의 방향을 잡아가는지 궁금합니다.

 

예를들어 예전에는 Calendar 를 이용하여 날짜 관련 프로세스를 진행을 한 반면에

현재는 LocalDate, LocalDateTime 을 권장하는 것으로 보여져서 사용을 하려고 하니

해당 클래스의 경우 JAVA 8 부터 지원을 하는 것으로 보여지고,

그러다 보니 롤리팝부터 제공을 하는 것으로 보여집니다.

 

Build.VERSION.SDK_INT >= Build.VERSION_CODES.O

위 조건을 통하여 함수 사용 때 마다 분기를 하시는지 아니면 최소 SDK 버전을 롤리팝 이상으로 놓고 개발을 하시는지 전문가 분들에게 문의드립니다.

방향성을 알려주시면 감사하겠습니다.

감사합니다.
admacom (120 포인트) 님이 2021년 3월 22일 질문

1개의 답변

0 추천

간단한 기능이 필요하시다면 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 라이브러리를 사용하신다면, 그걸 이용하시면 더 좋을 것 같습니다.

spark (226,420 포인트) 님이 2021년 3월 22일 답변
정말 자세한 답변 감사드립니다 !
...