https://medium.com/p/117b6f31f025
Say Goodbye to Fragments: How Jetpack Compose Redefines Modern Android Development (With Examples)
Jetpack Compose can completely replace fragments in modern Android development by providing tools and features that fulfill all the roles…
towardsdev.com
컴포즈는 현대 안드로이드 개발에서 전통적으로 fragment가 담당했던 모든 역할을 수행할 수 있는 도구와 기능을 제공하여 Fragment를 완전히 대체할 수 있습니다. UI 모듈화나, 생명주기 관리, 네비게이션 같은 것들이요. 컴포즈에서 이 교체방법에 대해 디테일 하게 설명하고 예제를 제공해보겠습니다.
내 기사는 모두에게 열려있습니다. 만약 구독을 하지않았다면 여기서 읽어주세요. 그렇지않으면 이어서 봐주세요.
1. Fragments는 보통 뭐에 사용되는가 ?
전통적으로 안드로이드 개발에서 fragments는 보통 이렇게 사용됩니다
- 재사용 가능한 컴포넌트 모듈화
- 액티비티 생명주기에 연결된 생명주기 인식 컴포넌트 관리하기
- FramgentManager를 이용한 화면간 네이게이션 단순화
- 동적인 UI 변경 지원 (container 뷰 내에 프레그먼트 변경)
컴포즈는 fragments에서 필요로 했던 부분을 제거합니다. 선언적이고, 컴포저블한 UI컴포넌트를 제공함으로써요.
생명주기 인식 API, 그리고 자체 네비게이션 메커니즘으로요,
2. Fragment의 기능을 컴포즈로 교체하는 방법
- UI 모듈화
컴포즈는 컴포저블 함수 (@composable) 을 사용해 재사용이 가능한 UI 컴포넌트 모듈을 생성합니다. fragments 와 다르게요.
이 컴포저블은 FragmentManager가 필요하지 않고, XML Layout file도 필요하지 않습니다.
예제
2개에 분리된 화면 정의
- Fragments 없이 네비게이션
컴포즈는 자체 네비게이션 컴포넌트를 제공합니다 (androidx.navigation.compose) fragments 없이 스크린 네비게이션을 핸들링 할 수 있습니다.
예제
컴포즈 네비게이션을 사용해서 스크린 관리
이 예제는 fragmentManager 대신에 NavHost를 사용하고, 각각의 composable 함수는 스크린을 나타내는것들입니다.
- 생명주기 인식
컴포즈는 안드로이드 생명주기와 긴밀하게 통합되므로, 생명주기 이벤트를 처리하기위해 fragment가 필요하지않습니다.
state와 Effect APIS를 사용해 생명주기 변화를 감지합니다.
이로인해 컴포저블 내에서 세밀한 생명주기 관리를 직접적으로 처리할 수 있습니다.
- 동적인 UI 처리 교체
Fragments는 종종 UI의 일부를 동적으로 교체하기 위해 사용되었습니다. 이 작업은 상태를 기반으로 표시할 컴포저블을 전환하는 선언적인 방식으로 처리할 수 있습니다.
동적 UI 전환 상태예제
- 애니메이션 전환
컴포즈는 Animation API가 내장되어있어, fragment 트랜잭션 애니메이션을 사용하지 않더라도 컴포즈들간에 부드러운 전환을 제공합니다.
AnimationVisiblity 를 사용한 전환 예제
Fragment들을 컴포즈로 교체함으로써의 강점
- 보일러플레이트 줄이기: XML Layout이 필요없습니다. FragmentManager 나 FragmentTransaction.
- 간단한 화면전환: Compose Navigation은 더 간결하고 쉽습니다
- 성능 향상: 컴포즈는 뷰 시스템과 프레그먼트에 과부하를 피하게 해줍니다
- 매끄러운 상태 처리: 상태 드리븐 UI는 복잡한걸 줄요주고, 재사용성을 향상시킵니다
- 강한 생명 주기 통합 : 컴포즈는 선언형 생명주기 처리가 가능하고, 생명주기 버그를 줄여줍니다.
Fragmenets없이 앱을 구성하는 방법
컴포즈 바탕인 앱에서, 아키텍쳐 구성은 다음과 같습니다.
- Activity: 네비게이션에 진입점 역할을 하며, NavHost를 세팅합니다
- Composables: UI 컴포넌트와 fragments 화면을 교체합니다
- ViewModel: UI 상태를 관리하며 비즈니스 로직을 담당합니다
- Navigation: 컴포즈 네비게이션을 사용해 선언형 처리를 합니다.
프로덕트 구조
완성된 예제
여기 간결하고 완성된 Fragment를 사용하지 않은 컴포즈 앱입니다.
이 구조는 Fragments의 모든 기능을 유지하면서 Fragments를 완전히 대체합니다.
컴포즈를 채택한다면, 완전히 현대적인 방식으로 전환할 수 있습니다. 선연형 방식은 안드로이드 개발을 더 간단하게 만들고, 상품성이 더 향상되며, 너의 코드가 모듈러 스럽고 유지보수하기 더 수월해집니다.
결론
컴포즈는 안드로이드 개발에서 패러다임의 전환을 나타냅니다. 대부분의 현대적인 사용 사례에서 Fragments를 불필요하게 만듭니다. ㅇ
컴포즈를 채택함으로써 다음과 같은 이점을 얻을 수 있습니다.
- 컴포저블 함수를 이용함으로써 더 깔끔해지고 코드베이스가 더 모듈화가 됩니다
- 복잡한 FragmentManager 를 제거함으로써 네비게이션 시스템이 더 단순해집니다
- 생명주기인식 컴포넌트와 UI 상태에 대한 보일러플레이트를 줄여주고, 버그를 줄여줍니다.
- 개발 주기가 더 빨라지고 실제 미리보기와 툴링이 더 강해집니다.
안드로이드 개발자라면, 컴포즈를 도입하면 작업을 단순화할 뿐만 아니라, 현대적인 앱 개발의 선두에 설 수 있습니다.
새로운 프로젝트나 레거시 리펙토링하든 컴포즈는 명확한 발전 방향입니다. 이번 시간에는 fragment 구조의 아키텍처를 떠나보내고 더 효율적이고, 선언적이고 즐길 수 있는 앱 생성 방법을 채택해보았습니다. 이제 미래를 위해 빌드하고 컴포저블을 사용해보세요.
읽어주셔서 감사합니다.
박수를 잊지마시고, 안드로이드 개발, 코틀린, 컴포즈, 좋은 예제를 읽고싶다면 팔로우해주세요.
만약 추가적인 도움이나 여러 질문들이 있다면 연락주세요.
기타
achieves 달성하다
tied to 구체적이고 강한 연결, 연결된
eliminates 제거하다 없애다
awareness 인식
fine-grained 세밀한
concise 간결한
acts as ~로서의 역할을하다
obsolete 불필요하게
embracing 채택
Streamline 간소화된
'영어 데일리' 카테고리의 다른 글
koin과 hilt의 벤치마킹 (1) | 2025.01.22 |
---|---|
안드로이드에서 ViewModel State를 모델링하여 깔끔하고 확장 가능한 패턴 만들기 (25.01.20) (0) | 2025.01.20 |
lime 안드로이드 엔지니어 인터뷰 경험 (25.01.17) (1) | 2025.01.17 |
jetpack compose 프로젝트를 사용할때 일반적으로 제일 유명한 3개의 애니메이션 (25.01.16) (0) | 2025.01.16 |
7가지의 알아야할 코틀린 flow 연산자 (25.01.14) (1) | 2025.01.14 |