🔍 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)
- T는 SelfConfiguringTVCell 프로토콜을 준수하는 타입(셀).
- 즉, 이 함수는 어떤 셀 타입이든 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를 전달하는 이유는 딱 두 가지
- 실질적으로 셀에서 필요한 영화 정보(제목, 장르, 개요 등)가 들어있기 때문
- 셀에서는 영화의 제목, 포스터, 장르, 개요 등을 UI에 표시해야 하니까,
TvTMDBResult 모델이 직접 필요함.
- 셀에서는 영화의 제목, 포스터, 장르, 개요 등을 UI에 표시해야 하니까,
- 셀에서도 TvTMDBResult 데이터가 필요하기 때문
- configure(with: model)을 호출할 때, TvTMDBResult가 전달되면
셀에서 직접 데이터를 UI에 적용할 수 있음.
- configure(with: model)을 호출할 때, TvTMDBResult가 전달되면
'Project > MovieClip' 카테고리의 다른 글
📍함수의 역할 -> reloadData() { } (0) | 2025.02.21 |
---|---|
📍 함수의 역할 -> createDataSource() { } (0) | 2025.02.21 |
🤔 영화 정보를 통합해서 관리할 필요가 있나? (0) | 2025.02.21 |
✅ hash(into:) 메서드와 == 연산자의 역할 (0) | 2025.02.20 |
❌ 문제 발생... UICollectionViewDiffableDataSource.. 데이터 중복으로 인한 데이터 누락 (0) | 2025.02.20 |