좀 더 현실적인 이름 목록을 만들어보자! 지금까지는 Column에 직접만든 greeting 함수를 사용하여 아이템을 2개만 나타냈었다. 하지만 만약 1000개 또는 그 이상을 다뤄야 한다면 어떨지 상상해보자.

Greetings에 있는 매개변수 기본 목록 값을 변경하고, 목록의 사이즈 및 내용을 람다 표현식으로 채울 수 있는 다른 목록을 사용해보도록 하자.

names: List<String> = List(1000) { "$it" }

이 목록을 사용하면 1000개의 greeting을 만들 수 있다. 이것은 심지어 한 화면에 담지도 못한만큼 많다. 분명이 이건 리소스 낭비고 성능을 저해하는 요소다. 실제로 한번 에뮬레이터에서 1000개 또는 그 이상의 아이템을 갖는 컴포저블 함수를 실행해보자. 나의 경우 목록의 아이템 갯수를 10000개 정도로 설정하니 갤럭시 z폴드2에서 Out Of Memory Error가 발생했다.

스크롤 가능한 Column을 보여주기 위해서 우리는 LazyColumn을 사용할 수 있다. LazyColumn은 화면에 보이는 항목만 렌더링한다. 큰 목록을 렌더링할 때 성능측면에서 이점이 있다.

Note: LazyColumn 과 LazyRow 는 안드로이드 View로 치면 RecyclerView와 동등한 개념이다.

일반적인 용법에서 LazyColumn API는 자신의 코드 블럭내에서 items 함수를 제공한다. 이를 통해 개별항목들이 작성한 코드 로직을 따라 렌더링 될 수 있도록 한다. 예제코드를 살펴보자.

@Composable
private fun Greetings(names: List<String> = List(1000) { "$it" } ) {
    LazyColumn(modifier = Modifier.padding(vertical = 4.dp)) {
        items(items = names) { name ->
            Greeting(name = name)
        }
    }
}

Note: import시 패키지가 androidx.compose.foundation.lazy.items 인지 확인하자.

Note: LazyColumn 은 RecyclerView처럼 하위 항목을 재사용하지 않는다. 대신 스크롤을 따라 새로운 Composable 객체를 발행한다. 성능적으로 좋고, 안드로이드 Views를 초기화하는 것보다 상대적으로 비용이 적다.

카테고리: Compose

0개의 댓글

답글 남기기

Avatar placeholder

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.