전체 글(367)
-
헬퍼 함수(Helper Function)
헬퍼 함수(Helper Function)란?"하나의 기능을 잘게 쪼개서 보조적으로 처리해주는 함수"= 큰 로직을 깔끔하게 만들기 위한 도우미 함수특징다른 함수 내부에서만 쓰이는 보조 역할재사용성보다 가독성과 분리 목적이 더 큼일반적으로 private, inline, 또는 local function으로 정의됨네이밍에 get, is, format, calc, build 등의 접두어가 자주 붙음예시 (Kotlin)fun printUserInfo(user: User) { val fullName = getFullName(user) val age = calculateAge(user.birthYear) println("이름: $fullName") println("나이: $age")}private..
2025.05.16 -
JCenter 종료와 Android 개발자의 대응법
내가 유지보수 하는 회사의 앱은 너무 오래된 앱이다. (약 10년...?)그러다보니 JCenter 시절 올라온 현재는 유지보수 되지 않는 라이브러리들이 너무 많다.이걸 다 리팩토링하자니 시간이 부족하기 때문에, 최대한 라이브러리를 살려 사용하는 방법을 설명하고자 한다. 1. JCenter란?JCenter는 JFrog에서 운영하던 Java 및 Android용 오픈소스 라이브러리 저장소로,jcenter()한 줄만으로 많은 라이브러리를 빠르게 가져올 수 있었기 때문에한때 Android 개발자들 사이에서 사실상 표준 저장소처럼 사용되었음.2. 왜 종료됐나?운영사 JFrog의 전략적 서비스 종료 결정 (2021년 발표, 2024년 8월 완전 종료)공식 사유는:비용 및 운영 리소스 부담Maven Central 등으..
2025.05.15 -
Google Play 사진 및 동영상 권한 정책 변경: 개발자가 알아야 할 모든 것 (2025년 5월 업데이트)
📌 변경 배경사용자 개인 정보 보호 강화를 위해, Google은 사진·동영상 파일 접근에 대한 정책을 강화했다.✅ 적용 기준1. 일회성 / 빈번하지 않은 사용READ_MEDIA_IMAGES, READ_MEDIA_VIDEO 권한 사용 불가Android 사진 선택 도구 사용 의무사용자가 직접 선택한 파일만 접근 가능전체 갤러리 접근 불가2. 핵심 기능에 해당하는 지속적 사용예: 채팅 앱에서 빈번한 사진/영상 전송 등Play Console에서 사용 사례 제출 → 승인 필요피상적 설명은 불승인, 구체적 사용 이유 필수🛠 대응 방법일회성 접근: 권한 삭제 + 사진 선택 도구 사용핵심 기능: 선언서 제출 + 승인을 받아야 권한 유지 가능⏰ 마감 기한2025년 5월 28일까지 반드시 정책 준수미준수 시 Googl..
2025.05.13 -
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