Menu
Menu
Posts List
  1. CompositionalLayout vs FlowLayout
    1. 개념 비교
    2. 기능 비교 요약
      1. FlowLayout
      2. CompositionalLayout
    3. 언제 무엇을 쓰는게 좋을까?
    4. 성능 팁

CollectionViewLayout

CompositionalLayout vs FlowLayout

UICollectionViewFlowLayout(이하 FlowLayout)과 UICollectionViewCompositionalLayout(이하 CompositionalLayout)은 iOS 컬렉션 뷰 레이아웃을 구성하는 두 가지 대표 방식이다. 두 레이아웃의 개념/기능 차이와 장단점, 선택 가이드, 실무 팁을 간단히 정리!


개념 비교

  • FlowLayout
    • 행/열 규칙에 따라 자동 배치되는 단순 리스트/그리드 전용 레이아웃.
    • 전역 속성(아이템 크기, 간격, 인셋) 중심. 섹션별로 다른 형태를 만들려면 서브클래싱/오버라이드가 필요.
  • CompositionalLayout
    • Item → Group → Section을 선언적으로 조립하는 범용 레이아웃 엔진.
    • 섹션별 상이한 구조(카루셀, 모자이크, 배너+그리드 등)를 서브클래싱 없이 구성 가능.

기능 비교 요약

항목 FlowLayout CompositionalLayout
섹션별 상이한 레이아웃 제한적(커스텀 필요) 매우 용이
가로 캐러셀(carousel) 사실상 불가(중첩 CV 필요) 내장
핀 헤더(Sticky) sectionHeadersPinToVisibleBounds = true pinToVisibleBounds
섹션 배경/데코레이션 서브클래싱 + 등록 필요 NSCollectionLayoutDecorationItem
Self-Sizing estimatedItemSize .estimated(...)(아이템/그룹 단위)
러닝커브 낮음 높지만 강력
iOS 지원 iOS 6+ iOS 13+

FlowLayout

장점

  • 설정 단순, 러닝커브 낮음.
  • 단순 리스트/격자에서 오버헤드 최소.
  • 구(iOS 12 이하)까지 폭넓은 호환성.

단점

  • 섹션마다 전혀 다른 레이아웃을 만들기 어렵다.
  • 가로 카루셀/모자이크 등 복합 배치에 한계.

CompositionalLayout

장점

  • 섹션 단위로 완전히 다른 레이아웃을 선언형으로 구성.
  • 환경(NSCollectionLayoutEnvironment)에 따라 동적 대응(열 수 변경 등)이 쉬움.
  • 중첩 컬렉션 뷰 없이 복합 피드를 성능/접근성면에서 깔끔히 구현.

단점

  • API가 길고 개념 학습 필요.
  • 복잡한 Self-Sizing/중첩 그룹은 계산 비용이 커질 수 있음.
  • iOS 13+ 요구.

언제 무엇을 쓰는게 좋을까?

  • 단순 리스트/그리드(뉴스 피드, 3열 격자 등): FlowLayout (또는* *UICollectionLayoutListConfiguration* *고려)
  • 복합 피드(배너 + 가로 카루셀 + 그리드 + 핀 헤더 + 섹션 배경): CompositionalLayout
  • 가로 스크롤 섹션을 섞고 싶다: CompositionalLayout의 orthogonalScrollingBehavior 채택
  • iOS 12까지 지원 필요: FlowLayout(또는 커스텀 레이아웃) 유지

성능 팁

  • Self-Sizing는 필요한 곳에만, estimated 값을 적절히(너무 작지도 크지도 않게) 설정.
  • 카루셀 섹션은 아이템/그룹 크기를 절대값 또는 고정 비율로 두면 계산이 단순해져 부드러움.
  • cornerRadius/마스크/그림자는 오프스크린 렌더링 유발 → 컨테이너 분리(바깥 그림자, 안쪽 모서리), 재설정 최소화.
  • 프리페칭/백그라운드 이미지 디코딩·리사이즈, 셀 재사용 최적화 필수.