[Flutter] ListView vs ListView.builder vs SingleChildScrollView: 언제 어떤 걸 쓸까?

서연·2025년 9월 26일
post-thumbnail

📖 ListView vs ListView.builder vs SingleChildScrollView

📌 ListView

  • 모든 자식 위젯을 스크롤 가능한 목록 형태로 표시하는 위젯이다.
  • children 속성에 위젯들을 넣으면 끝이다

🔎 특징

  • 스크롤하지 않아도 보이지 않는 위젯까지 전부 메모리에 생성한다.
  • 아이템이 많아지면 성능 저하 발생한다.

✅ 사용 예시

  • 아이템 개수가 적고 간단한 정적 리스트를 표현할 때 사용한다.

📌 ListView.builder

  • ListView의 한 종류로 긴 목록을 효율적으로 만드는 방식이다.
  • itemBuilder 함수를 사용하여 화면에 보이는 아이템만 생성한다. (Lazy building)
  • 보이지 않는 아이템은 미리 만들지 않는다.

👍 장점

  • 성능 최적화에 좋다.
  • 많은 개수의 아이템 또는 무한 스크롤 구현에 적합하다.

👎 단점

  • 아이템 수가 적고 고정된 경우엔 코드가 불필요하게 길어질 수 있다.

✅ 사용 예시

  • 데이터 개수가 많거나 무한 스크롤이 필요한 경우에 사용한다.
  • 성능/ 메모리 최적화가 중요한 경우에 사용한다.

📌 SingleChildScrollView + Column

  • 리스트 아이템이 아니라 자유로운 레이아웃에 스크롤이 필요할 때 사용한다.
  • SingleChildScrollView는 하나의 자식만 스크롤 가능하여 그 안에 Column을 넣어 여러 위젯을 세로로 나열한다.

🔎 특징

  • 보이지 않는 위젯까지 모두 한 번에 빌드 및 메모리 로드한다.
  • 자식 개수가 많아지면 성능 저하와 높은 메모리 사용이 발생한다.
  • Column 안에서는 Expanded를 사용할 수 없는 레이아웃 제약이 있다.

✅ 사용 예시

  • 자식 개수가 적거나 중간 정도일 때 사용한다.
  • 입력 폼, 섹션이 나뉜 페이지, 복잡한 화면 레이아웃에 스크롤이 필요할 때 사용한다.

0개의 댓글