"지정된 재사용 식별자에 대한 재사용 가능한 테이블 뷰 셀 객체를 반환하고, 이를 테이블에 추가합니다."

셀의 속성을 초기화시켜주지 않은 채 재사용하기 때문에 발생한다. 그래서 해결방법도 간단하다. 재사용되는 셀의 속성을 초기화시켜주면 된다.

// tableViewCell.swift
override func prepareForReuse() {
    super.prepareForReuse()

    self.accessoryType = .none
}

굳이 왜 DequeueReusableCellWithIdentifier를 사용할까?

데이터 소스와 테이블뷰 셀 인스턴스가 1:1로 대응되어 위에서 설명한 체크마크가 중복되는 등의 문제도 없을 것이다. 하지만 데이터가 1000개가 아니라 10만개라고 생각해보자. 이런 방식으로 cell을 모두 생성한다면 메모리 사용량 측면에서 효율이 매우 나쁜 설계일 것이다. 그래서 애플은 dequeueReusableCellWithIdentifier 방식으로 테이블뷰, 컬렉션뷰를 사용하도록 권장하고 실제로 훨씬 좋은 방법인것이다.

참고 https://sihyungyou.github.io/iOS-dequeueReusableCell/ https://zeddios.tistory.com/55