← 메인으로

0806-4 SwiftUI

SwiftUI의 선언적 구문

UIKit과 인터페이스 빌더를 사용하여 사용자 인터페이스 레이아웃을 설계하고 필요한 동작을 구현하는 것과는 완전히 다른 방법인 선언적 구문이 SwiftUI에 도입되었다.

화면을 구성하는 컴포넌트들의 레이아웃과 모양에 대한 복잡한 세부 사항을 직접 설계하는 대신, SwiftUI는 단순하면서도 직관적인 구문을 이용해 화면을 기술할 수 있게 한다. 다시 말해, SwiftUI를 사용하면 레이아웃이 실제록 구축되는 방식의 복잡함에 대해 고민할 필요 없이 사용자 인터페이스가 어떤 모양이어야 하는지를 선언하는 방식으로 레이아웃을 생성할 수 있다.

SwiftUI는 데이터 주도적이다

SwiftUI가 데이터 주도적이라고 말했지만, 그렇다고 사용자에 의해 생성되는 이벤트(다시 말해, 사용자와 앱의 사용자 인터페이스 간의 상호작용)를 더이상 처리할 필요가 없다는 말은 아니다. 예를 들어, 사용자가 버튼을 눌렀을 때를 알아야 하며 어떤 반응을 하도록 하는 것은 여전히 필요하다. 데이터 주도라는 것은 앱 데이터와 앱의 사용자 인터페이스 및 로직 사이의 관계에 대한 의미다.

SwiftUI 이전에는 앱 내에 있는 데이터의 현재 값을 검사하려면 그에 대한 코드를 앱에 포함해야 했다. 시간이 지나 데이터가 변한다면, 사용자 인터페이스가 데이터의 최신 상태를 항상 반영하도록 하는 코드도 작성해야 할 것이다.

사용자 인터페이스 상태를 일관적으로 유지하거나 토글 버튼 설정이 적절하게 저장되었는지와 같은 문제를 확인할 때도 비슷한 문제가 발생한다. 동일한 데이터 소스를 앱의 여러 영역에서 사용할 경우엔 소스코드의 복잡도가 증가할 수 있다.


[!note] 대충 감이 오는 듯 하면서도 깔끔하게 머리에 들어오진 않는다. 번역 문제인가? GPT에게 조금 더 쉽게 풀어달라고 요청했다.

UIKit의 방식

let button = UIButton() button.setTitle("누르세요", for: .normal) button.frame = CGRect(x: 100, y:200, width: 200, height: 50) view.addSubView(button) 

SwiftUI의 방식

Button("누르세요") { print("버튼 눌림") } .padding() .background(Color.blue) .foregroundColor(.white) 

핵심은, UIKit은 "어떻게 만들지"를 하나하나 명령하는 명령형 방식, Swift는 "이렇게 생겼으면 좋겠다"를 선언하는 선언형 방식이라는 것.

Swift의 데이터 주도성

struct ContentView: View { @State var count = 0 var body: some View { VStack { Text("카운트: \(count)") Button("증가") { count += 1 } } } } 

핵심: SwiftUI는 데이터 - UI 자동 연결. 데이터만 바꾸면 화면이 알아서 최신 상태로!

정리

SwiftUI는 데이터의 변화가 앱의 동작과 모양을 주도한다는 점에서 데이터 주도적이다. 이것은 게시자와 구독자 모델을 통해 이뤄진다.