SwiftUI는 Apple의 선언형(declarative) UI 프레임워크입니다. 주어진 상태에 대해 UI가 어떻게 보여야 하는지를 기술하면, 프레임워크가 이를 어떻게 렌더링하고 업데이트할지 알아서 처리합니다. UIKit처럼 뷰를 수동으로 변경하지 않고, 상태를 바꾸면 UI가 자동으로 다시 렌더링됩니다.
동작 방식
뷰는 View 프로토콜을 준수하며 계산 프로퍼티 에서 콘텐츠를 반환합니다. 는 뷰 프로퍼티의 순수 함수입니다.
SwiftUI는 Apple의 선언형(declarative) UI 프레임워크입니다. 주어진 상태에 대해 UI가 어떻게 보여야 하는지를 기술하면, 프레임워크가 이를 어떻게 렌더링하고 업데이트할지 알아서 처리합니다. UIKit처럼 뷰를 수동으로 변경하지 않고, 상태를 바꾸면 UI가 자동으로 다시 렌더링됩니다.
뷰는 View 프로토콜을 준수하며 계산 프로퍼티 에서 콘텐츠를 반환합니다. 는 뷰 프로퍼티의 순수 함수입니다.
bodybodystruct Counter: View {
@State private var count = 0 // 단일 진실 공급원(source of truth)
var body: some View { // 불투명 반환 타입
VStack(spacing: 12) {
Text("Count: \(count)") // 렌더링마다 count를 다시 읽음
Button("Increment") {
count += 1 // 상태 변경이 재렌더링을 유발
}
}
}
}
some View는 **불투명 반환 타입(opaque return type)**입니다. "컴파일러가 결정하는 어떤 구체적인 View 타입"을 의미합니다. 복잡하게 중첩된 뷰 타입을 일일이 명시하지 않고 반환할 수 있게 해주면서도, 성능을 위해 타입을 정적으로 유지합니다.
label.text = "Count: \(count)" — 각 변경을 직접 밀어 넣습니다.Text("Count: \(count)") — 관계를 한 번 선언하면, count가 바뀔 때 프레임워크가 body를 다시 호출하고 결과를 diff합니다.뷰는 가벼운 struct로, 상태 변경마다 생성하고 버리기 저렴합니다. SwiftUI는 내부 렌더 트리를 유지하며 차이만 적용합니다.
선언형 모델은 UI가 데이터와 어긋나는 UIKit의 버그 전반을 제거합니다. body가 모든 상태 변경마다 다시 실행된다는 점, 그리고 저렴한 순수 함수로 유지해야 한다는 점을 이해하는 것이 상태부터 성능까지 SwiftUI의 다른 모든 것의 토대입니다.
주니어부터 시니어까지 상세한 답변이 포함된 IT 면접 질문 라이브러리.
후원하기