안드로이드 [Kotlin] - Jetpack Compose 시작 (명령형 UI 구성 vs 선언형 UI 구성)
2023. 4. 9. 19:27
Android
Jetpack Compose의 탄생이유 기존의 명령형 UI 구성 방식 기존의 UI를 만드는 방식으로 기존 안드로이드는 트리형태로 뷰를 구성한다. 레이아웃을 맨 아래에 깔고 그 위에 브랜치처럼 텍스트뷰, 이미지뷰를 넣고 다시 레이아웃을 넣는 등 쌓아가는 개념으로 뷰를 그렸다. 이와 같은 작업 방식은 개발자로 하여금 xml이라는 막대한 리소스를 반복적으로 낭비하게 하며, 노드를 변경하기 위해 findViewById, viewBinding, dataBinding을 통하여 노드에 접근하고 setText(), setImageBitmap( ) 등의 메서드를 사용하여 변경해야 한다. 이런 접근 방식은 불필요한 코드를 만들 뿐만 아니라 한 노드에 대한 업데이트의 충돌이 발생할 확률을 높이게 된다. 명령형 UI 구성 방..
안드로이드 [Kotlin] - Go Inside Coroutine - 코루틴 내부 구현 살펴보기
2023. 3. 25. 22:39
Android
메인 스레드(Main Thread, UI Thread)란? 앱이 실행됐을 때 시스템에서는 메인(Main)이라고 불리는 스레드를 생성한다. 메인스레드는 안드로이드 이벤트 생성 및 처리를 담당할 뿐 아니라 안드로이드에서 발생되는 여러 이벤트를 그와 관련된 위젯으로 연동시키는 중요한 역할을 수행한다. 또한 안드로이드에서 제공하는 다양한 뷰와 위젯을 표현하는 역할과 사용자로 하여금 그것을 사용할 수 있게 해 주어 UI 스레드라고도 불린다. 앱에 메인 스레드만 존재한다면? 앱이 단일 스레드 즉 메인 스레드만 존재하는 모델에서는 형편없는 성능을 낳게 된다. 메인 스레드에서 모든 작업을 처리한다면 네트워크 처리 및 데이터베이스 쿼리와 같이 오래 걸리는 작업을 하는 동안 UI와 관련된 작업을 처리하지 못하게 된다. 이..
OOP - DI(Dependency Injection)와 서비스 로케이터
2023. 2. 26. 14:28
OOP
📌 애플리케이션 영역과 메인 영역 로버트 C 마틴(Robert C. Martin) 은 소프트웨어를 아래의 2가지 영역으로 구분하고 있다. 애플리케이션 영역 고수준 및 저수준의 구현을 포함한 영역 메인 영역 어플리케이션 영역에서 사용될 객체를 생성 / 설정 / 실행한다 각 객체간의 의존 관계를 설정한다. 애플리케이션을 실행한다. 메인 영역과 애플리케이션 간의 의존은 다음 그림과 같게 되는데, 여기서 알 수 있는 점은 모든 의존은 메인 영역에서 애플리케이션 영역으로 향한다는 것이다. 즉, 반대의 경우인 애플리케이션 -> 메인 으로의 의존은 존재하지 않는다. 이는 메인 영역을 변경하더라도 애플리케이션 영역은 변경되지 않는다는 것을 뜻하며 따라서 애플리케이션에서 사용할 객체를 교체하기 위해 메인 영역의 코드를 ..
안드로이드 [Kotlin] - UI State 관리
2023. 1. 18. 22:01
Android
UI 레이어 UI의 역할은 화면에 애플리케이션 데이터를 표시하고 사용자 상호작용의 기본 지점으로서의 역할을 수행하는 것이다. 외부 이벤트로 인해 데이터 혹은 페이지가 변할 때마다 변경사항을 반영하도록 UI는 업데이트되어야 한다. UI State UI는 그저 Data 레이어에서 가져온 데이터만을 의미하지 않는다. 데이터를 가져오기 전 기본 상태가 있을 수 있고 데이터를 가져오는 도중의 로딩 상태가 있을 수 있다. 또한 데이터를 항상 성공적으로 가져온다는 보장이 없으므로 데이터를 가져오는데 실패했을 때도 있을 것이다. 공식문서에서는 "사용자가 보는 항목이 UI라면 UI State는 앱에서 사용자가 봐야 한다고 지정하는 항목" 이라고 표현한다. 즉 앱은 UI State에 따라 사용자에게 보이는 모습을 달리해야..
안드로이드 [Kotlin] - Bye LiveData, Hi StateFlow!
2023. 1. 8. 21:52
Android
데이터 홀더 클래스 UI의 역할은 화면에 애플리케이션의 데이터를 표시하고 사용자와의 상호작용의 기본이 되는 지점이다. 사용자 상호작용(Ex: 버튼 누르기) 또는 외부 I/O 작업(네트워크 응답)으로 인해 데이터가 변할 때마다 변경사항을 반영하도록 UI가 업데이트되어야 한다. LiveData LiveData는 관찰 가능한 데이터 홀더 클래스이다. 다른 관찰 가능한 클래스와 달리 LiveData는 생명주기를 인식한다. 즉 Activity, Fragment, Service 등의 생명주기를 인식하여 앱 개발 시 보다 더 유지보수하기 쉽게, 테스트하기 쉽게 만들어주는 라이브러리이다. 공식문서에서 말하는 LiveData를 사용했을 때 장점은 아래와 같다. Ensures your UI matches your data..