View

300x250

[iOS 앱개발 - Swift] 뷰 / 셀의 재사용

애플제품을 사용하는 걸 고려해본 사람이라면 ( + 성능에 관심이 있는 사람이라면 ) 애플이 iOS 기기들의 메모리에 굉장히 인색하다는 걸 알고있을 겁니다. 제가 갤노트2를 쓰고있을 때도( 약 2년전? ) 최신 아이폰이 갤노트2와 메모리용량이 같다는 걸 듣고 왜 그렇게 만들었을까를 생각해본 적이 있었는데, 메모리관리를 되게 효율적으로 잘 할 수 있도록 OS와 앱들 자체를 만들어놔서 그렇다는 결론이 나왔었어요. 이번에 공부한 내용도 이 작은 메모리를 관리하는 방법입니다!


재사용

만약에 사용자에게 보여줘야 할 데이터가 굉장히 많은데 메모리가 이를 담기에 부족하다면, 메모리를 효율적으로 관리해서 정보를 전달할 수 있도록 해야합니다. 전달을 위해 사용하는 요소들이 반복된다면 그 점을 이용해 메모리 점유량을 줄일수도 있겠죠. 이를 위한 방법을 소개합니다.

앞의 TableView에 대한 글과 예제에서 자주봤던 문장이네요. 이제야 이 문장의 진정한 의미에 대해서 알게되었습니다. ㅋㅋㅋ

 

메모리의 관리를 위해서 iOS에는 Reuse Queue, 즉 재사용 큐가 뒤에서 돌아가고 있는데, 테이블 뷰, 콜렉션 뷰의 Cell이 이 큐를 이용하는 대표적인 예시입니다.

 

페이지 안에는 존재하지만 화면에 보이지 않는 셀 (셀 안에 작은 SubView가 들어가있으니, 이것도 뷰라고 봐도 무방할 것 같네요) 을 그대로 남겨두지 않고, 재사용 큐에 담아 아래에서 다음에 화면위로 올라올 셀로 사용할 준비를 합니다. 스크롤 등의 액션으로 화면이 아래로 넘어가면, 아래에서 올라오는 셀들은 재사용큐를 확인해보고 재사용할 셀이 있으면 그걸 가져와 사용하고, 없다면 그냥 새로 생성해 사용하는 방법을 사용하게 됩니다. 모든 셀을 다 생성하지 않기 때문에, 여기서 메모리를 절약할 수 있게 됩니다.

 

 

물론 셀을 다음과 같은 방법으로 생성할 수도 있습니다. 대신 이렇게 하면 로드를 하는 중에 화면에 보이지 않는 모든 셀까지 다 만들기 때문에 메모리나 성능에 부하를 일으키게 되겠죠.

 

그래서 아래와 같은 문장으로 Reuse Queue에 담아두고, 필요할 때 필요한 만큼만 가져와서 만들어주게 되는거죠!

 

 

문서를 읽어보면, 만약에 재사용큐에 원하는 셀 또는 뷰가 없다면 새로운 뷰를 init( ) 하여 만들어주게 되고, 셀이나 뷰가 있다면 prepareForReuse() 메서드를 호출하여 재사용할 준비를 한다고 적혀있습니다. 주의할 점은, 성능문제를 야기할 수 있기 때문에 투명도, 편집, 선택 등의 셀 또는 뷰의 컨텐츠와는 상관 없는 옵션들만 수정하여 사용할 수 있다는 것입니다. 컨텐츠를 변경해야 한다면 아예 다른 뷰나 셀을 만들어서 사용해야 한다는 내용인 것 같네요. 그러나, 보통 한 화면에 담기는 컴포넌트들은 일관되게 만들기때문에 반복되는 컨텐츠가 많은 경우가 보통일 것이라 생각이 됩니다.

 

 

만들어보기!

다음 코드로 예를 들어볼게요. 앞의 포스팅에서 작성했던 예제를 재사용하여 예시를 들겠습니당. ㅋㅋㅋ

 

셀을 처음 만들어 줄 때, 1번 행에 있는 cell의 배경을 초록색으로 칠하는 코드를 작성해보죠. 만약에 코드가 정상적으로 실행되었다면, 각 섹션의 1번 Cell 만 초록색으로 칠해져야 할 겁니다. 그런데 만약 이상태로 빌드를 하면 다음의 화면을 얻게 됩니다.

 

재사용큐에 0번 섹션에서 초록색으로 칠해진 1번 행의 셀이 들어간 상태에서, 스크롤을 내리니 아래에서 올라올 준비를 하던 셀들이 해당 초록색 셀을 재사용하였기 때문에, 1번 섹션의 셀이 초록색으로 칠해져 올라오게 됩니다.

 

따라서 정확한 표현을 위해 다음처럼 코드를 작성해주면 우리가 원하는 결과를 얻을 수 있습니다. 

 

 

 재사용큐를 이용할 때 이 개념을 잘 생각하고 주의해서 코드를 작성해야 버그를 방지할 수 있겠네요!! 이래서 공부가 필요한가 봅니다 ㅋㅋ


이 포스팅은 edwith의 부스트코스 iOS 프로그래밍 강좌를 수강하면서 공부하고 내용을 정리하며 작성하는 글입니다. iOS 프로그래밍을 입문하여 공부하기에 정말 적절한 강의라고 생각이 됩니다. 모든 강의자료와 강의가 무료로 제공되어 부담없이 강의를 들을 수 있는게 이 강의의 장점이라고 생각합니다. 3주정도 강의를 들으며 매일 조금씩 공부하고 있는데, 확실히 프로젝트를 진행하면서 공부를 하니 실력이 늘어가는게 눈에 보이는 듯 하네요 ㅋㅋㅋ 처음에는 정말 하나도 모르겠었었는데.. 자신감이 붙고 있어요 ㅋㅋㅋ

 

혹시 강의에 관심이 있으신 분이라면 아래 링크를 타고 들어가서 한번 확인해보세요! 

https://www.edwith.org/boostcourse-ios/joinLectures/12966

 

[부스트코스] iOS 프로그래밍 강좌소개 : edwith

- 부스트코스

www.edwith.org

 

320x100
Share Link
reply
반응형
«   2024/04   »
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