본문 바로가기
🍎 Swift/iOS 학습 노트

[Swift🍎] tableView, collectionView 식별자 간단하게 관리하기!

by 솔비님 2024. 10. 31.

 

 

프로젝트 할 때마다 collectionView, tableView 식별자 만들고, 다시 갖다쓰는 과정이 번거로웠는데

해결할 수 있는 간단한 방법을 알아냈다!!!!!! 👏🏻👏🏻

 

 

 

방법 1.  - 비추

먼저 가장 기본적인 방법부터 설명하자면 식별자를 문자열로 설정하는 방법이 있다

tableView.register(UITableViewCell.self, forCellReuseIdentifier: "MyTableViewCell")

let cell = tableView.dequeueReusableCell(withIdentifier: "MyTableViewCell", for: indexPath)
cell.textLabel?.text = "Hello Swift"

 

tableView.register 등록 시 식별자를 문자열(ex. "MyTableViewCell") 등으로 임의 설정 후

cell 등록 시 동일한 식별자를 입력해 주는 거다

 

이러한 방법은 식별자를 수기 등록하여  오탈자 발생 시 에러가 발생할 수 있고 관리 및 유지보수가 어렵다는 단점이 있다

 

 

 

 

방법 2.  

그래서 사용하던 방법이 식별자만 관리하는 파일을 만든 후 Identifier을 enum 열거형으로 그룹화하여 끌어다 쓰는 방식이다

실제 사용 중인 파일

 

 

해당 방법처럼 예시를 만들어 보자면 문자열 식별자 "MyTableViewCell"을 myTableViewCell에 담아준 후

identifiers.swift

enum Identifiers {
	static let myTableViewCell = "MyTableViewCell"
}

 

 

사용할 곳에서 호출해서 넣어주면 된다

tableView.register(UITableViewCell.self, forCellReuseIdentifier: identifiers.MyTableViewCell)

let cell = tableView.dequeueReusableCell(withIdentifier: identifiers.MyTableViewCell, for: indexPath)
cell.textLabel?.text = "Hello Swift"

 

 

이번에 정리하면서 알아 보았는데, 이러한 방법을

정적 속성(static property) 접근 또는 타입 속성(type property) 접근 이라고 한다

  • 정적(static): 열거형 또는 구조체의 인스턴스를 생성하지 않고도 해당 속성이나 메서드에 접근할 수 있도록 해줍니다.
  • 상수(constant): let 키워드로 선언된 속성으로, 값이 한 번 설정되면 변경할 수 없습니다.

 

이러한 방법은 오탈자가 발생하지 않아 관리와 유지보수가 용이한 장점이 있다

 

 

그리고 가장 마지막으로 찾은 방법!!! 

 

 

 

방법 3.  - 강추  

class이름을 String값으로 바꾸는 extension을 만들어 준 후 계~속 가져다 쓰는 방법이다

이 방법은 2번 방법처럼 새로운 식별자가 생길 때 마다 선언해줄 필요도 없다

 

extension NSObject {
    
    // 인스턴스가 어떤 클래스의 객체인지 문자열로 반환
    var className: String {
        return String(describing: type(of: self))
    }
    
    // 클래스 자체의 타입 이름을 문자열로 반환
    class var className: String {
        return String(describing: self)
    }
}

 

 

extension을 최초 1회만 만들어 준 후 Cell의 파일명에 .className을 붙여 클래스 이름을 문자열로 변환하여 식별자로 활용한다

tableView.register(UITableViewCell.self, forCellReuseIdentifier: MyTableViewCell.className)

let cell = tableView.dequeueReusableCell(withIdentifier: MyTableViewCell.className, for: indexPath)
cell.textLabel?.text = "Hello Swift"

 

 

이러한 방법은 

1.  매번 식별자 이름을 고민하는 리소스를 줄일 수 있으며

2.  컬렉션뷰 또는 테이블뷰 생성 시마다 새로운 식별자를 등록할 필요도 없고

3.  클래스 이름 자체를 식별자로 활용할 수 있다는 장점이 있다

4.  당연히 오탈자나 잘못 들어갈 확률도 없어서 관리와 유지보수도 간편하다

 

 

진짜 최고 짱이다