Android Compose 장점 및 이해

임찬형·2022년 2월 4일
0

Android Compose

목록 보기
1/16

Android Compose의 사용 이유

1. 코드의 양 감소

  • 목록이나 애니메이션을 만드는 데 필요한 코드가 적게 필요함

  • Kotlin과 Xml 파일을 전환하며 작업하지 않아 관리하기 좋음

  • 코드의 길이가 줄어들어 유지 보수 장점

2. 직관적

  • 선언적 API를 사용하여 UI만 설명하면 되므로 직관적

3. 빠른 개발 과정

  • 기존의 모든 코드들과 호환 (Views를 Compose에서, Compose를 Views에서 호출 가능함)

  • ViewModel, Navigation 및 Coroutine 등 일반적인 라이브러리도 자유롭게 사용 가능함

  • Preview 기능을 제공하여 UI 구성요소를 미리 확인 가능하며 빠른 개발 가능

4. 편리한 기본 지원 기능

  • 머티리얼 디자인, 어두운 테마, 애니메이션을 기본적으로 지원

  • 원하는 대로 디자인하고 싶다면 머티리얼 디자인을 분리할 수 있음

Compose의 이해

Composable 함수

  • UI 요소를 내보내는 함수이며, 반환값이 필요하지 않음

    Greeting 함수는 name을 전달받아 Text 위젯을 화면에 내보냄

동적 콘텐츠

  • Xml이 아닌 Kotlin으로 작성하므로 동적임.

    위 함수에서 for문 안에 if를 추가하여 특정 이름은 출력하지 않게 하는 등 동적으로 생성할 수 있음

재구성

  • 위젯을 변경하려면 위젯에서 setter를 호출해 내부 상태를 변경해야 함
    ex) textfield에서 키보드 입력 시 textfield의 text 상태를 변경

위 함수에서 Button 클릭 시 onClick 람다가 호출되고, clicks 값 업데이트. 이후 Text는 바뀐 clicks 값을 사용해 재구성 (Text 재호출)

+) Compose는 새 입력이 들어왔을 때 자동으로 변경되었을 수 있는 함수, 람다만 호출하고 나머지는 건너뛰므로 효율적임

재구성 시 주의점
  • 부작용이 없어야 함 (부작용에 의존 X)
    ex) 공유 객체 속성에 쓰기, viewModel에서 식별 가능한 요소 업데이트, 공유 환경설정 업데이트 등

Composable 함수의 특징

  1. 순서와 관계없이 실행될 수 있음

    StartScreen에서 전역변수를 설정하고 MiddleScreen에서 활용 불가능함

  2. 동시에 실행될 수 있음

    위 함수가 여러 스레드에서 동시에 호출될 수 있고, 그럴 경우 items 변수가 모든 재구성에서 수정되어 잘못된 값으로 설정될 수 있음

  3. 재구성은 가능한 한 많이 건너뜀

    위 함수에서 header만 변경되어 재구성하는 경우, NamePicker 함수의 상위 Composable 및 header를 참조하지 않는 LazyColumn 부분은 재구성하지 않음

  4. 재구성은 낙관적임
    컴포저블의 매개변수가 변경되었을 가능성이 조금이라도 있다면 재구성함
    (모든 Composable 함수 및 람다에 부작용이 없어야 함)

  5. Composable 함수는 매우 자주 실행될 수 있음

    • UI 애니메이션의 모든 프레임에서 호출될 수 있음
    • 비용이 큰 함수를 호출할 경우 UI 버벅거림이 발생할 수 있음

0개의 댓글