반응형

2025/05 6

개인 프로젝트 코드 리팩토링

강의 같은거 좀 보다보니 기존 코드에 많은 문제점을 발견함.. 심각한 아키텍처 문제들1. 메모리 누수 위험// HookViewModel.kt - 심각한 메모리 누수 위험fun fetchHooksByTagName(tagName: String) { viewModelScope.launch { val hooksLiveData = hookRepository.getHooksByTagName(tagName) hooksLiveData.observeForever { hooks -> // Observer가 제거되지 않음 - 메모리 누수 발생 } }}2. Room 데이터베이스 트랜잭션 문제// HookDao.kt - 잘못된 트랜잭션 구현@Transactio..

개발 history 2025.05.26

코루틴을 활용한 비동기 작업 순서

suspend 1.동사 매달다, 걸다2.동사 (공식적으로) 유예[중단]하다3.동사 (공식적으로) 연기[유보]하다suspend 함수란?suspend 키워드는 함수가 "중단 가능하다"는 것을 나타냅니다. 일반 함수와 달리, suspend 함수는 실행 중간에 중단됐다가 나중에 재개될 수 있습니다. 이는 비동기 작업을 수행할 때 스레드를 차단하지 않고도 결과를 기다릴 수 있게 해줍니다.suspend fun getUserFromApi(userId: String): User { // 네트워크 요청 (이 동안 함수 실행은 중단되지만, 스레드는 차단되지 않음) return api.getUser(userId)}suspend 함수의 작동 원리suspend 함수는 내부적으로 '상태 머신(state machine)..

Android 2025.05.15

[Android] 자바스크립트 인터페이스 실전편

자바스크립트 인터페이스로 구현한 하이브리드 앱 기능들기존 글에서 자바스크립트 인터페이스의 기본 원리와 작동 방식을 설명했다면, 이번에는 실제 프로젝트에서 구현한 다양한 기능들을 자세히 살펴보겠습니다.1. 위치 정보 서비스 구현안드로이드의 네이티브 위치 정보 API를 사용하여 웹 환경에 사용자의 현재 위치를 제공하는 기능입니다.1.1 WebAppInterface 구현class WebAppInterface( private val context: Context, private val webView: WebView,) { private val TAG = "WebAppInterface" private val handler = Handler(Looper.getMainLooper()) //..

Android 2025.05.14

[Android]SQLiteDatabase - 트랜잭션 & 비동기 처리

들어가며안드로이드 앱 개발 중 가장 까다로운 문제 중 하나는 데이터베이스 작업과 비동기 처리의 조화입니다. 최근 우리 프로젝트에서 발생한 "attempt to re-open an already-closed object: SQLiteDatabase" 오류를 해결하는 과정에서 배운 교훈과 인사이트를 공유하고자 합니다. 이 글이 같은 문제로 고민하는 개발자들에게 도움이 되길 바랍니다.문제 상황: 데이터베이스 닫힘 오류우리 앱에서는 서버로부터 다양한 데이터(상품, 광고 이미지 등)를 가져와 SQLite 데이터베이스에 저장한 후 이미지 파일을 다운로드하는 기능이 있었습니다. 특히 문제가 발생한 코드는 광고 이미지 데이터를 처리하는 메소드였습니다.이 코드는 간헐적으로 "attempt to re-open an alr..

Android 2025.05.12

[Android] 자바스크립트 인터페이스

자바스크립트 인터페이스란?@JavascriptInterface는 안드로이드 WebView 내에서 실행되는 자바스크립트 코드가 네이티브 자바/코틀린 코드를 호출할 수 있도록 하는 브리지 메커니즘입니다. 이는 마치 서로 다른 언어를 사용하는 두 세계 사이에 통역사를 배치하는 것과 같습니다.1. 기본 작동 원리자바스크립트 인터페이스는 본질적으로 두 개의 완전히 다른 실행 환경을 연결합니다:자바/코틀린 환경: 안드로이드 네이티브 코드가 실행되는 JVM(Java Virtual Machine) 또는 ART(Android Runtime)자바스크립트 환경: WebView 내부의 자바스크립트 엔진(V8 또는 WebKit)이 코드를 실행하는 공간이 두 환경은 원래 다음과 같은 이유로 완전히 격리되어 있습니다:서로 다른 프..

Android 2025.05.08