반응형

Android 15

MVI vs Android App Architecture

Compose를 사용하면서 MVI가 Compose와 아주 찰떡이라는 이야기를 듣고 MVI를 학습하면서 사용해봤다. 그렇다면 구글 권장 아키텍쳐와 MVI의 차이가 무엇일까? 비교해보자 MVI 란?MVI (Model - View - Intent) 는 UI 상태를 단일 상태(SSOT, Single Source of Truth) 로 관리하고,UI 이벤트를 “Intent → Reducer(copy) → State” 흐름으로 처리하는 아키텍처 패턴입니다. Intent사용자가 UI에서 수행하는 액션 (ex. 버튼 클릭, 텍스트 입력 등)Reducer이전 상태(State)를 기반으로 copy() 를 사용해 새로운 상태를 만드는 순수 함수StateUI를 구성하는 불변 데이터 모델 MVI가 강조하는 철학Immutable..

Android 2025.11.06

Navigation3 알아보기

2018년에 나온 Navigation2의 경우 Android UI 환경이 변화하면서 새로운 접근 방식의 필요성을 인식하게 되었고 이에 새로운 라이브러리인 Navigation3가 출시 되었다. Navigation 개념들을 다시한번 복습하면서 Navigation2의 한계와 Navigation3의 특징들을 살펴보자.0. Navigation 기본 개념더보기더보기Navigation은 화면 간 이동(전환)과 백스택 관리를 단순화하기 위한 Android Jetpack 라이브러리입니다.기존 FragmentTransaction을 직접 다루던 복잡한 코드를 선언형 방식으로 바꿔줍니다.Navigation 핵심 원칙사용자가 앱과 상호작용할 때, 언제나 예측 가능하고 일관된 이동 경험을 제공하는 것이 핵심 목표입니다.앱에는 항..

Android 2025.10.21

Android Build-logic & Version Catalog

