# 이걸 왜 공부하게 되었나요?

ZOOC 개발하면서 펫 등록 part에서 셀의 인덱스가 꼬이는 문제가 발생했고,

데모데이날 피카북 팀한테…. 그리고 QA 시간과 승찬이형한테 문제점을 지적받고

공부를 해서 고쳐야겠다고 느꼈다!

그리고 소복소복 코드를 보면서 해결을 했다 Shout out sbsb

# 공부한 내용 정리하기

1. 왜 이런 문제가 일어났을까?

딱 정의하면 셀을 재사용해서 생기는 문제이다!

만약 저기 안에 들어있는 textField를 각각 만들어주고 +버튼 누르면 hidden 풀고 - 누르면 hidden하고 했으면 이런 문제는 일어나지 않겠지만… 우린 테이블뷰로 셀을 재사용 했기 때문에 indexPath가 꼬이게 되는 것이다!

더 자세히 생각해보면 아래의 코드처럼 셀을 지정하고, dataBind로 연결을 한다고 생각을 해보자.

그럼 첫번째로 저 셀 안에 있는 컴포넌트들의 index는 어케 알게 되는거지..? 라는 문제가 생기게 되고

저렇게 셀이 만들어졌을때 지정된 indexPath를 인덱스로 지정하고 reloadData를 해서 바뀌는 index는 어케 수행되는건지..? 알 수가 없다!

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        guard let cell = tableView.dequeueReusableCell(withIdentifier: OnboardingRegisterPetTableViewCell.cellIdentifier, for: indexPath)
                as? OnboardingRegisterPetTableViewCell else { return UITableViewCell() }
        cell.delegate = self
        cell.dataBind(model: petRegisterData[indexPath.row], index: indexPath.row, petCount: petRegisterData.count)
        return cell
    }

func dataBind(model: OnboardingPetRegisterModel, index: Int, petCount: Int) {
         updateUI(model: model, index: index, petCount: petCount)
}

2. 어떻게 해결할 것인가?

2-1. tag를 활용해서 매칭하기

셀의 indexPath와 그 안에 컴포넌트의 tag값을 매칭해야 된다!

일단 셀 안에 컴포넌트들에게 “야 너도 너가 속해있는 셀이랑 같은 indexPath야!” 라고 알려줘야 된다.

그러기 위해서 우리는 tag라는 개념을 사용할 것이다.

+) tag?

공식문서에서 tag는 아래와 같이 소개하고 있다.