앱을 개발하다보면, 99% 확률로 리스트 를 만나게 될 것 입니다. 리스트 없는 앱? 진짜 1% 에 속하려나요...? 있긴..하겠죠?
오늘은 List 를 그리는 3가지 방법을 알아볼까 합니다.
단순히 스크롤이 가능하게 하기 위한 Scroll 위젯들은 이번에 다루지는 않습니다. ^^
ListView 를 그리는 방법은 총 3가지가 있으며, 이 3가지는 각기 다른 차이가 존재합니다.
그리고 앞으로는 몰라서, 귀찮아서, 그냥 이렇게 하라길래 가 아닌 정확한 차이를 알고 썼으면 좋겠습니다.
먼저, 세가지 방법에 대해서 코드와 실행결과를 확인해주시면 될 것 같아요~!
builder 를 이용하여 짜여진 ListView
separated 를 이용하여 짜여진 ListView
그렇다면, 이렇게 짜여진 세가지 방법은 서로 어떤 차이가 있는 걸까요?? 그리고 어떤 상황에서, 대체 뭘 써야 할까요????
ListView | ListView.builder | ListView.separated | |
스크롤 가능 여부 | 가능 | 가능 | 가능 |
구분자 적용의 편안함 | 불편함 | 보통 | 편함 |
렌더링 시점 | 첫 생성시 모든 아이템 렌더링 | 동적으로 필요에 따른 렌더링 | 동적으로 필요에 따른 렌더링 |
특정 아이템만 리렌더링 | 불가능 | 가능 | 가능 |
성능 | 하 | 상 | 상 |
언제 사용? | 모든 아이템을 생성시에 미리 렌더링해놓고, 그 아이템 개수가 적을 때 사용 | 동적으로 아이템을 삽입/삭제 해야 하거나, 아이템 개수가 많은 경우에 사용 | 동적으로 아이템을 삽입/삭제 해야 하거나, 아이템 개수가 많으면서 아이템과 아이템 사이에 구분이 필요한 경우에 사용 |
ListView.builder 와 ListView.separated 의 차이가 구분자 처리 하나뿐이라면 ListView.builder 는 구분자 처리를 못하나요??
-> 그렇지 않습니다. ListView.builder 도 구분자 처리를 할 수 있습니다. 오히려 구분자가 매우 단순하다면, ListView.builder 가 좋습니다.
ListView.builder 보다 ListView.separated 가 항상 더 좋은거 아닌가요???? 구분자가 해당 위젯을 비워두어도 되니까???
-> 그렇지 않습니다.
1. 구분자를 그려야하는지 말아야하는지 판단하기 위한 내부로직이 동작해야하는데, 이때 구분자를 그릴필요없다면, 이는 불필요한 오버헤드로 이어집니다.
2. 각 구분자가 매우 단순하거나, 동일한 경우에는 ListView.builder 가 좋습니다. 각 구분자가 100개까지는 A 타입, 100개 이후부터 B타입 등으로 다른 구분자를 필요로 하는 등 복잡한 구분자라면, ListView.separated 가 좋습니다.
3. 구분자도 결국 메모리를 필요로 합니다. 리스트의 아이템개수가 너무 많은 경우에 이러한 구분자를 위한 메모리도 그만큼 늘어납니다.
저는 왠만하면 ListView.builder 혹은 ListView.separated 둘중 하나를 사용하는 것을 추천합니다.
그와중에도
구분자가 복잡한 디자인을 가지고 있는 경우, 구분자가 index에 따라서 다르게 처리되는 경우 엔 ListView.separated 를 추천합니다.
구분자가 단순히 회색선, 모든 구분선이 동일 한 경우에는 ListView.builder 를 추천합니다.
'Flutter > Flutter 이론' 카테고리의 다른 글
StatefulWidget vs StatelessWidget vs FunctionWidget (0) | 2024.02.04 |
---|