지식

플러터 그리드 위젯 완벽 가이드: GridView로 반응형 UI 만들기

플러터 그리드 위젯 완벽 가이드

플러터(Flutter)는 하나의 코드베이스로 iOS, Android, Web까지 동시에 빌드할 수 있는 크로스 플랫폼 프레임워크입니다.
그중에서도 **플러터 그리드 위젯(GridView)**은 격자형 형태의 레이아웃을 간단하게 구성할 수 있는 핵심 도구죠.
리스트뷰(ListView)가 세로 방향의 단일 리스트라면, 그리드 위젯은 가로와 세로로 아이템을 동시에 배치할 수 있는 강력한 위젯입니다.

예를 들어 쇼핑몰 앱의 상품 목록, 포토 갤러리, 카드형 뉴스 피드 등을 만들 때 바로 이 GridView가 사용됩니다.


플러터 그리드 위젯의 핵심 개념

플러터의 GridView는 여러 형태로 제공됩니다.
기본적으로 다음 네 가지 방식으로 사용할 수 있습니다.

  1. GridView.count – 고정된 열 개수를 설정
  2. GridView.extent – 각 항목의 최대 크기로 자동 배치
  3. GridView.builder – 대량의 데이터를 효율적으로 렌더링
  4. GridView.custom – 완전한 커스터마이징이 필요한 경우

이 중 가장 많이 사용되는 건 countbuilder입니다.


GridView.count – 고정 열 갯수 지정하기

가장 간단한 형태의 플러터 그리드 위젯은 GridView.count입니다.
다음 예시는 한 줄에 2개의 아이템이 표시되도록 설정합니다.

GridView.count(
  crossAxisCount: 2,
  crossAxisSpacing: 10,
  mainAxisSpacing: 10,
  padding: EdgeInsets.all(8),
  children: List.generate(6, (index) {
    return Container(
      color: Colors.blueAccent,
      child: Center(
        child: Text(
          '아이템 $index',
          style: TextStyle(color: Colors.white),
        ),
      ),
    );
  }),
);

💡 Tip: crossAxisSpacingmainAxisSpacing은 아이템 간의 간격을 설정합니다.
crossAxisCount 값이 2이면 2열 구조의 그리드가 만들어집니다.


GridView.builder – 많은 데이터 효율적으로 처리하기

데이터 수가 많거나 API를 통해 비동기적으로 데이터를 가져올 때는 GridView.builder가 가장 적합합니다.
이 위젯은 스크롤할 때 필요한 부분만 렌더링하므로 성능이 매우 뛰어납니다.

GridView.builder(
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 3,
    crossAxisSpacing: 8,
    mainAxisSpacing: 8,
  ),
  itemCount: 30,
  itemBuilder: (context, index) {
    return Card(
      color: Colors.teal,
      child: Center(
        child: Text(
          'Item $index',
          style: TextStyle(color: Colors.white),
        ),
      ),
    );
  },
);

🔥 성능 팁:
builder 방식은 스크롤 중 보이지 않는 위젯은 제거하고 다시 생성하기 때문에 메모리 사용량이 매우 효율적입니다.


GridView.extent – 아이템 크기로 자동 맞추기

GridView.extent는 항목의 최대 너비를 기준으로 자동으로 열 개수를 결정합니다.
이 방식은 다양한 화면 크기에서 반응형 디자인을 구현할 때 매우 유용합니다.

GridView.extent(
  maxCrossAxisExtent: 150,
  children: List.generate(12, (index) {
    return Container(
      color: Colors.orangeAccent,
      child: Center(child: Text('Box $index')),
    );
  }),
);

📱 장점: 기기의 화면 폭에 따라 자동으로 아이템 개수가 조정되어 반응형 레이아웃에 이상적입니다.


SliverGrid – 고급 커스터마이징용

플러터의 CustomScrollView 안에서 그리드를 사용할 때는 SliverGrid를 활용할 수 있습니다.
이 위젯은 복잡한 스크롤 동작(예: 상단 헤더 고정, 섹션 구분)을 만들 때 매우 유용합니다.

CustomScrollView(
  slivers: [
    SliverAppBar(
      floating: true,
      title: Text('SliverGrid Example'),
    ),
    SliverGrid(
      delegate: SliverChildBuilderDelegate(
        (context, index) => Container(
          color: Colors.blueGrey,
          child: Center(child: Text('Item $index')),
        ),
        childCount: 20,
      ),
      gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
        crossAxisCount: 2,
      ),
    ),
  ],
);

