타입프로퍼티?
항상 tableViewCell이나 collectionViewCell 만들면 무의식적으로 반복해서 가장 먼저 만들어주던 코드
static let identifier = "BookTableViewCell"
이걸 왜 했던 걸까? 분명 그 당시에는 이유를 알고 있었는데.. 명확하게 설명 못하는 걸 보면 몰랐떤 것이지..
아무튼 그 이유를 오늘 다시 알게 돼서 내 말로 정리를 하자면,
테이블뷰/컬렉션뷰를 만들어 줄 때 cellForRowAt 그러니까, 테블뷰/컬렉션뷰에 사용할 셀을 재사용해주는 과정에서
셀의 identifier을 문자열로 가져오는 경우가 있다.
이렇게...
그런데 이렇게 하다보면 휴먼에러로.. 오타가 나는 경우가 있고,
이걸 방지하기 위해서
타입 프로퍼티를 통해 해당 셀의 identifier를 셀 파일 내에서 선언해서 가져온다.
이때 나오는 개념이 타입 프로퍼티다.
타입 프로퍼티는 무엇인가.
쉽게 말하면 static이 붙은 거임
그 전에 프로퍼티는 무엇인가?
우리는 프로퍼티를 클래스/구조체 내에 있는 변수나 상수를 프로퍼티라고 부른다. 함수는 메소드라고 부르고.
좀 더 이야기를 해보자면
프로퍼티는 기능으로 나누면 저장 프로퍼티와 연산 프로퍼티 그리고 감시자 프로퍼티로 나눌 수 있다.
저장 프로퍼티는 선언과 동시에 초기화가 되어 있는 아이이다.
연산 프로퍼티는 아직 모르겠고요, 이름으로 치면 연산이 된다~ ezr
그리고 메모리 측면에서 보면 인스턴스 프로퍼티랑 타입 프로퍼티로 나눌 수 있다.
인스턴스 프로퍼티와 타입 프로퍼티의 차이점은 외적으로 봤을 때는 static이 붙고 안 붙고 차이이다.
근데 메모리 관점에서 보면 이런 거다.
타입 프로퍼티는 유일무이 the only임
그래서 타입 프로퍼티로 인스턴스를 생성하고 나서 호출을 해야만 메모리에 올라가고 초기화가 된다.
그리고 한 번 올라가면 앱이 꺼지기 전까지 메모리에서 사라지지 않는다.
글구 매번 생성되는 게 아니라 딱 한 번 생성되는 아이임..
매번 인스턴스를 생성해줘야 하는 저장 프로퍼티랑 다름
보면 이렇게 다름
title이라는 인스턴스 프로퍼티는 사용하려면 꼭 Book 클래스의 인스턴스를 따로 만들어 준 후에 접근 가능하다.
근데 author이라는 타입 프로퍼티는 사용하려면 따로 인스턴스를 만들지 않고 클래스에서 바로 접근 가능하다.
그렇기 때문에 타입 프로퍼티는 무조건 클래스에서 생성과 동시에 초기화를 해줘야만 한다.
그렇지 않으면 어케 접근하겠어!!!!!
class Book {
let title = "어서 오세요, 휴남동 서점입니다"
static let author = "황보름"
}
// 인스턴스 프로퍼티
let book = Book()
book.title
// 타입 프로퍼티
Book.author
근데 그러면 타입 프로퍼티를 왜 씀? 뭐가 좋아서 쓸까????????
인스턴스가 매번 생성되면 매번 메모리에 올라가 ->
근데 타프는 딱 한 번만 메모리에 올라가 ->
당연히 한 번 올라가는 게 좋겠지..
그럼 왜 셀 identifier를 타입 프로퍼티로 선언해주는 건가?
우선, Jack님께 여쭤보니 우선 구조상으로 그렇게 잡아주는 것이라고 말씀하심
그리고 타입 프로퍼티도 var로 선언되면 접근해서 수정이 가능함
안되는 줄 알았는데 되더라고?
'⭐️ 개발 > iOS & Swift' 카테고리의 다른 글
[Swift] Property Observer - didSet / willSet (0) | 2022.07.27 |
---|---|
[Swift] 타입/인스턴스 - 저장/연산 프로퍼티 (0) | 2022.07.27 |
[iOS] cell shadow + cornerRadius 같이 주는 방법 (0) | 2022.07.21 |
[iOS] Enum으로 코드 리팩토링 (0) | 2022.07.19 |
[iOS] for - in / forEach 동작구조? (0) | 2022.07.19 |