안녕하세요. 다사다난한 2020년이 지나고 이제 2021년이 되었네요. 모두 고생 많으셨고, 새해에는 모두가 즐겁고 행복한 한해가 되었으면 좋겠습니다. 모두 새해 복 많이 받으세요!
2021년 처음으로 작성할 내용은 간단하게 TableView Cell 등록, 재사용하기입니다.
우선 일반적으로 셀을 등록하고 재사용하는 코드를 보도록 하겠습니다.
셀 등록
셀 재사용
코드들을 보시면 셀 등록 시에는 nibName과 forCellReuseIdentifier를 넣어주어야 하고, 셀 재사용 시에는 withIdentifier를 넣어주어야 하는데 세개의 파라메터 전부 String을 값을 받도록 되어 있습니다.
일반적인 방법으로 사용해도 상관은 없지만 개인적인 생각으로는 유지보수 측면에서 4가지 위험 요소가 있습니다.
그렇다면 위에 일반적인 방법의 문제점을 어떻게 해결할 수 있을까요? 방법은 간단합니다. 프로토콜을 만들어서 위임 받아 사용하면 됩니다.
프로토콜 정의
TableViewCelled란 이름으로 프로토콜을 정의합니다. 여기서 프로토콜명은 원하시는 것으로 변경하셔도 상관 없습니다.
정의한 프로토콜을 Extension을 활용해서 기능을 정의해줍니다.
셀의 클래스명, NibName, ID 맞추기
간단하게 사용하는 방법의 핵심은 클래스명, NibName, ID를 맞춰서 사용하는 것입니다.
이렇게 통일하는 이유는 위에서 정의한 reuseIdentifier과 NibName이 String(describing: self)를 리턴하는데, 클래스 명을 리턴하기 때문에 클래스명과 동일하고 NibName과 ID를 맞추어야 register와 dequeueReusableCell을 간단하게 사용할 수 있기 때문입니다.
Nib 파일명 맞추기
셀 ID 맞추기
셀에 프로토콜 위임
특정 셀에만 추가하고 싶으면 셀에 프로토콜을 위임 받도록 합니다.
모든 셀에 동일하게 프로토콜을 위임 받으려면 UITableViewCell extension 만들어 위임 받으면 모든 테이블 뷰 셀에서 사용 가능하게 됩니다.
셀 등록
여기서 tableView는 셀을 등록할 테이블 뷰 인스턴스입니다.
셀 재사용
일반적인 방법보다 코드가 더 명확하고 간결해진 것을 확인 할 수 있습니다. 위에서 얘기한 4가지 문제점에 대해서도 해결이 된 것을 확인할 수 있는데요.
-> 클래스명을 기준으로 하기 때문에 수정이 발생하면 nibName과 id만 수정해주면 됨
-> 테이블 뷰 셀의 클래스에 종속적으로 사용되기 때문에 존재하지 않는 셀에 대해서 입력하는 실수를 컴파일 단에서 바로 잡을 수 있고, 수정 누락이나 오타에 대한 문제도 없음
-> 셀이 추가, 삭제가 된다고 하더라도 따로 관리 해주지 않아도 되기 때문에 코드의 통일성이 생김
-> 확실한 타입 캐스팅이 가능하기 때문에 코드도 간결해지고 캐스팅이 실패하지 않음
지금까지 간단하게 TableView Cell 등록, 재사용 하는 방법에 대해서 알아보았습니다.
테이블 뷰 같은 경우엔 많이 사용되는 컨트롤 중에 하나이기 때문에 항상 반복적으로 어렵게 사용하는 코드를 어떻게 하면 간결하고 편하게 할 수 있을까 고민 했는데 간결하고 명확하게 사용할 수 있는 방법을 찾아내서 개발의 피로도가 좀 더 낮아졌습니다.
여러분도 피로도를 줄일 수 있도록 한번 사용해보세요. 다른 부분에서도 응용을 하면 좋은 아이디어가 나올 것 같은데, 이건 저도 연구를 해봐서 좋은 코드가 나온다면 그걸로 글을 한번 써보겠습니다.
그럼 달콤한 코딩 되세요!
How to use the coordinator pattern in iOS apps
Storyboarded 프로토콜에서 힌트를 얻음