[Flutter] ListView.builder를 사용하는 이유

Raon·2022년 6월 6일
0

Flutter

목록 보기
3/24

플러터를 사용해 리스트를 처음 구현했을 때 ListView.builder를 사용하라는 블로그 글을 통해 리스트를 구현했었다.
처음에는 "그냥 이렇게 구현하는건가 보다~"하고 넘어갔는데, 플러터 개발자로 취업을 하고, 정말 다양한 리스트 위젯을 구현하다보니 리스트를 구현하는 과정에서 다양한 방법이 있다는 것을 알게 됬다.

다양한 방법은 다음과 같았다.

  • Column, Row 위젯을 SingleChildScrollView 위젯으로 감싸는 방법을 통해 구현하는 방법
  • LisView 위젯을 통해 구현하는 방법
  • ListView.builder를 통해 구현하는 방법

이 외에도 더 많은 방법이 있을 것 같지만 현재까지 내가 즉답으로 답할 수 있는 리스트를 구현하는 방법은 위의 3가지이다. 이 3가지 방법을 사용하다가 문득, 이런 생각이 들었다.

"보여지는 화면은 똑같은데, 왜 굳이 3가지 방법이 존재하는거지?"

그래서 인터넷을 뒤적거리며 조사를 하고, 이에대한 차이점을 공부했는데, 이 글을 보는 사람들은 검색을 수고로움을 덜 수 있도록 차이점을 작성하고자 한다.

SingleChildScrollView + Column(or Row)

  • 장점
    • 위젯 리스트 요소 하나하나에 직접 간섭하기 쉽다.
    • 무작위 복잡한 위젯구조의 리스트를 구현할때 사용하면 좋다.
  • 단점
    • 리스트 내의 모든 위젯을 모두 그린다. (성능 이슈가 생길 수 있다.)
    • Keyboard가 올라오고 내려올 때 적절한 조치를 취하지 않으면 원치 않는 UI 렌더가 발생하며 이로인해 렌더링 관련 이슈가 생길 수 있다.

ListView

  • 장점
    • 리스트 UI를 구현하기 쉽다.
    • 리스트 UI를 구현하기 위한 다양한 옵션을 제공한다.
  • 단점
    • 기본 사이즈가 무한대이기 때문에 사이즈를 지정해줘야한다.(SizedBox, Container, Expanded, Flexible 등으로 감싸면 된다.)
    • SingleChildScrollView + Column(or Row)와 마찬가지로, 리스트 내 모든 위젯을 한번에 그리기 때문에 성능 이슈가 있을 수 있다.

ListView.builer

  • 장점
    • ListView의 장점을 모두 포함한다.
    • 추가적으로, ListView.builder는 화면에 보여지는 요소만 그린다. 이로 인해 수천, 수만 이상의 요소를 리스트로 만들어도 부담이 적다.
  • 단점
    • 기본 사이즈가 무한대이기 때문에 ListView처럼 사이즈를 지정해줘야한다.

결론

  • 우리가 리스트 UI를 구현할 때는 보통 같은 형태의 UI를 여러개 보여주기 위해 사용하는 경우가 대부분이다. 그런 점에서, ListView.builder는 손쉽게 리스트 UI를 구현할 수 있는(추가적으로 성능 최적화도 해주는!) 방법이라고 생각한다.
profile
Flutter 개발자

2개의 댓글

comment-user-thumbnail
2022년 12월 9일

아주 좋습니다

답글 달기
comment-user-thumbnail
2023년 9월 9일

안녕하세요. 좋은 글 잘 읽었습니다. 감사합니다.

화면을 만들다 보면 상단에 앱바가 있고 아래쪽에 리스트가 있는 형태가 많습니다. 그런데 아래쪽에 리스트 전체가 동일 형태의 반복이면 그냥 Listview.builder로 만들면 되는데, 상단에 검색바가 있다던지 헤더가 있다던지 하는 형태들이 있습니다.
이런 경우에는 어떻게 하는게 좋다고 생각하시는지요? 나름 생각한 부분이 있긴 한데..또 다른 해결책들이 있는지 궁금해 글 남깁니다.
좋은 하루 보내세요~ :)

답글 달기