collectionView의 cellForItemAt indexPath는 왜 [0, 0] 같은 배열 형태인가
UICollectionView에서 사용하는 indexPath는 섹션(section)과 행(row)을 나타내는 정보를 포함하는 구조체(IndexPath)입니다. 이를 [section, row] 형식의 배열처럼 사용하는 것은 Swift에서 IndexPath가 배열처럼 동작하도록 설계되어 있기 때문입니다.
1. IndexPath
- IndexPath는 테이블 뷰 또는 컬렉션 뷰의 셀을 식별하기 위한 정보를 포함합니다.
주요 속성
- section: 컬렉션 뷰에서 섹션 번호.
- item 또는 row: 해당 섹션 내의 셀 번호.
예
- IndexPath(section: 0, item: 0)은 첫 번째 섹션의 첫 번째 셀을 가리킵니다.
- IndexPath(section: 1, item: 2)은 두 번째 섹션의 세 번째 셀을 가리킵니다.
2. 왜 [0, 0]처럼 보이나?
- IndexPath는 Foundation 프레임워크의 타입이며, 내부적으로 배열의 형태로 섹션과 아이템 정보를 저장합니다. 따라서 IndexPath를 배열처럼 접근할 수 있습니다.
let indexPath = IndexPath(row: 0, section: 1)
print(indexPath[0])
print(indexPath[1])
이 동작이 가능한 이유는 IndexPath가 배열 요소처럼 인덱스를 기반으로 값을 반환하도록 설계되어 있기 때문입니다.
3. 왜 섹션과 행을 분리하는가?
- 컬렉션 뷰나 테이블 뷰는 다중 섹션을 지원합니다. 섹션과 행을 분리하는 것은 데이터를 더 잘 구조화하고 관리하기 위해 사용됩니다.
예
- 한 화면에 여러 그룹(섹션)이 있고, 각 그룹 안에 여러 아이템(셀)이 있을 때:
- 섹션: 상위 그룹을 구분.
- 행(아이템): 해당 그룹의 하위 데이터를 구분.
4. Swift에서 배열처럼 보이는 이유
- IndexPath는 Collection 프로토콜을 준수하여 배열처럼 동작합니다.
- 내부적으로는 [section, item] 형태의 배열로 데이터를 저장하며, 배열 인덱스를 통해 section 또는 item 값에 접근할 수 있습니다.