본문 바로가기

안드로이드65

[Compose] Jetpack Compose 및 State 기존의 명령형 UI 구성 방식Compose 이전의 기본 Android 뷰 계층 구조는 UI 위젯의 트리로 표시할 수 있었다.레이아웃을 맨 아래에 깔고 그 위에 브랜치처럼 텍스트뷰, 이미지뷰를 넣고 다시 레이아웃을 넣는 등 쌓아가는 개념으로 뷰를 그렸다.이와 같은 작업 방식은 개발자로 하여금 XML 이라는 막대한 리소스를 반복적으로 낭비하게 하며, 노드를 변경하기 위해 findViewById, viewBinding, dataBinding 을 통하여 노드에 접근하고 setText(), setImageBitmap( ) 등의 메서드를 사용하여 변경해야 한다.이런 접근 방식은 불필요한 코드를 만들 뿐만 아니라 한 노드에 대한 업데이트의 충돌이 발생할 확률을 높이게 된다.Java/Kotlin 코드와 높은 의존성을 .. 2025. 1. 30.
[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.
[Kotlin] lateinit, by lazy 지연(늦은) 초기화초기화 작업을 극한으로 미루다가 사용자가 필요로 할 때 진행하는 방법클래스 안에 '이 변수를 사용할 것이다'라고 선언만 해두고 나중에 변수를 실제로 사용하는 시점에 값을 입력해주어 사용하는 것null 로 초기화할 수 없고, 객체의 정확한 값을 뒤에 가서야 알 수 있는 경우에 사용한다. lateinitvar 로 선언된 프로퍼티만 사용 가능하다.Non-null 타입만 사용 가능하다.지연 초기화를 위해 사용되는 lateinit 프로퍼티에는 null 값이 할당될 수 없다.프로퍼티에 대한 사용자 정의 getter, setter 를 사용할 수 없다.클래스 생성자에서 사용이 불가능하다.생성자에서는 프로퍼티가 즉시 초기화되어야 한다.초기화 전에는 변수 접근이 불가능하다.원시 타입은 사용이 불가능하다... 2025. 1. 14.
[Android] LiveData, Flow LiveDataLifecycle 라이브러리 중 하나로, 안드로이드 공통의 라이프사이클과 관련된 문제를 해결할 수 있게 해 주면서 앱 개발시 보다 더 유지보수하기 쉽게, 테스트하기 쉽게 만들어주는 라이브러리옵저버 패턴을 활용하여 구현되었으며, 관찰 가능한 일반 클래스인 ObservableXXX 클래스와는 달리 LiveData 는 생명주기의 변화를 인식하는 데이터 홀더 클래스이다.즉, Activity, Fragment, Service 등 안드로이드 컴포넌트의 생명 주기 인식을 통해 Active 상태에 있는 컴포넌트에서만 업데이트한다.Activity 와 Fragment 는 LiveData 객체를 안전하게 관찰할 수 있고, 생명 주기가 끝나는 즉시 관찰을 멈추기 때문에 누수를 걱정하지 않아도 된다.LiveDat.. 2024. 12. 22.
[CS] 멀티 태스킹(Multi Tasking), 멀티 프로세싱(Multi Processing), 멀티 프로세스(Multi Process), 멀티 스레드(Multi Thread) 단일 프로세스(Single Process)초창기 컴퓨터는 단일 프로세스 시스템으로, 한 번에 하나의 프로그램만이 실행할 수 있어서, 또 다른 프로그램을 실행하고 싶다면 현재 프로그램을 종료해야 했다. 그리고 프로그램 실행 중 *I/O(입출력) 작업이 발생하면 CPU 는 프로세스를 멈추고 대기하게 되어 CPU 사용률이 비효율적으로 낮아지게 된다.I/O(Input/Output) : 프로그래밍에서 파일을 읽고 쓰는 것, 서버 네트워크의 어딘가와 데이터를 주고 받는 것, 마우스, 키보드와 같은 입출력 장치와 데이터를 주거나 받는 것을 의미한다.위 문제를 해결하기 위해 여러개의 프로그램(멀티 프로그래밍)을 메모리에 올려놓고 하나의 CPU 에서 번갈아 가며 동시에 실행시키는 방안을 첨가하였다. 멀티 프로그래밍(Mu.. 2024. 12. 12.
[Android] 프로그램(Program), 프로세스(Process), 스레드(Thread) 프로그램 (Program, 정적 프로그램(Static Program))윈도우의 *.exe 파일이나 Mac의 *.dmg 파일과 같은 컴퓨터에서 실행할 수 있는 파일어떤 작업을 하기 위해 실행할 수 있는 파일. 아직 실행하지 않은 상태이기 때문에 정적 프로그램으로도 불린다.파일이 저장 장치에 있지만 메모리에는 올라가 있지 않은 정적인 상태모든 프로그램은 *운영체제가 실행되기 위한 메모리 공간을 할당해 줘야 실행될 수 있다.운영체제(Operating System, OS) : 컴퓨터 시스템의 핵심 소프트웨어로, 컴퓨터 하드웨어와 응용 프로그램 간의 상호작용을 관리하고 제어하는 역할을 한다. 프로세스(Process)운영체제로부터 자원을 할당받은 작업의 단위프로그램을 실행시켜 정적인 프로그램이 동적으로 변하여 프로.. 2024. 12. 11.