728x90
반응형

Android 37

Jetpack Compose의 렌더링 단계

Jetpack Compose가 하는 핵심적인 역할은 데이터를 UI로 변환하는 것이다. 이 과정에서 컴포지션, 레이아웃, 드로잉이라는 세 가지 주요 단계를 거치게 된다. 이러한 단계들은 일반적으로 단방향 데이터 흐름을 따르며, Compose는 성능 최적화를 위해 동일한 입력에 대한 반복 작업을 피하게 된다.컴포지션 단계 : 화면에 무엇을 보여줘야 할 지 결정레이아웃 단계 : 각 요소가 화면에 어디에 보여줘야 할 지 결정그리기 단계 : 각 요소를 화면에 어떻게 그리는지 결정 1. 컴포지션 단계컴포지션 단계에서는 화면에 무엇을 보여줄지 결정한다. Compose 런타임은 Composable 함수를 실행하고 UI를 나타내는 트리 구조를 출력한다. 이때 코드 상의 Composable 함수는 트리의 노드와 1:1로 ..

Android 2024.12.06

Hilt를 사용한 의존성 관리

https://github.com/yundoun/Android-Dependency-Injection-with-Hilt.git GitHub - yundoun/Android-Dependency-Injection-with-HiltContribute to yundoun/Android-Dependency-Injection-with-Hilt development by creating an account on GitHub.github.com  Hilt를 사용한 의존성 관리이 프로젝트는 Hilt를 학습하기 위해 클린 아키텍처 + MVVM 으로 구현된 프로젝트입니다.위 예제를 통해서 Hilt에 대해 학습합니다.Domain 계층 (Model, Repository Interface, UseCases)Data 계층 (Room..

Android 2024.12.05

[Jetpack Compose] Compose의 Side Effect (부작용)

Jetpack Compose에서 Side Effect(부작용)는 컴포저블 함수의 스코프 밖에서 애플리케이션 상태가 변경될 때 발생하는 변화를 의미한다. 컴포저블 함수는 주기적으로 재구성(Recomposition)되며, 이러한 재구성은 예측하기 어려운 순서로 실행되거나 폐기될 수 있기에, 컴포저블 함수 내에서 부작용이 발생하면 불안정한 동작을 유발할 수 있다. 따라서 컴포저블 함수는 기본적으로 부작용이 없는 것이 이상적이다.하지만 부작용이 필요한 경우가 있다. 특정 상태에 따라 SnackBar를 표시하거나 다른 화면으로 전환하는 등의 작업이 필요할 때는 부작용이 발생할 수밖에 없다. 이런 작업들은 컴포저블 함수의 생명 주기를 제어할 수 있는 환경에서 수행되어야 한다. 이를 위해서 Jetpack Compos..

Android 2024.09.10

[Jetpack Compose] Composable 수명 주기

컴포저블(Composable)의 수명주기는 Jetpack Compose에서 UI의 상태 변화와 관련된 중요한 개념이다. 컴포저블은 UI의 구성 요소로서 상태가 변경될 때 재구성(Recomposition) 과정을 통해 UI를 갱신하게 되며, 이를 통해 효율적으로 상태 변화를 처리한다.1. 컴포지션(Composition) 이란?컴포지션은 컴포저블을 실행하여 앱의 UI를 설명하는 과정이다. 앱의 상태에 따라 적절한 UI가 구성되며, 이를 컴포지션 트리(Composable Tree)라고 한다. 즉, UI를 구성하는 각 컴포저블이 트리 구조로 표현된다.초기 컴포지션 : 앱이 처음 시작될 때, 컴포저블이 호출되어 UI가 초기화 된다.리컴포지션 : 앱의 상태(State 객체 등)가 변경될 때 Jetpack Compo..

Android 2024.09.09

[Jetpack Compose] Compose에서의 Statelss/Stateful

명령형 프로그래밍과 비교하여 Compose 선언형 접근 방식에 있어서 UI요소는 기본적으로 상태가 없는 Stateless라고 일컫는다. 그러나 컴포저블 내부에서 상태 관리가 불가능하다는 것이 아니고, Stateful 컴포저블 또한 존재한다. 여기서 우리는 Stateless와 Stateful에 대한 개념을 한 번 정리하고 갈 필요가 있다.Compose의 선언형 접근 방식의 핵심은 UI 요소가 상태를 직접적으로 관리하지 않으며, getter와 setter를 노출하지 않는다는 점이다. Stateless와 Stateful Stateless는 말 그대로 상태가 없는 것을 뜻하며, 컴포넌트나 UI 요소가 자체적으로 상태를 저장하지 않는다는 뜻이다. 이와 대조되는 개념은 Stateful 상태로 상태를 자체적으로 관리..