반응형 UI를 위한 팁

플러터 그리드 위젯을 사용할 때는 단순히 아이템을 나열하는 것보다 화면 크기 변화에 대응하는 레이아웃 설계가 중요합니다.

화면 크기에 맞춘 열 개수 조절

int getCrossAxisCount(BuildContext context) {
  double width = MediaQuery.of(context).size.width;
  if (width > 1200) return 5;
  if (width > 800) return 3;
  return 2;
}

이처럼 기기 폭에 따라 열 개수를 조정하면, 웹/태블릿/모바일 환경에서도 깔끔한 레이아웃을 유지할 수 있습니다.


이미지 갤러리 예시

다음은 실제 프로젝트에서 자주 사용되는 그리드 이미지 갤러리 예제입니다.

GridView.builder(
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
    crossAxisCount: 3,
    crossAxisSpacing: 4,
    mainAxisSpacing: 4,
  ),
  itemCount: imageList.length,
  itemBuilder: (context, index) {
    return Image.network(
      imageList[index],
      fit: BoxFit.cover,
    );
  },
);

🖼️ 이미지 alt 예시 (SEO용)
<img src="grid-example.jpg" alt="플러터 그리드 위젯 예제 화면">


성능 최적화 팁

  1. const 생성자를 가능한 한 사용하세요.
  2. GridView.builder를 기본으로 활용하고, 불필요한 rebuild를 줄이세요.
  3. ListView와 함께 사용할 때는 shrinkWrap: true를 고려하세요.
  4. 아이템에 고정된 높이를 주면 렌더링 속도가 향상됩니다.

정리: 플러터 그리드 위젯의 장점

항목설명
가독성직관적 코드로 복잡한 레이아웃 구현 가능
성능Lazy loading으로 메모리 효율적
반응형화면 크기에 따라 자동 조정
확장성SliverGrid 등으로 다양한 커스터마이징 가능

결론: Flutter GridView로 완성하는 반응형 앱 디자인

플러터 그리드 위젯은 UI 효율성과 디자인 완성도를 동시에 높일 수 있는 위젯입니다.
GridView.count로 간단한 격자를 만들고, GridView.builder로 대용량 데이터를 처리하며,
필요할 경우 SliverGrid를 이용해 복잡한 화면 구성까지 가능합니다.

이제 여러분의 Flutter 프로젝트에서도 그리드 기반 반응형 UI를 적용해 보세요.
한층 완성도 높은 앱 디자인이 가능합니다!

eorbaos1985

Recent Posts

Aluminium OS – 구글의 차세대 Android 기반 PC OS

Aluminium OS - Android가 PC로 향하는 이유와 의미 2025년 말, 구글이 내부 코드명 “Aluminium”로 불리는…

3개월 ago

2026년 기준중위소득 100% · 120% — 1~4인 가구 기준 완전정리

1. 2026년 기준중위소득이란? 2026년 기준중위소득은 대한민국 전체 가구의 중간 소득을 의미하며, 정부의 다양한 복지사업과 지원제도의…

3개월 ago

한국, 월드컵 2포트 진입 추진! 월드컵 2포트의 장단점 총정리

월드컵 2포트 진입, 왜 이렇게 중요한가? 한국 축구 대표팀이 월드컵 2포트 진입을 목표로 국제 A매치를…

3개월 ago

플러터 스키아 엔진 완전 이해: 왜 플러터는 스키아로 빠른 UI를 만드는가

플러터 스키아 엔진 완전 이해: 왜 플러터는 스키아로 초고속 UI를 구현할까 플러터(Flutter)는 단 하나의 코드베이스로…

3개월 ago

Flutter 생명주기 완벽 이해: 위젯의 생성부터 소멸까지 한눈에 정리

Flutter 생명주기란 무엇인가? **Flutter 생명주기(Lifecycle)**란, 앱 실행 중 위젯이 생성되고 사라지기까지의 전 과정을 의미합니다.즉, Flutter…

3개월 ago

연세대 AI 컨닝 사태 전말과 파장 — 대학 교육 윤리에 던진 경고

1. 사건 개요 — 연세대 중간고사에서 벌어진 AI 컨닝 2025년 11월 초, 연세대학교 신촌캠퍼스의 한…

3개월 ago