Gradle 빌드 관리: Build-logic , Version Catalog 정리안녕하세요 이번 글에서는 안드로이드 프로젝트 빌드 관리 핵심 키워드인Build-logic (컨벤션 플러그인)Version Catalog (빌드 카탈로그)를 정리해보겠습니다.1. 필요성멀티 모듈 프로젝트에서 build.gradle.kts 를 열어보면 이런 코드가 수십 개씩 반복됩니다.plugins { id("com.android.library") id("org.jetbrains.kotlin.android")}android { compileSdk = 35 defaultConfig { minSdk = 24 }}dependencies { implementation("androidx.co..

Android 2025.09.03

Android DI - Hilt 톺아보기

Hilt는 Dagger 기반으로 컴파일 타임에 코드 생성 → 런타임 오버헤드 최소화, 타입 안정성을 확보한다. Hilt vs Koin HiltKoin분류Dagger 기반 컴파일 타임 DI 라이브러리Kotlin DSL 기반 런타임 DI 라이브러리설정/문법어노테이션(@Inject, @Module, @Provides, @HiltViewModel)DSL 모듈(module { single { … } viewModel { … } })성능컴파일 시 그래프 생성 → 런타임 오버헤드↓런타임 해석/해결 → 오버헤드↑(대부분 앱에선 체감 미미)안정성타입 안전성↑(빌드 타임 검증)런타임 에러로 뒤늦게 발견될 수 있음빌드 시간어노테이션 처리로 느려질 수 있음빠름(어노테이션 처리 없음)안드로이드 통합Jetpack과 완전한 통합(..

Android 2025.07.30

Android DI(의존성 주입) - 개요

구글의 Android 권장 아키텍처(Architecture Guidelines) 에서는 Android 계층 구조 안에서 결합도를 낮추고, 테스트 가능성과 재사용성을 높이기 위해 DI 사용을 권장한다고 한다. 그렇다면, DI를 알아보자 의존성 주입(DI) : 클래스가 스스로 의존 객체를 생성하지 않고, 외부에서 주입받는 방식 먼저 "의존성"이란 어떤 객체가 다른 객체를 사용할 때 그 객체에 '의존'한다는 의미class Car { private val engine = Engine() // Car는 Engine에 의존하고 있음} 이게 뭐가 문제인가?1. 테스트 어려움Engine()을 직접 생성하므로, 테스트할 때 FakeEngine을 넣기 힘듦 2. 유지보수 어려움Engine에서 TurboEngi..

Android 2025.07.30

Camera2 API 개념부터 구현까지

- 개념 하나의 안드로이드 디바이스는 여러개의 카메라를 갖고있다. 각각의 카메라는 CameraDevice라 정의된다. CameraDevice는 Raw데이터에서 Preview, Photo, Record 스트림을 동시에 출력하며 Device마다 각기 다른 pipeline을 갖고있다. 이러한 pipeline은 CameraCaptureSession이 갖고있으며 CaptureRequest를 통해 선택된 pipeline으로 CameraDevice로 부터 나온 frame을 전달받는다. CaptureSession이 살아있는동안 수많은 CaptureRequest를 보낼 수 있다. 각각의 CaptureReuqest는 active configuration을 바꿀 수 있고, 파이프라인도 선택 할 수 있다. 구성요소) Cama..

Android 2023.04.06

Android Paging3 개념정리 및 사용기

Paging 개념 데이터 목록을 일정한 덩어리로 나눠서 제공하는것 한번에 모든데이터를 불러오면 높은 리소스를 사용하기에 페이징 처리를 하게되면 성능, 메모리, 비용 측면에서 매우 효율적이다. Android Jetpack 라이브러리에서 제공하는것으로 Paging3 라이브러리가 있다. 이를 이용하면 사용자가 로드된 데이터의 끝까지 스크롤할 때 RecyclerView 어댑터가 자동으로 데이터를 요청한다. Paging3에 새로 도입된것 Paging3에서 가장 크게 달라진 점은, 기존 Paging2에서 여러가지 방법으로 DataSource 처리를 하던 부분이 PagingSource 하나로 통합 되었다는 점이다. 그 외 내용으론 아래와 같다. - Paging3 라이브러리는 Android 앱 아키텍처를 따르고 Kot..

Android 2022.07.06

Android Room

Room 이란? 안드로이드는 데이터관리시스템으로 SQLite를 사용하는데 그 위에서 사용할 ORM 라이브러리를 룸이라한다. 즉, 안드로이드 로컬 저장장치를 쉽고 편하게 사용할수 있는 라이브러리 ORM? DB테이블을 object로 맵핑시키는것 Room의 구성요소 3가지 1. Entity 하나의 정보 단위 이자 데이터베이스에 저장할 테이블 2. Data Access Object 인터페이스에 메소드를 정의함으로서 데이터베이스를 통해 수행할 작업을 정의한다. 주로 DAO라고함 3. Room Database 사용할 데이터베이스 Room의 사용방법 1. dependancy 추가 implementation("androidx.room:room-runtime:2.4.2") kapt("androidx.room:room-c..

Android 2022.06.15

안드로이드 애니메이션

애니메이션의 종류 Animation클래스 vs Animator클래스 Animation은 Animator의 이전 버전이라 보면된다. 낮은 버전에서는 아직 Animation을 쓰지만 대부분의 앱은 이제 Animator를 쓰는 추세다. ViewPropertyAnimator 특징) 하나의 뷰에서만 애니메이션이 동작하길 원하고 간단한 애니메이션을 만들때 사용 반복적, 순차적, 동시적인 애니메이션 구현 불가 사용) View의 aniamte()메소드를 통해 ViewPropertyAnimator를 return한다. binding.textView.animate() .scaleX(0.5f) .scaleY(0.5f) .setDuration(3000) .withStartAction { } //애니메이션 시작시 .withEnd..

Android 2022.06.08
반응형