[SwiftUI][concept][개념] LazyVStack & LazyHStack

Uno·2021년 12월 8일
0

SwiftUI

목록 보기
9/30

정리하게된 이유

  • SwiftUI로 프로젝트를 구성하던 도중에 통신관련해서는 LazyVStack 을 활용하는게 효과적이라는 강사의 말을 들었습니다. 그러면서 함께 알려준 키워드로는 ReUsable 이였습니다. 그래서 UIKit과 어떠한 면에서 공통점을 가지고 있고 어떤점에서 차이점을 가지고 있는지 조사해보고 싶었습니다.

Lazy VStack(Lazy HStack)

  • 애플 공식문서 : Apple Developer Documentation
    공식문서의 내용을 먼저 알아보겠습니다.
    (LazyVStack과 LazyHstck은 방향 차이이므로 이하 LazyVStack으로 통칭할게요.)

  • 정의

struct LazyVStack<Content> where Content: View

-> 세로로 늘어나는(스텍으로 쌓이는) 하위 View들을 필요한 만큼 추가할 수 있는 View 입니다.

이게 무슨말인가 보면, 말그대로 버티컬하게 스텍으로 뷰들을 쌓을 수 있다는 뜻입니다.
제가 궁금한건 그건 알겠는데, 왜 Lazy 가 붙었는지 입니다.

그래서 “OverView” 를 읽어보면 다음과 같이 서술하고 있습니다.

스텍에서 “Lazy” 는 스크린(사용자가 보는화면)에 무언가를 랜더링할 필요가 있을 때까지는 구성하지 않는다는 뜻이라고 합니다.

즉, 이미지나 무언가 주어지지 않는다면, Stack을 구성하지 않고 있다는 뜻이죠.

그리고 애플이 제시하는 예시는 ScrollView 입니다.

ScrollView {
	LazyVStack(alignment: .leading) {
		ForEach(1...10, id: \.self) {
			Text("Row \($0)")
		}
	}
}

수직으로 스크롤 되도록
스크롤뷰 안에 VStack을 추가했습니다. 그런데 그 VStack에 + Lazy를 한 구조입니다.

이렇게 하면, 안에 Text 가 내용이 있기 전까지는 구성하지 않다가, 내용이 들어오면 구성한다는 뜻이겠네요.

Lazy의 유무에 따른 차이점 : 보이는 것만 처리

우리가 진짜 궁금한 Lazy에 따른 차이를 알아보면,

Lazy + VStack은 화면에 보이는 것만(랜더링한 것만) 추가합니다.
즉, 보여주고 싶은 데이터가 1억개라고 하더라도, 현재 보이는 데이터가 3개뿐이라면, 3개만 메모리에 로드한다는 뜻입니다. 그래서 UIKit의 Reusable 이라는 키워드를 강사가 저에게 제시했던 것 같습니다.

다른말로하면 “메모리 관리에 최적화된 UI” 라고 말할 수 있겠네요.

참고자료

profile
iOS & Flutter

0개의 댓글