iOS/SwiftUI

SwiftUI 동작 방식

Hamp 2025. 10. 18. 20:53
반응형

SwiftUI 작동 원리 파악하기

 

먼저 Sample 코드를 통해, 동작흐름을 천천히 살펴보자.

 

🤖 Sample Code

struct ContentView: View {
  @State var isOn = true

  var body: some View {
    Text(isOn ? "On" : "Off")
  }
}

 

📊 Attribute Graph

 

🧩 역할

 

  • 데이터 모델
  • 뷰 계층구조, 상태 의존성, 뷰 업데이트의 효율성을 관리하는 내부시스템
  • 어떤 값이 바뀌었을 때, 어떤 뷰를 다시 그려야하는 지 계산하는 의존성 그래프

 

🌊 흐름

 

Attribute 관련

  1. SwiftUI는 View 구조체를 저장하는 상위 View에서 Attribute 객체를 수신
  2. View 구조는 자주 재생성
  3. Attribute는 View 전체 수명에서 Identity와 State를 유지

 

트랜잭션

  • 트랜잭션은 SwiftUI View 계층 구조의 변경 사항으로써, 다음 프레임에 적용할 내용을 나타냄
  • 트랜잭션은 State 변수의 signal attributeOutdated(만료된) 것이라고 마크함
  • 프레임을 업데이트할 준비가되면, 트랜잭션을 실행하고, 예정된 업데이트를 진행
  • Attribute Graph를 따라가며, 관련있는 내용들 모두 Outdated(만료된) 마크 처리한다.

 

업데이트

  • 상위 뷰가 업데이트 되면, 상태는 업데이트되지만 Identity는 유지됨
  • SwiftUI는 View는 변경 즉시, 업데이트 하지 않음
  • 대신 새로운 transaction(트랜잭션)을 생성함
  • Outdated(만료된) 내용 중, State의 signal attributes처럼 Outdated(만료된) 종속성이 없는 것부터 차례대로 업데이트를 진행
  • 위 내용을 보면, 다음과 같은 결론으로 귀결됨

 

왜 View Body가 실행 됐는가?  == View Body가 왜 만료(Outdated)로 마크 된 건가?

 

 

 

View

  • 는 자체 attribute를 생성해 상태를 저장
  • 는 먼저 isOn 상태 변수를 위한 저장소와 isOn 상태 변수가 변경됐을 때, 추적하는 signal attribute을 생성
  • 는 이 두가지를 기준으로 body을 실행하는 새로운 속성을 생성함
  • body는 새로 그리라는 요청을 받으면, 상위 뷰로부터 전달받은 State값을 읽는다.
  • attribute는 상태 변수의 현재 값으로 해당 VIew 구조체 사본을 업데이트한다.

 

Body

  • VIew body에서 우리는 Text를 리턴하기로 했다.
  • Text는 Environment에 따라, 색깔 서체등을 지정해, 렌덜링 한다.
  • 이 과정에서, Body에서 Text로 종속성이 추가된다.

출처

https://developer.apple.com/videos/play/wwdc2025/306

 

반응형