Android 2024.09.06

[Jetpack Compose] Jetpack Compose의 이해

Jetpack Compose는 기존의 명령형 xml을 대신하고 Android를 위한 현대적인 선언형 UI 프레임워크이다.Compose는 명령형으로 변형하지 않고도 앱 UI를 렌더링할 수 있게 하는 선언형 API를 제공하여 앱 UI를 더 쉽게 작성하고 유지관리할 수 있도록 지원한다. 선언형 UI를 통해 UI를 더 직관적이고 유지보수하기 쉽게 만드는 한편, 재구성(Recomposition) 매커니즘을 통해 성능을 최적화한다.  1. 선언형 UI의 개념UI를 어떻게 업데이트할지 명령하는 대신, 어떤 상태가 되었을 때 UI가 어떻게 보여야 하는지를 선언하는 방식이다.  Jetpack Compose에서는 UI 상태에 따라 화면을 구성하는 컴포저블 함수들이 실행되며, 앱의 상태가 변경될 때마다 필요한 부분만 다시 ..

Android 2024.09.06

[Android] ViewModel의 인스턴스 공유 문제 + hiltNavGraphViewModels

문제 원인MVVM 디자인 패턴을 따라서 앱 제작을 하던 중 두 Fragment간 ViewModel의 인스턴스 공유 문제가 발생했다.private val homeViewModel: HomeViewModel by viewModels()나는 처음엔 Fragment의 각각에 위 코드를 작성하면 같은 ViewModel을 사용할 것이라고 생각했다. 하지만 by viewModels()를 사용하면 각 Fragment가 고유한 ViewModel 인스턴스를 생성하기 때문에 LiveData가 변경되더라도 Fragment에서 감지하지 못했다. 이는 각각의 Fragment가 서로 다른 ViewModel 인스턴스를 참조하고 있었기 때문이다. 해결 방법해결 방법은 간단했다.private val homeViewModel: HomeV..

Android 2024.07.08

[Android] ViewPager2에 관련된 속성들

ViewPager2를 이용해서 이미지 슬라이드를 만들다 보면 다양한 속성들이 필요하다. clipToPadding : ViewHolder에서 슬라이딩 시 설정된 패딩 값을 무시하고 뷰가 보여지게 한다.clipChildren : 부모 뷰가 자신에게 할당된 영역 외에 다른 영역으로 확장되어 보여질 수 있게 한다.offscreenPageLimit : 슬라이드 시 앞뒤 페이지 데이터를 미리 로드한다.setpageTransformer : 페이지 간 간격을 커스텀 변환을 통해 설정한다. => 페이지 전환 시 효과를 주는 데 사용setPadding : 설정된 패딩 값이 커질수록 뷰가 서로의 영역에 침범하는 범위가 넓어진다.orientation : ViewPager2의 페이지 스크롤 방향을 수평 또는 수직으로 설정한다...

Android 2024.05.03

[Android] String Resources - <string-array>로 깔끔하게 관리하자

위와 같이 문자열 태그로 제목을 만들기 위해 다음과 같이 코드를 작성했다. private List createTagMenuItems2() { List menuList = new ArrayList(); menuList.add(new TagMenuItem("#로맨스")); menuList.add(new TagMenuItem("#드라마")); menuList.add(new TagMenuItem("#학원/액션")); menuList.add(new TagMenuItem("#옴니버스")); menuList.add(new TagMenuItem("#판타지/SF")); menuList.add(new TagMenuItem("#공포/스릴러")); menuList.add(new TagMenuItem("#개그")); menuL..

Android 2024.04.02

[Android] ViewPager2에 custom indicator 연결하기

https://ehdnsdlek.tistory.com/31 저번 게시글에는 ViewPager2를 이용해서 자동으로 Slide 되게끔 만들어 보았습니다. 거기에 추가로 좌측 하단에 Indicator를 만들어 보겠습니다 1. customView를 만들기 위해 클래스 만들기 기초 코드는 https://black-jin0427.tistory.com/95 여기서 가져왔습니다. // CircleIndicator.java public class CircleIndicator extends LinearLayout { private Context mContext; private int mDefaultCircle; private int mSelectCircle; private List imageDot = new ArrayL..

Android 2024.03.18
728x90
반응형
LIST