본문 바로가기

android19

[Android] MVI MVI모델, 뷰, 인텐트의 3가지 컴포넌트를 사용하는 아키텍처 패턴양방향 데이터 흐름이 가능한 MVVM 과 달리, 단방향 데이터 흐름 형태로 데이터가 이동한다.MVVM 패턴은 충분히 이상적인 패턴이지만, 화면에 대한 요구사항이 커지고 상태가 늘어남에 따라 복잡한 데이터 흐름, 상태 충돌, 스레드 안전성이란 문제에 대해 한계가 존재한다.MVVM 패턴은 데이터 바인딩으로 뷰가 데이터를 구독할 수 있지만 뷰 안에서 스스로 바인딩하는 경우가 있고, 뷰와 뷰모델 간의 핑퐁으로 로직을 처리하면 복잡한 데이터 흐름으로 파악하기 힘들 때도 있다.즉, 뷰와 뷰모델의 양방향 참조가 가능해 생기는 문제가 있다.데이터 흐름을 제어하지 못하는 게 문제였기 때문에, MVI 는 단일 상태 관리, 단방향 데이터 흐름을 통해 MVVM.. 2025. 1. 26.
[Android] Clean Architecture 소프트웨어 개발은 복잡한 문제를 해결하기 위해 코드를 작성하는 것 이상을 필요하다. 단순히 결과론으로 화면을 보여주는 것만 생각하고 개발한다면, 코드는 점차 커지며 나중에는 손볼 수 없을 정도로 난폭한(?) 코드로 변하게 된다.그렇기에 개발한다는 것은 유지보수성, 확장성, 테스트 용이성 등의 요구 사항을 충족하기 위한 고민이 필요하며, 적절한 아키텍처 설계가 필수이다. Android Clean ArchitecturePresentation(UI) Layer, Domain Layer, Data Layer 총 3가지 레이어로 구성되어 있다.각 레이어들은 *단방향 데이터 흐름으로 통신한다.단방향 데이터 흐름 : 데이터가 오로지 한 방향으로만 흐르는 것으로 *Up Stream 과 *Down Stream 방식으로 .. 2025. 1. 22.
[Android] LiveData, Flow LiveDataLifecycle 라이브러리 중 하나로, 안드로이드 공통의 라이프사이클과 관련된 문제를 해결할 수 있게 해 주면서 앱 개발시 보다 더 유지보수하기 쉽게, 테스트하기 쉽게 만들어주는 라이브러리옵저버 패턴을 활용하여 구현되었으며, 관찰 가능한 일반 클래스인 ObservableXXX 클래스와는 달리 LiveData 는 생명주기의 변화를 인식하는 데이터 홀더 클래스이다.즉, Activity, Fragment, Service 등 안드로이드 컴포넌트의 생명 주기 인식을 통해 Active 상태에 있는 컴포넌트에서만 업데이트한다.Activity 와 Fragment 는 LiveData 객체를 안전하게 관찰할 수 있고, 생명 주기가 끝나는 즉시 관찰을 멈추기 때문에 누수를 걱정하지 않아도 된다.LiveDat.. 2024. 12. 22.
[Android] 프로그램(Program), 프로세스(Process), 스레드(Thread) 프로그램 (Program, 정적 프로그램(Static Program))윈도우의 *.exe 파일이나 Mac의 *.dmg 파일과 같은 컴퓨터에서 실행할 수 있는 파일어떤 작업을 하기 위해 실행할 수 있는 파일. 아직 실행하지 않은 상태이기 때문에 정적 프로그램으로도 불린다.파일이 저장 장치에 있지만 메모리에는 올라가 있지 않은 정적인 상태모든 프로그램은 *운영체제가 실행되기 위한 메모리 공간을 할당해 줘야 실행될 수 있다.운영체제(Operating System, OS) : 컴퓨터 시스템의 핵심 소프트웨어로, 컴퓨터 하드웨어와 응용 프로그램 간의 상호작용을 관리하고 제어하는 역할을 한다. 프로세스(Process)운영체제로부터 자원을 할당받은 작업의 단위프로그램을 실행시켜 정적인 프로그램이 동적으로 변하여 프로.. 2024. 12. 11.
[Android] 빌드, MultiDex 빌드개발자가 소스 코드를 작성 후 앱 설치 파일 APK 를 만들기까지의 실행 과정 리눅스에서의 빌드소스 코드를 컴퓨터가 읽을 수 있는 기계어로 번역(*컴파일)하고, 내가 만든 소스 코드에서 사용하는 라이브러리와 연결해서 최종 실행 파일 형태로 만드는 것컴파일(Compile) : 사람이 읽을 수 있는 형태의 소스 코드를 컴퓨터가 읽을 수 있는 형태의 기계어로 변환해 주는 과정 JVM 에서의 빌드JVM(Java Virtual Machine) : 자바는 OS 에 종속적이지 않다는 특징을 가지고 있다. OS 에 종속받지 않고 실행되기 위해서는 OS 위에서 자바를 실행할 수 있는 환경이 필요하다. JVM 은 자바 *바이트코드를 운영체제에 종속되지 않고 실행할 수 있도록 해주는 역할을 한다.바이트코드(Bytecod.. 2024. 11. 30.
[Android] 이미지 최적화(로드 개선) 해상도화면 또는 인쇄 등에서 이미지의 정밀도를 나타내는 지표이미지를 표현하는 데 몇 개의 픽셀 또는 도트로 나타냈는지 그 정도를 나타내는 말이다.즉, 해상도가 높다는 말은 1인치 당 찍게 되는 점의 수가 많기 때문에 선명하다는 것이다.점의 개수가 많아진다는 것은 메모리가 더 필요하고 처리 과정이 느려질 수 있다는 것이기 때문에, 적절한 해상도를 사용해야 한다. 문제점이미지는 일반적인 애플리케이션 UI 에 비해 크기가 크다.더 높은 해상도의 이미지는 특별한 이점 없이 메모리를 더 많이 차지하며 즉시 추가로 확장해야 하는 부가적인 성능 오버헤드가 발생한다.예시) 시스템 갤러리 애플리케이션은 Android 기기의 카메라를 사용하여 촬영한 사진을 표시하는데 일반적으로 이러한 사진은 기기의 화면 밀도보다 해상도가.. 2024. 11. 12.
[Android] Image Loader Library Android Memory안드로이드는 앱 내에서 사용할 수 있는 힙 메모리가 정해져 있기 때문에 이미지 로더 라이브러리를 사용하지 않은 상태에서 많은 이미지를 사용하거나 고해상도 이미지를 이미지뷰에 로드해야 하는 경우 메모리 부족으로 OOM(Out Of Memory)이 발생하게 된다.즉, 안드로이드 애플리케이션은 프로세스당 메모리 사용량에 제한이 있다. Honeycomb 미만Dalvik heap 영역 : Java 객체를 저장하는 메모리External 영역 : Native heap 의 일종으로 네이티브의 비트맵 객체를 저장하는 메모리Dalvik heap 영역과 External 영역은 각각 프로세스당 메모리 한계까지 확장될 수 있다.Dalvik heap 영역과 External 영역의 Dalvik heap f.. 2024. 11. 11.