| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- coroutine
- Android Navigation
- Kotlin
- MVP Architecture
- Android 12 대응
- Android WebView
- Android
- Android Jetpack
- Android Interceptor
- 66챌린지
- DataBinding
- OkHttp Interceptor
- scope function
- WebView
- 알고리즘 자바
- android recyclerview
- 안드로이드 카카오 로그인
- 영어독립365
- Android ViewPager2
- 습관만들기
- 코틀린 코루틴
- 프로그래머스 알고리즘
- 안드로이드
- 안드로이드 갤러리 접근
- Android ProgressBar
- Kotlin FCM
- 카카오 알고리즘
- Android 12
- Java
- 영어공부
- Today
- Total
목록전체 글 (157)
나미래 Android 개발자
Jetpack Compose로 UI를 구성하다 보면 MaterialTheme.colorScheme.primary 같은 코드를 자연스럽게 쓰게 된다.하지만 막상 이렇게 생각해보면 의문이 든다.이 테마는 어디서 정의되는 걸까?색상들은 어떤 기준으로 만들어졌을까?디자인 시스템이라는 건 정확하게 무엇을 의미할까?이 글은 Jetpack Compose에서 Material Design 3 테마 구조를 학습하면서 정리한 내용이다.특히 Material Theme Builder를 활용해 커스텀 테마를 생성하고 Compose에 적용하는 흐름을 중심으로 정리해보려고 한다.학습 프로젝트 소개: Compose Theming Study이 글에서 정리한 내용은 아래 학습용 프로젝트를 기반으로 한다. GitHub - JuhyeokLe..
Android 공식 배발 가이드에서도 네트워크 통신 라이브러리로 Retrofit 사용을 권장하고 있다.나 또한 Retrofit을 당연하게 사용해왔지만 왜 Retrofit 사용이 표준이 되었는지 궁금해졌고 글로 설명된 Retrofit 장점을 직접 느껴보기 위해서 Square에서 제공하는 OkHttp가 어떻게 사용되는지 학습하게 됐다. 이 글에서는 OkHttp를 직접 사용해 네트워크 통신을 구현해보며, OkHttp가 어떤 방식으로 동작하는지와 Java의 HttpURLConnection 대비 어떤 점이 개선되었는지를 정리해본다. OkHttp를 이용한 네트워크 GET 요청 처리OkHttp에서는 HttpURLConnection과 다르게 사용자가 동기적으로 통신할 수 있고 비동기적으로 통신할 수 있는 선택지를 제공..
Android 개발에서 Retrofit은 사실상 표준처럼 사용되지만, "왜 Retrofit이 필요한가?"에 대해서는 깊이 고민해보지 않았다.High-level의 Retrofit을 사용하는 장점을 글로써 이해하는 것이 아니라 직접 경험하기 위해서는 Low-level에서의 네트워크 통신이 어떻게 동작하는지 알 필요가 있다고 느껴졌다. 그래서 Java에서 제공하는 HttpURLConnection을 이용한 네트워크 통신 방법을 학습하기로 했다. HttpURLConnection GET 사용법먼저 Low-level의 HttpURLConnection에서 기본적인 REST API - GET 요청을 하는 소스 코드는 다음과 같다.소스 코드fun fetchUserWithHttpUrlConnection(userId: Int..
안드로이드에서 백그라운드 작업을 안정적으로 처리하면서도,사용자에게 현재 작업이 진행 중임을 명확하게 알려야 하는 경우 어떤 선택이 적절할까? 단순한 네트워크 요청이라면 WorkManager가 좋은 선택이 될 수 있다.하지만 다음 조건을 모두 만족하는 작업이라면 이야기가 달라진다.사용자가 명확히 트리거한 작업이고즉시 실행되어야 하며앱이 백그라운드로 전환되더라도 중단되면 안 되고수행 시간이 길지 않은 작업이 글에서는 이러한 조건을 만족하는 게시글 업로드(이미지 + 텍스트) 시나리를 예시로, Foreground Service 중에서 Short Service를 어떻게 사용하면 좋을지 정리해본다. 참고). Android 14(API 34)에서 강화된 정책까지 함께 다룬다. 샘플 전체 코드가 궁금한 경우, 제일 하..
Compose에서의 NavigationNavigation Component는 Jetpack Compose 앱에서도 사용할 수 있다.이를 통해 Composable 간 화면 이동을 구현하면서 Navigation Component가 제공하는 인프라와 기능을 그대로 활용할 수 있다. 프로젝트 설정Compose에서 Navigation을 사용하려면, app 모듈의 build.gradle 파일에 아래 Navigation 관련 의존성을 추가해야 한다.dependencies { val nav_version = "2.9.6" implementation("androidx.navigation:navigation-compose:$nav_version")} 시작하기Navigation을 사용할 때, navigation ..
Navigation 개요Navigation은 사용자가 앱 내의 다양한 콘텐츠 사이를 이동하고, 특정 화면으로 진입하거나 이전 화면으로 돌아가는 모든 상호작용을 의미한다. Jetpack의 Navigation Component는 Navigation 라이브러리, Safe Args Gradle 플러그인, 그리고 내비게이션 구현을 지원하는 여러 도구들로 구성된다. Navigation Component는 단순한 버튼 클릭 내비게이션부터 앱바나 내비게이션 드로어 같은 복잡한 패턴까지 다양한 내비게이션 유즈 케이스를 지원한다. Navigation 핵심 개념아래 표는 Navigation의 핵심 개념과 이를 구현할 때 사용되는 주요 타입을 정리한 것이다.ConceptPurposeTypeHostHost는 현재 네비게이션 대..
LaunchedEffect, 언제 왜 사용할까?Jetpack Compose를 사용하다보면, suspend 함수 호출, 네비게이션, 스낵바 노출, Flow collect처럼 UI 선언을 넘어서는 작업이 필요할 때가 있다. 하지만 Composable은 예측 불가능한 시점에, 예측 불가능한 순서로 다시 실행될 수 있는 구조다. 이런 환경에서 네트워크 요청이나 navigation 같은 외부 작업을 Composable 내부에 직접 넣으면 중복 실행, 타이밍 오류, 취소 문제, 메모리 누수 등의 문제가 발생할 수 있다. 그래서 Compose는 이러한 작업을 안전하게 수행하기 위해 Effect API들을 제공한다. 그중에서도 가장 많이 사용되는 것이 바로 LaunchedEffect다. Compose에서의 Side-e..
왜 Application에서 ImageLoaderFactory를 구현할까?Now In Android의 NiaApplication에서는 다음과 같이 Coil의 ImageLoaderFactory를 상속받고 있다.@HiltAndroidAppclass NiaApplication : Application(), ImageLoaderFactory { @Inject lateinit var imageLoader: dagger.Lazy ...}과연 왜 NiaApplication에서는 ImageLoaderFactory를 상속받아서 newImageLoader() 함수를 override 했을까?문제 상황Coil 이미지 로딩 라이브러리를 사용할 때, 기본 설정만으로는 SVG 파일을 로드할 수 없다. Now In ..
Composable 생명주기이 글은 안드로이드 공식 문서 중 CORE AREAS > UI 내용을 기반으로 학습하여 작성했습니다.ref). 공식 문서 상태 관리 가이드에서 언급되듯, Composition은 Composable 함수 실행 결과로 구성되는 UI 트리 구조를 갖고 있다. Jetpack Compose는 Composable을 실행해 이 UI 트리를 만들어내고, 이를 기반으로 화면을 렌더링한다. Initial CompositionJetpack Compose가 Composable을 처음 실행할 때, UI를 구성하기 위한 초기 Composition이 생성된다. 이 과정에서 Compose는 어떤 Composable이 호출되었는지, Composable들이 어떤 UI 구조를 이루는지를 모두 기록해 Compos..
Composition·Composable·Composition 관계 정리Jetpack Compose를 처음 학습하면 가장 먼저 마주하는 개념이 있다. 바로 Compose, Composable, Composition 이 세 가지다.단어 형태도 비슷하고, 공식 문서에서도 계속 반복되기 때문에 정확히 구분해야지만 Jetpack Compose 전반의 구조가 선명해진다.1. 관계 개요다음 그림은 Compose, Composable, Composition 관계를 나타낸 것이다.Compose는 전체 UI 시스템을 관리하며, 그 내부에는 여러 개의 Composition이 동시에 존재할 수 있다.각 Composition은 하나의 setContent {} 호출 또는 하나의 ComposeView를 통해 생성되며, 해당 UI..