Ch 06. 넷플릭스 스타일 영화 추천 앱 만들기

1 분 소요

스크린샷 2022-07-30 오전 5 00 13 스크린샷 2022-07-30 오전 5 00 48

기능 상세:
  • 서로 다른 크기와 형태를 가진 셀의 목록
  • 세로 방향은 컨셉별로, 가로 방향은 각각의 컨셉에 속한 컨텐츠들로 구성
활용 기술:
  • UICollectionView
    • 유연하게 변경 가능한 레이아웃을 사용하여 특정 타입형태로 정렬된 데이터 집합을 표시하는 방법
    • 행과 열의 나열 뿐만 아니라 다양한 배열 구현을 가능(격자무늬, 스택형태, 원형 레이아웃, 동적 변경 레이아웃)
    • 데이터, 레이아웃 영역이 분리되어 각자 역할에 맞는 정보를 제공, UICollectionView는 두 영역을 종합하여 최종 형태 구축
      • 데이터와 해당 데이터를 표시하는 데 사용되는 시각적 요소(layout)를 엄격하게 구분
      • 뷰를 가져와서 화면에 배치하는 모든 작업 또한 개발
    • UICollectionView 관련 Class와 Protocol
Purpose Classes/Protocols Role
Top-level containment and management ⋅UICollectionView
⋅UICollectionViewController
⋅시각적인 요소 정의
⋅UIScrollView 상속
⋅Layout 정보 기반 데이터 표시
Content management ⋅UICollectionViewDataSource
⋅UICollectionViewDelegate
⋅DataSource: Content 관리 및 Content 표시에 필요한 View 생성(필수)
⋅Delegate: 특정 상황에서 View 동작 custom(선택)
Presentation ⋅UICollectionReusableView
⋅UICollectionViewCell
⋅Header, Footer..
⋅재사용 가능
Layout ⋅UICollectionViewLayout
⋅UICollectionViewLayoutAttributes
⋅UICollectionViewUpdateItem
⋅각 항목 배치 등 시각적 스타일 담당
⋅View를 직접 소유하지 않는 대신 Attributes 생성
⋅데이터 항목 수정시 UpdateItem 인스턴스 수신
Flow layout ⋅UICollectionViewFlowLayout
⋅UICollectionViewDelegateFlowLayout
⋅Grid, line-based layout 구현
⋅레이아웃 정보를 동적으로 Custom
  • Compositional Layout (UICollectionViewCompositionalLayout)
    • Advances in Collection View Layout
    • 구성가능하게
      복잡한 결과를 단순한 것으로 구성하기
    • 유연하게
      이 것만으로 모든 레이아웃을 작성 가능하게하기
    • 빠르게
      프레임워크에서 자체 성능 최적화 수행
    • 세가지 메인 구성요소
      • LayoutItem
        • 화면에 렌더링되는 단일 뷰
        • 컬렉션 뷰에서 개별 컨텐츠의 크기, 공간, 정렬 방법에 대한 청사진 역할
      • LayoutGroup
        • item들이 서로 관련하여 배치되는 방식을 결정해서 결합하는 역할
        • 항목을 가로행, 세로열 또는 사용자 지정 배열로 배치 가능
      • LayoutSection
        • 그룹으로 이루어짐
        • 컬렉션뷰 레이아웃에는 하나 이상의 Section
        • 레이아웃을 각각의 영역으로 분리하는 방법을 제공
        • 각 세션은 컬렉션 뷰의 다른 섹션과 레이아웃이 같거나 다를수 있음(속성에 의해 결정)
      • Layout
        • 모든 구성요소들을 반영
      • Size
        • Absolute
          • 절대적인 값
        • Estimate
          • 추정 값, 예상 값
          • 런타임에 컨텐츠 크기가 변형될 수 있는 경우(데이터 로드, 시스템 글꼴 크기 변형)
          • 초기 추정 크기를 제공하면 시스템이 나중에 실제 값을 계산해서 반영
        • Fractional
          • 분수 값을 사용해서 item 컨테이너를 기준으로 값을 정의
  • SnapKit
    • 코드 베이스로 UI를 구현하고 Auto Layout을 고려해야할 때 직관적이고 간편하게
      작성할 수 있도록 도와주는 오픈소스프레임워크(No Storyboard)
  • Swift Package Manager
    • SnapKit 같은 외부라이브러리를 활용하기 위해 사용(Like CocoaPods)
    • 패키지를 사용하고자 하는 프로젝트에 SnapKit에 대한 Dependency 주소를 넣어줌