-
(1분 읽기) LocalDate 오류 해결: java.lang.NoClassDefFoundError 😱 📅Android 개발/오류 해결 2025. 1. 13. 14:23
Kotlin에서 LocalDate를 사용하려고 했는데 java.lang.NoClassDefFoundError 오류가 떴다고?
이 오류는 LocalDate가 API 26 이상에서만 지원되기 때문에 발생해.
그럼 하위 버전에서도 에러 없이 LocalDate를 사용하는 방법을 알아보자! 🚀
⚠️ 문제 원인
LocalDate는 Java 8의 java.time 패키지에 포함된 클래스라서 API 26 이상에서만 사용할 수 있어.
- API 26 이상 → 정상 동작
- API 26 미만 → NoClassDefFoundError 발생 😵
✅ 해결 방법 3가지
1️⃣ 최신 기기만 지원할 때
- API 26 이상만 지원할 계획이라면, @RequiresApi 애너테이션을 사용하면 돼!
@RequiresApi(Build.VERSION_CODES.O) fun getToday(): LocalDate = LocalDate.now()
이렇게 하면 API 26 미만에선 컴파일 시 경고가 뜨고 앱이 실행되지 않아 안전하게 관리할 수 있어!
2️⃣ 하위 호환 필요할 때
- API 26 미만에서도 돌아가야 한다면, SimpleDateFormat을 사용한 조건문 처리가 좋아!
fun getToday(): String { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { LocalDate.now().toString() } else { SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(Date()) } }
- API 26 이상에서는 LocalDate 사용
- API 26 미만에서는 SimpleDateFormat 사용
- 모든 버전에서 문제없이 동작하는 유연한 방식이야! 🎉
3️⃣ ThreeTenABP 라이브러리 사용
- API 26 미만에서도 LocalDate를 쓰고 싶다면, ThreeTenABP 라이브러리가 최선이야!
- Java 8의 java.time API를 하위 호환할 수 있게 도와줘.
// Gradle 의존성 추가 implementation 'com.jakewharton.threetenabp:threetenabp:1.4.4'
// Import 추가 import org.threeten.bp.LocalDate // LocalDate 사용 예제 fun getToday(): LocalDate { return LocalDate.now() // 모든 API 레벨에서 동작 }
ThreeTenABP는 모든 Android 버전에서 LocalDate를 동일하게 쓸 수 있어서,
버전 호환성을 고민할 필요가 없어! 😎
💡 Tip
- 최신 기기만 지원할 때 → @RequiresApi 사용!
- 하위 호환이 필요할 때 → SimpleDateFormat or ThreeTenABP 사용!
- ThreeTenABP는 버전 걱정 없이 LocalDate 사용 가능! 🎉
이제 LocalDate로 모든 API 레벨에서 안전하고 직관적인 날짜 처리를 시작해보자! 🚀
하위 호환 걱정 없이 깔끔한 코드를 작성할 수 있어! 😎'Android 개발 > 오류 해결' 카테고리의 다른 글