앱 아키텍처는 앱의 구조를 정의하는 중요한 청사진이다. 이 아키텍처는 코드베이스를 효율적으로 관리하고, 확장 가능하게 만들며, 유지보수하기 쉬운 상태로 유지하기 위해 설계된다.유지보수성 향상: 코드가 모듈화되어 변경 사항을 손쉽게 관리할 수 있다. 새로운 기능을 추가하
UI 레이어 UI 레이어 개요 UI 레이어 UI의 역할 UI는 애플리케이션 데이터를 화면에 표시하고, 사용자와의 상호작용을 처리하는 중요한 역할을 한다. 사용자가 버튼을 클릭하거나 외부 입력(예: 네트워크 응답)이 있을 때, UI는 데이터의 변경사항을 반영하여
도메인 레이어는 UI 레이어와 데이터 레이어 사이에 있는 선택적 레이어다.도메인 레이어는 복잡한 비즈니스 로직이나 여러 ViewModel에서 재사용되는 간단한 비즈니스 로직의 캡슐화를 담당한다. 모든 앱에 이러한 요구사항이 있는 것은 아니므로 이 레이어는 선택사항이다.
UI 레이어는 UI 관련 상태와 로직을 포함하지만, 데이터 레이어는 애플리케이션 데이터와 비즈니스 로직을 담당한다. 비즈니스 로직은 앱의 핵심 가치를 결정하는 규칙으로, 데이터의 생성, 저장, 변경 방식을 정의한다.관심사를 분리함으로써 데이터 레이어는 여러 화면에서 재
오프라인 우선 앱은 인터넷 연결 없이도 모든 기능 또는 중요한 핵심 기능을 실행할 수 있는 애플리케이션이다. 이는 비즈니스 로직의 일부 또는 전부를 오프라인에서도 실행할 수 있음을 의미한다.오프라인 우선 앱을 빌드할 때는 애플리케이션 데이터와 비즈니스 로직에 대한 액세
앱은 보통 홈 화면, 로그인 화면, 결제 화면 등 여러 화면으로 구성되어 있다. Android 액티비티(Activity)는 앱의 화면이다. 앱을 켰을 때 바로 보이는 홈 화면은 보통 '메인 액티비티'라고 부르고, 결제 화면은 '결제 액티비티'로 만들 수 있다. 일반적으
서론 안드로이드로 앱 개발을 하다보면, ViewModel 이라는 단어를 자주 접하게 된다. ViewModel의 종류에는 2가지, MVVM 뷰모델과 AAC 뷰모델이 있다. 하지만 두 단어가 모두 "뷰모델" 이라는 단어를 포함한다고 해서, 비슷한 개념이라고 착각하기 쉬운데
StateFlow StateFlow는 애플리케이션에서 상태를 관리하고 표현하기 위해 Kotlin Flow 라이브러리의 일부입니다. 읽기 전용 인터페이스입니다. 항상 업데이트된 값을 반환합니다. 구현된 Flow에서 값을 수집합니다. 인사이트: StateFlow는 값이
Room은 스마트폰 내장 DB에 데이터를 저장하기 위해 사용하는 ORM 라이브러리 및 데이터 소스(서버로부터 데이터베이스에 대해 연결을 구축하기 위해 사용하는 데이터 제공자)다. 쉽게 말해서, Room은 데이터베이스의 객체를 코틀린(or 자바)의 객체로 매핑해준다.Ro
리스트 데이터를 보여주고, 항목의 세부 정보를 다른 화면에서 표시할 수 있도록 이동하는 기능은 흔히 요구되는 기능이다. 하지만 이 과정에서 새로운 화면의 ViewModel에서 다시 API를 호출하거나, 데이터를 데이터베이스에 저장하고 싶지 않은 경우도 많다. 이런 상황
map이 JSON으로 변환될 때, 값을 null로 넣은 쌍은 모두 제거되는 문제가 발생했다.나는 값이 null인 쌍들도 모두 JSON으로 포함하고 싶었다.이 문제는 serializeNulls()로 null을 허용해주면 간단하게 해결된다. Intent는 Android 시
우선 본문에 들어가기에 앞서, 현대 안드로이드 앱 개발에서 로컬 DB 설계 시 사용되는 라이브러리 2개를 알아보자.SharedPreferences와 DataStore, 그리고 프로토콜버퍼 라는 포스팅에서 Datastore에 대해 알아보았었다.Datastore는 "key
Firestore는 NoSQL 데이터베이스이기 때문에 RDB처럼 Pk, Fk와 같은 개념이 없다. 대신 데이터를 저장하는 방식과 구조에 따라 관계를 표현해야 한다.명언 앱을 예로 들자면, 명언 카테고리(quote category)와 명언(quote)의 관계를 Fires
보통 Screen 클래스는 뷰모델을 필요로 한다.하지만 Screen 클래스가 뷰모델을 필요로 하는 경우(사용하는 경우), 원칙적으로는 Preview 기능을 사용할 수 없다. 그럼에도 Preview를 사용할 방법이 있다.뷰모델에서 카테고리의 항목을 한국어로 불러오는 기능
위 예시처럼 enum에 한국어로 변수를 저장하면 단점이 존재한다. 호환성 문제 (ASCII 표준 위반)enum 값에 비-ASCII 문자를 사용하는 것은 다양한 플랫폼과 환경에서 호환성 문제를 일으킬 수 있다. 특히 일부 구식 시스템이나 외부 라이브러리에서 ASCII 문
안드로이드의 애플리케이션 구성은 4대 컴포넌트로 이루어져 있다.액티비티(Activity): 화면 전환과 UI 관리, 최근 Compose에서는 단일 액티비티에서 여러 화면을 구성하는 것이 일반적.서비스(Service): 백그라운드에서 작업을 수행, UI와 독립적으로 데이
APK(Android Package)는 완성된 안드로이드 앱 파일이고, AAB(Android App Bundle)는 APK를 만들어주는 재료 패키지다.맥도날드에서 햄버거를 주문하면, 조리된 상태 그대로 나온다. 주문하는 사람이 어떤 취향이든 상관없이 같은 햄버거를 받는
안드로이드에서 앱이 실행되기 위해서는 CPU가 이해할 수 있는 기계어(Machine Code)로 변환되어야 한다. 이 변환 방식에 따라 크게 두 가지 방식이 존재한다.JIT(Just In Time) 컴파일: 앱 실행 중에 실시간으로 코드를 변환하여 실행하는 방식AOT(
안드로이드는 우리가 흔히 스마트폰에서 사용하는 운영체제(OS)로 알고 있지만, 사실 그 자체가 하나의 오픈소스 소프트웨어 스택(Open Source Software Stack)이다. 여기서 '스택'이라는 단어가 붙는 이유, 그리고 '오픈소스'가 의미하는 바를 하나씩 살
안드로이드는 다양한 기능을 제공하기 위해 여러 계층으로 구성된 소프트웨어 스택이다. 그중 Native Library(네이티브 라이브러리)는 C/C++로 작성된 시스템 라이브러리로, 고성능 연산, 그래픽 처리, 보안, 데이터베이스 관리 등 핵심 기능을 담당한다. And
의존성(Dependency)이란 클래스가 다른 클래스 또는 객체에 의존하는 관계를 의미한다.예를 들어, UserRepository 클래스가 ApiService 객체를 필요로 한다면, UserRepository는 ApiService에 의존성을 갖는다고 볼 수 있다.위 코
SharedPreferences 정의 SharedPreferences는 키-값 쌍의 형태로 간단한 데이터를 저장할 수 있는 API다. 주로 앱의 설정이나 사용자 정보를 저장하는 데 사용된다. 특징 비관계형 데이터: 데이터를 구조화할 필요 없이 간단하게 저장할 수 있다
MVVM은 안드로이드 개발에서 많이 사용되는 아키텍처 패턴 중 하나로, Model, View, ViewModel로 구성되어 있다.이 패턴은 코드의 재사용성, 테스트 용이성, 유지보수성을 높이기 위해 설계되었으며, UI 로직과 비즈니스 로직을 분리하여 복잡한 프로젝트에서
Jetpack Compose는 안드로이드 앱 개발을 혁신적으로 변화시켰으며, UI 컴포넌트를 더 간편하게 구축하고 관리할 수 있게 해준다. Jetpack Compose에서 상태를 관리하는 데 자주 사용되는 두 가지 함수는 remember와 rememberSaveable
Navigation Graph는 앱 내의 화면들(destinations)과 그들 간의 이동 경로(actions)를 정의하는 구조다. 기존 XML 기반 Navigation과 달리 Compose에서는 코드로 Navigation Graph를 정의한다.Navigation Gr
Coil은 "Coroutine Image Loader"의 약자로, Instacart에서 개발한 Android용 이미지 로딩 라이브러리다. 주요 특징은 다음과 같다. Kotlin 기반: 코틀린 코루틴으로 구현되어 비동기 작업이 간결하고 효율적가벼운 크기: 최소한의 메서드
names의 결과는 주어진 리스트를 첫 번째 문자(이름의 첫 글자)를 기준으로 그룹화한 뒤, 정렬된 Map이다.groupBy { it.first() }는 이름의 첫 번째 문자(it.first())를 기준으로 각 이름을 그룹화한다. 그 후 toSortedMap()을 사용
업로드중..실제 카드를 손으로 뒤집는 걸 상상해보자! 카드는 어떻게 움직일까? 바로 세로축(Y축)을 중심으로 회전한다.이 원리를 그대로 앱에 적용시키면 된당카드가 뒤집히는 동안 일어나는 일:1\. 카드가 Y축을 중심으로 회전한다. (0도에서 180도까지)2\. 앞면이
오른쪽으로 스와이프하면 "예약" 왼쪽으로 스와이프하면 "건너뛰기"조금만 스와이프하고 놓으면 "원위치로 돌아오는 통통 튀는 효과"를 구현해보자. 쉬운 설명:currentIndex: 지금 보여주는 카드가 몇 번째인지 기억한다.offsetX와 offsetY: 카드가 화면에서
검은 배경에 하얀 눈이 자연스럽게 떨어지는 간단하면서도 아름다운 효과를 만들어보자!눈 내리는 애니메이션의 핵심 원리는 다음과 같다.여러 개의 작은 원형 입자(눈송이)를 만든다.각 눈송이에 랜덤한 시작 위치, 크기, 속도를 부여한다.시간이 지남에 따라 각 눈송이의 위치를
HorizontalPager: 좌우 스와이프가 가능한 페이지 컨테이너로, 여러 페이지를 가로로 넘길 수 있음. LazyRow와 유사하지만 페이지 단위로 스크롤됨.PagerState: 현재 페이지 인덱스 및 스크롤 상태를 관리하는 객체. rememberPagerSta
State는 객체 지향 관점에서 자주 사용되는 단어로 객체가 특정 시점에서 어떤 데이터 값을 가지고 있는지 나타내는 것이다.안드로이드의 UI 레이어 가이드에서는 UI 레이어의 UI State를 생성하고 관리하는 수단으로 단방향 데이터 흐름(UDF)을 설명한다.이러한 S
가장 일반적이고 중요한 재구성 트리거는 상태 변경이다. Compose에서는 다음과 같은 상태 객체들이 변경될 때 재구성이 발생한다. 상태가 변경되면 Compose는 해당 상태를 읽는 모든 컴포저블을 재구성한다.컴포저블 함수에 전달되는 매개변수가 변경될 때 재구성이 발생