WWDC24 영상
아래의 영상에 아주 잘 설명이 나와있으므로 참고하면 좋을 것 같다.
SwiftUI의 특징
SwiftUI는 다음과 같은 세가지 특징이 있다. 선언적, 구성적, 상태 중심의 특징을 가지고 있다. 아래와 같이 원하는 뷰를 행을 추가하거나 제거하는 작업 없이 UI를 만들 수 있다. pets가 업데이트 된다면 자동으로 행이 변경될 뿐이다.
명령형 프로그래밍
아래와 같이 Rufus라는 멍멍이(객체)가 있다면 아래와 같은 과정으로 Rufus가 홈런을 치게 만들 수 있다. 하나하나 어떻게 해야하는지 명령한다고 해서 명령형 프로그래밍이다.
선언형 프로그래밍
Rufus가 원하는 작업을 설명하고 준비되어있다면 아래와 같이 Rufus에게 홈런을 치라고 선언하면 된다. 선언형 프로그래밍의 장점은 원하는 결과에 좀더 집중할 수 있다는 점이다.
SwiftUI에서는?
명령형과 선언형이 동시에 적용되어있다고 할 수 있다. 버튼같은 경우 어떠한 Action을 할지 분명하게 명령하고 있고, List의 경우는 알아서 pets를 표시해준다.
SwiftUI의 뷰는 UI의 현재 상태가 어떤지 설명하는 것이므로 계속 명령을 받는 객체 인스턴스가 아니다. 따라서 SwiftUI의 뷰는 값 유형이며 클래스대신 구조체로 정의되어 있는 것이다.
SwiftUI는 백그라운드에서 뷰를 표현하기위한 효율적인 데이터 구조를 생성하여 화면을 표시한다.
뷰는 선언적 설명이므로 뷰를 여러개로 나누어도 앱 성능은 저하되지 않는다고 한다. 뷰를 잘게 쪼개보는 연습을 하면 좋을 듯 하다. 예를 들면 우리가 자주 사용하는 HStack의 경우도 View프로토콜을 따르는 @ViewBuilder이다.
SwiftUI에 대한 나의 생각
이것은 어디까지나 나의 생각이기때문에 조심스럽게 써본다... SwiftUI의 경우 선언적 프로그래밍 패러다임을 View에 적용했기 때문에 명령형에 해당되는 세부적인 업데이트는 분리해주면 좋을 것 같다는 생각을 했다. 예를들면 아래와 같은 코드가 있다면 조금더 선언적으로 변경해 본다면...
Button ("Add Pet") {
pets.append(Pet("Toby", kind: •dog, trick: "WWDC Presenter"))
}
List(pets) { pet in
HStack {
Label(pet.name, systemImage: pet.kind.systemImage)
Spacer ()
Text(pet.trick)
}
}
이렇게 변경할 수 있지 않을까? 라는 생각을 해본다...!
Button("Add Pet", action: addPet)
List(pets) { pet in
HStack {
Label(pet.name, systemImage: pet.kind.systemImage)
Spacer ()
Text(pet.trick)
}
}
func addPet() {
pets.append(Pet("Toby", kind: •dog, trick: "WWDC Presenter"))
}
사실 우리가 살아가는 곳도 선언적인것과 다름이 없는 것 같다. 컴퓨터를 킬때 버튼을 누르지만 어떻게 OS를 불러올지 어떻게 전원을 공급할지 등등에 대한 명령을 하나하나 내리지 않는다. 핸드폰을 사용할 때에도 어떻게 통신이 이루어지는지 어떻게 터치가 동작하는지에 대한 명령을 내리지 않고 원하는 결과만 요청할 뿐이다. 물론 그 안에는 여러가지 명령들이 이미 준비되어 있긴 하지만 말이다...
'→ Swift Study' 카테고리의 다른 글
[Swift] @State, @Binding? (1) | 2024.10.23 |
---|---|
[Swift] Do, Try, Catch 간단하게 알아보기 (0) | 2024.02.09 |
[Swift] 약한참조 (weak self) Swift 로 실습해보기 (0) | 2024.01.21 |
[Swift] GCD 알아보기 4 - 동시성 관련 문제 (0) | 2024.01.11 |
[Swift] GCD 알아보기 3 - DispatchGroup (0) | 2024.01.11 |