뿌셔뿌셔(382)
-
Android Compose 앱에서 발생한 오류: java.lang.NoSuchMethodError
1. 오류 내용앱 실행 시 다음과 같은 치명적인 런타임 오류가 발생:java.lang.NoSuchMethodError: No static method setContent$default(...)V in class Landroidx/activity/compose/ComponentActivityKt;1-1. 발생 환경Kotlin 2.0.21Compose Compiler 1.5.13org.jetbrains.kotlin.plugin.compose 플러그인 사용단일 모듈 구조 (멀티모듈 아님)2. 원인build.gradle.kts (app 모듈)에서 아래 설정 누락:buildFeatures { compose = true}해당 설정이 없으면 Compose 관련 코드가 컴파일조차 되지 않음.그로 인해 런타임 시 ..
2025.05.12 -
Kotlin에서 for문 안에 함수를 정의해도 괜찮을까?
나는 알고리즘 문제 풀이를 하면서 로컬 함수를 정의하는 걸 좋아한다.게다가 Kotlin에서는 for 루프 내부에 로컬 함수를 정의할 수 있다.이 기능은 특정 반복문 블록 내에서만 사용하는 헬퍼 함수의 스코프를 제한할 수 있어, 코드 구조상 유용한 경우가 있다.for (item in items) { fun process(value: Int): Boolean { return value % 2 == 0 } if (process(item)) { /* ... */ }} for문 안에 함수를 정의하였을 때의 장점1. 캡슐화반복문에서만 쓰이는 로직을 해당 블록 안에 숨김으로써, 외부 스코프를 깔끔하게 유지할 수 있다.2. 가독성 향상복잡한 처리를 함수로 추출하면 반복문이 간결해지고 이해하..
2025.05.09 -
왜 hiltViewModel()은 밖에서 쓰면 터질까? hiltViewModel의 안전한 사용법
사건의 발달회사 프로젝트는 상당히 오래된 프로젝트이다.Java, Kotlin이 마구 뒤섞여져 있고 당연히 XML은 기본이다.여기에 새로운 기능을 추가하는데, 이번엔 Compose를 도입하려고 했다.기초적인 View 작업을 마치고 이제 Activity와 연결하는데 에러가 발생하였다.확인해보니 hiltViewModel을 밖에서 사용했다고 하는데 이게 무슨 소리일까?IllegalStateException: No ViewModelStoreOwner was provided via LocalViewModelStoreOwner 문제 상황 재현나는 다음과 같은 NavHost를 사용하였다.@Composablefun MyNavGraph(navController: NavHostController) { NavHost(n..
2025.05.08 -
Parcelize vs Serializable 차이점 한눈에 보기
Serializable : Java의 기본 직렬화 방식class User(val name: String, val age: Int) : Serializable장점:구현이 매우 쉽다. implements Serializable만 하면 끝.Java 표준이라 Android 외의 환경에서도 사용 가능.단점:리플렉션 기반 → 느리다.성능이 중요한 Android 환경에선 이게 큰 단점.어떤 필드가 직렬화되고 있는지 명시적으로 제어 불가.Parcelable (+ @Parcelize) : Android 전용 직렬화 방식@Parcelizedata class User(val name: String, val age: Int) : Parcelable장점:Android에 최적화된 고속 직렬화.메모리 복사 수준으로 빨라서 성능이 ..
2025.04.02 -
Google, Android 오픈소스 전략 수정… 실시간 AOSP 개발 종료
2025년 3월, AndroidAuthority 보도에 따르면Google은 Android 운영체제의 오픈소스 개발 방식을 전면적으로 변경한다고 발표했다.이제 Android는 더 이상 AOSP에서 실시간 개발되지 않으며, 오로지 내부 브랜치에서만 개발된다.1. 기존 방식: Dual Track 구조Google은 그동안 Android를 다음과 같은 두 개의 트랙으로 병행 개발해왔다: 구성 설명 내부 브랜치Google 사내 비공개 브랜치. 실제 Android 개발이 이루어짐AOSP 브랜치오픈소스 레포 (android.googlesource.com). 일부 코드가 실시간으로 반영되어 커뮤니티가 추적 가능이 구조는 투명성과 오픈소스 정신을 살렸지만, 다음과 같은 단점도 있었다:내부 ↔ 외부 브랜치 병합 시 충돌 다..
2025.04.01 -
[Android] Java에서 UTC와 TimeZone 완전 정복하기
1. UTC 기준으로 저장된 문자열 → Date 객체로 파싱String utcString = "2025-03-31 01:10:30";// 1. SimpleDateFormat 설정 (UTC 기준)SimpleDateFormat utcFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault());utcFormat.setTimeZone(TimeZone.getTimeZone("UTC"));// 2. 문자열 → Date 객체Date parsedDate = null;try { parsedDate = utcFormat.parse(utcString);} catch (ParseException e) { e.printStackTrace();} ..
2025.03.31