SwiftUI List 완벽 마스터: 예제와 함께 살펴보자!
SwiftUI List 완벽 가이드: 예제와 베스트 프랙티스
SwiftUI List는 iOS 앱에서 스크롤 가능한 데이터 리스트를 표시하는 강력하고 유연한 컴포넌트입니다. 이 가이드는 SwiftUI List의 기본 사용법부터 고급 기능 및 실용적인 예제까지 모든 것을 다룹니다.
SwiftUI List 소개
SwiftUI List는 뷰의 목록을 생성하고 관리하는 데 사용됩니다. 정적 및 동적 데이터 소스를 모두 지원하며, 외관과 동작을 맞춤 설정할 수 있는 다양한 옵션을 제공합니다. List
는 데이터 바인딩과 SwiftUI의 선언적 문법을 활용하여 매우 직관적이고 간편하게 리스트를 구성할 수 있게 해줍니다.
기본 사용법
간단한 리스트를 생성하려면 배열 데이터와 뷰 빌더를 사용하여 List
를 초기화할 수 있습니다:
swiftstruct ContentView: View { let items = ["Item 1", "Item 2", "Item 3"] var body: some View { List(items, id: \.self) { item in Text(item) } } }
여기서 id: \.self
는 리스트 아이템의 고유 식별자를 지정하는 역할을 합니다. 이는 리스트가 아이템을 효율적으로 추적하고 업데이트할 수 있게 해줍니다.
동적 리스트
리스트는 동적 데이터 소스를 지원하며, ForEach
와 함께 사용하여 동적으로 생성된 아이템을 표시할 수 있습니다:
swiftstruct ContentView: View { @State private var items = ["Item 1", "Item 2", "Item 3"] var body: some View { List { ForEach(items, id: \.self) { item in Text(item) } } } }
@State
어노테이션은 데이터가 변경될 때마다 뷰를 다시 렌더링하도록 합니다.
고급 기능
-
멀티 선택
@State
변수와selection
파라미터를 사용하여 멀티 선택 기능을 활성화할 수 있습니다:swift@State private var selectedItems = Set<String>() var body: some View { List(items, id: \.self, selection: $selectedItems) { item in Text(item) } .toolbar { EditButton() } }
EditButton
은 리스트의 편집 모드를 전환할 수 있게 해줍니다. -
데이터 새로고침
refreshable
수정자를 사용하여 풀 투 리프레시 기능을 구현할 수 있습니다:swiftvar body: some View { List { ForEach(items, id: \.self) { item in Text(item) } } .refreshable { await fetchData() } }
fetchData
함수는 새로운 데이터를 불러오는 비동기 작업을 수행합니다. -
섹션과 헤더
Section
뷰를 사용하여 데이터를 섹션으로 나눌 수 있습니다:swiftvar body: some View { List { Section(header: Text("Header 1")) { ForEach(section1Items, id: \.self) { item in Text(item) } } Section(header: Text("Header 2")) { ForEach(section2Items, id: \.self) { item in Text(item) } } } }
섹션 헤더는 리스트를 더 조직적으로 보이게 합니다.
-
계층형 리스트 중첩 데이터 구조를 표시하기 위해 계층형 리스트를 생성할 수 있습니다:
swiftvar body: some View { List(fileHierarchy, children: \.children) { item in Text(item.name) } }
이 예제는 파일 시스템과 같은 계층 구조를 표시하는 데 유용합니다.
커스터마이징 리스트
SwiftUI List는 다양한 스타일과 커스터마이징 옵션을 제공합니다. listStyle
수정자를 사용하면 여러 가지 프리셋 스타일을 적용할 수 있습니다:
swiftvar body: some View { List(items, id: \.self) { item in Text(item) } .listStyle(InsetGroupedListStyle()) }
기본적으로 사용할 수 있는 스타일은 다음과 같습니다:
PlainListStyle
GroupedListStyle
InsetListStyle
InsetGroupedListStyle
SidebarListStyle
리스트 아이템 커스터마이징
리스트 아이템은 다양한 뷰를 포함할 수 있으며, 커스텀 레이아웃을 사용할 수 있습니다:
swiftstruct CustomRow: View { var item: String var body: some View { HStack { Image(systemName: "star") Text(item) } } } struct ContentView: View { let items = ["Item 1", "Item 2", "Item 3"] var body: some View { List(items, id: \.self) { item in CustomRow(item: item) } } }
리스트 성능 최적화
리스트의 성능을 최적화하려면 다음과 같은 방법을 고려할 수 있습니다:
- 고유 식별자 사용: 리스트 아이템의 고유 식별자를 지정하여 효율적인 업데이트를 보장합니다.
- LazyVStack 사용: 많은 아이템을 렌더링할 때
LazyVStack
를 사용하여 성능을 개선할 수 있습니다.
swiftstruct ContentView: View { let items = Array(1...1000).map { "Item \($0)" } var body: some View { ScrollView { LazyVStack { ForEach(items, id: \.self) { item in Text(item) } } } } }
접근성 고려 사항
리스트가 접근 가능하도록 하기 위해서는 명확하고 설명적인 라벨을 제공해야 합니다. 예를 들어, 아이템에 접근성 라벨을 추가할 수 있습니다:
swiftvar body: some View { List(items, id: \.self) { item in Text(item) .accessibilityLabel("Item: \(item)") } }
결론
SwiftUI List는 앱에서 데이터를 표시하는 데 있어 다재다능하고 효율적인 방법을 제공합니다. 강력한 기능을 활용하여 동적이고 반응성이 뛰어나며 시각적으로 매력적인 리스트를 만들어 사용자 경험을 향상시킬 수 있습니다.