Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

일왓록(日What錄)

[Swift][UIKit] Static Cells, Dynamic prototypes와 뭐가 다르지? - UITableView 본문

iOS/UIKit

[Swift][UIKit] Static Cells, Dynamic prototypes와 뭐가 다르지? - UITableView

일왓 2023. 8. 16. 17:00

TableView를 스토리보드로 다루다 보면 Content를 설정할 수 있다.

많은 경우에 Dynamic Prototypes로 설정해서 TableView를 구성한다.

필자도 그렇고 아마 모두가 그럴 것이다.

 

하지만 클릭해보면 다음과 같이 Static Cells이 있다.

Static Cells로 설정하면 크게 달라지는게 없어 보인다.

단순히 ProtoType Cells 자리에 Sections로 바뀌고  스토리보드 파일에 있는 TableView가 Prototype Content 글씨가 사라지고 별 변경은 없어보인다.

 

그럼 두가지가 무슨 차이가 있을까 문득 궁금해졌다.

그 차이를 한번 알아보자


Static Cells

사실 Static Cells를 알아보기도 쉽지 않았다. 검색했을때 자료도 거의 나오지 않았고 공식 문서도 찾는데 애를 먹었다.

 

그래도 결국 Static Cell에 대한 정보를 찾았다.

 

Filling a table with data | Apple Developer Documentation

Create and configure cells for your table dynamically using a data source object, or provide them statically from your storyboard.

developer.apple.com

Specify data statically in the storyboard

Use static tables to save time during prototyping or when your table’s contents never change. With static tables, you specify all of your table’s data up front in your storyboard file; you don’t implement a data source object. At runtime, UIKit loads that data from your storyboard and manages it for you. Because you can’t change the data in static tables at runtime, use them sparingly in your shipping apps.

Configure static tables in your storyboard file:
1. Add a UITableViewController object to your storyboard.
2. Select the table view controller’s table view.
3. Change the table view’s Content attribute (in the Attributes inspector) to Static Cells.
4. Specify the number of sections for your table using the table view’s Sections attribute.
5. Set the Row attribute of each section to the number of rows you want.
6. Configure each cell with the views and content you want.

Important
Table views with static data require a UITableViewController object to manage that data.

Don’t use static data if there’s a chance you might want to update your table view’s content in the future. It’s a programmer error to assign a data source object to a UITableViewController whose table view contains static data.

해석 하면 다음과 같다.

 

스토리보드에서 정적으로 데이터 지정
정적 테이블을 사용하여 프로토타이핑 중이나 테이블 내용이 절대 변경되지 않을 때 시간을 절약하십시오. 정적 테이블을 사용하면 스토리보드 파일 테이블의 모든 데이터를 미리 지정합니다. Data Source 개체를 구현하지 않습니다. 런타임에 UIKit은 스토리보드에서 해당 데이터를 로드하고 관리합니다. 런타임에 정적 테이블의 데이터를 변경할 수 없기 때문에 출시 앱에서 이를 드물게 사용하십시오.

스토리보드 파일에서 정적 테이블을 구성합니다.
1. 스토리보드에 UITableViewController 객체를 추가합니다.
2. 테이블 뷰 컨트롤러의 테이블 뷰를 선택합니다.
3. 테이블 뷰의 Content 속성(Attributes inspector에서)을 Static Cells로 변경합니다.
4. 테이블 보기의 Sections attribute를 사용하여 테이블의 섹션 수를 지정합니다.
5. 각 섹션별 행 속성(개수)을 number of rows로 설정하십시오.
6. 원하는 View와 콘텐츠로 각 셀을 구성합니다.

중요
정적 데이터가 있는 테이블 뷰는 해당 데이터를 관리하기 위해 UITableViewController 개체가 필요합니다.

나중에 테이블 뷰의 내용을 업데이트할 가능성이 있는 경우 정적 데이터를 사용하지 마십시오. 테이블 뷰에 정적 데이터가 포함된 UITableViewController에 데이터 소스 개체를 할당하는 것은 프로그래머 오류입니다.

<구글 번역기 해석 및 약간의 의역>

 

