본문 바로가기

Project/MovieClip

📍함수의 역할 -> configure<T: SelfConfiguringTVCell> () { }

🔍 Configure<T: SelfConfiguringTVCell>() { }

이 함수의 역할은 제네릭을 사용하여 UICollectionView의 셀을 재사용하고, 특정 모델(TvTMDBResult)을 설정

private func configure<T: SelfConfiguringTVCell>(_ cellType: T.Type, with model: TvTMDBResult, for indexPath: IndexPath) -> T {

    guard let cell = seriesCollectionView.dequeueReusableCell(withReuseIdentifier: cellType.reuseIdentifier, for: indexPath) as? T else { fatalError("Unable to deque \(cellType)")}

    cell.configure(with: model)
    return cell
}

 

 

🛠 함수의 역할

private func configure<T: SelfConfiguringTVCell>(_ cellType: T.Type, with model: TvTMDBResult, for indexPath: IndexPath) -> T


제네릭을 사용 (T: SelfConfiguringTVCell)

  • TSelfConfiguringTVCell 프로토콜을 준수하는 타입(셀).
  • 즉, 이 함수는 어떤 셀 타입이든 SelfConfiguringTVCell을 따르고 있다면 사용할 수 있음.

 

guard let cell = seriesCollectionView.dequeueReusableCell(withReuseIdentifier: cellType.reuseIdentifier, for: indexPath) as? T else { 
    fatalError("Unable to deque \(cellType)")
}

 

셀을 dequeueReusableCell로 재사용

 

  • dequeueReusableCell을 사용해 특정 cellType의 셀을 재사용 큐에서 가져옴.
  • cellType.reuseIdentifier를 사용하여 셀을 가져오기 때문에, 재사용 식별자(reuseIdentifier)가 올바르게 설정되어 있어야 함.
  • 캐스팅(as? T)이 실패하면 fatalError를 발생시켜 크래시를 방지.

 

cell.configure(with: model)

 

셀에 TvTMDBResult 모델을 전달하여 데이터 설정

 

  • SelfConfiguringTVCell을 따르는 셀은 configure(with:) 메서드를 구현해야 함.
  • 이 메서드를 호출하여 셀 내부에서 모델 데이터를 UI에 적용할 수 있음.

 

🚀 사용 예시

SelfConfiguringTVCell 프로토콜이 아래와 같이 정의되어 있다고 가정

protocol SelfConfiguringTVCell {
    static var reuseIdentifier: String { get }
    func configure(with model: TvTMDBResult)
}

 

 

TVShowCell이 이 프로토콜을 따르도록 구현

class TVShowCell: UICollectionViewCell, SelfConfiguringTVCell {
    static let reuseIdentifier: String = "TVShowCell"

    func configure(with model: TvTMDBResult) {
        titleLabel.text = model.name
        ratingLabel.text = "⭐️ \(model.voteAverage)"
        // 이미지 로드, UI 업데이트 등...
    }
}


let cell: TVShowCell = configure(TVShowCell.self, with: tvShow, for: indexPath)

 

 

 

🎯 결론

✔️ 제네릭을 사용하여 다양한 셀 타입을 유연하게 처리
✔️ 셀을 안전하게 dequeue하고 모델 데이터를 설정하여 UI 업데이트
✔️ 반복되는 dequeueReusableCell 코드 줄여서 가독성을 높임
✔️ 특정 셀 타입을 강제하지 않고, SelfConfiguringTVCell을 따르는 모든 셀에서 사용 가능

 

즉, UICollectionView에서 여러 종류의 셀을 사용할 때 코드 중복 없이 재사용하기 위한 최적화된 방식이야! 🚀🔥

 

 

🔷 이 함수에서 TvTMDBResult를 전달하는 이유는 딱 두 가지

  1. 실질적으로 셀에서 필요한 영화 정보(제목, 장르, 개요 등)가 들어있기 때문
    • 셀에서는 영화의 제목, 포스터, 장르, 개요 등을 UI에 표시해야 하니까,
      TvTMDBResult 모델이 직접 필요함.
  2. 셀에서도 TvTMDBResult 데이터가 필요하기 때문
    • configure(with: model)을 호출할 때, TvTMDBResult가 전달되면
      셀에서 직접 데이터를 UI에 적용할 수 있음.