즉, 애플이 설계한 Static Cells의 목적은 테이블 내용의 변경사항이 없을때, 스토리 보드로만 셀을 구성하여 시간을 절약하라는 것이다. Static(정적)이라는 말에 걸맞게 각  Table을 미리 특정하여 런타임 시점의 로딩 또는 실행 시간을 아끼거나 코드 작성 시간 등을 아끼자는 목적이다.

 

하지만 그 조건은 테이블의 내용을 변경할 필요가 없을 때이다. 말 그대로 정적일 경우일 때이다. 스토리보드의 내용을 미리 로딩하여 관리하는 방식이기 때문에 스토리보드에 있는 테이블 내용을 그대로 보여주는 것이다. 그로써 로딩 또는 실행 시간을 아낀다는 것인데, 사실상 테이블의 내용이 변경된다면  그 유동적인 코드를 실행하고 반영하고 하면서 그 이점이 없어지는 것이다. 그러므로 테이블의 내용이 일절 변경되지 않을 때 사용해야한다.

 

그리고 또 다른 조건은 UITableViewController 인스턴스가 필요하다는 것이다. 즉, ViewController에 UITableView를 얹어서 사용할 때는 사용이 불가능하다.

 

 

ViewController에 다음과 같이 UITableView를 얹어서 StaticCells을 사용하려고 하면 다음과 같은 오류가 난다. 스토리보드에 UITableViewController를 사용하는 경우에만 사용이 가능하다.

 

사용법

사용법은 다음과 같다. 위에서 적어 놓은 것 처럼,

1. 제일 먼저 UITableViewController 개체를 스토리보에 끌어 놓는다 .

2.UITableViewController의 TableView를 선택한다.

3. Attributes inspector에 들어가서 TableView Content 속성을 Static Cells로 한다

4.  Content 속성 밑에 있는 Sections를 통해 섹션 수를 정한다.

5. Section을 클릭하여 Rows를 통해 numberOf rows를 설정한다.

 

6. inspector 및 스토리보드를 통해 원하는 뷰를 작성한다.

 

 

Static Cells, Dynamic Prototypes와의 차이점

 Dynamic Prototypes와의 가장 큰 차이점은 Static Cells는 DataSource를 구현하지 않아도 되고(안해야하며), Dyanmic Prototypes는 DataSource를 구현해야 한다는 것 이다. Prototype은 테이블 뷰를 어떻게 구성할 것 인지에 대해 DataSource를 통해 명시 해야되지만, Static Cells는 스토리 보드에 구성한 것으로 관리 되기 때문에 DataSource가 필요 없다.

즉, 화면 구성에 있어서 Static Cells은 스토리 보드로만 구성하고, Dynamic Prototypes는 스토리보드 + 코드를 혼합하거나 코드만 사용하여 구성한다.

 

그리고 필자가 느끼는 또다른 차이점은 UIViewController에서 사용할 수 있는지다.

Static Cells는 UIViewController에서 사용하지 못하고 오직 UITableViewController에서만 사용할 수 있지만, Dynamic Prototype은 UIViewController에서도 Delegate와 DataSource를 통해 구현할 수 있다.

 

간단 정리

정말 간략하게 정리하자면 UITableView를 구성하는데 있어서 동작을 제외한 화면을 구성하는 면에서 Static Cells는 스토리보드로만 작성한 것으로만 UITableView를 구성할 수 있고, Dynamic Prototypes은 스토리 보드 또는 코드를 통해 작성한 Prototype Cell들을 DataSource를 작성하여 구성한다. 즉, 코드 + 스토리보드를 혼합하거나 코드만 사용하여 구성해야한다.

 

 

 

⚠️이 글은 필자가 새싹, 서적(꼼꼼한 재은씨의 스위프트), 블로그 등을 토대로 습득한 내용을 정리해보면서 다시 공부하는 글입니다. 개념을 습득하는 과정 중 잘못된 개념이 있을 수 있으니 그 점에 유의하시길 바라며, 잘못된 내용은 피드백을 해주시면 감사드리겠습니다.⚠️

'iOS > UIKit' 카테고리의 다른 글

[UIKit]UIViewController LifeCycle: 공식 문서에 따른 이해  (0) 2024.04.11