Playground나 Xcode로 SwiftUI파일을 만들게 된다면 처음으로 보게 되는 화면이 있을 것이다. 바로 아래와 같은 화면이다.
struct ContentView: View {
var body: some View {
Text("Hello, World!")
}
}
항상 그냥 지나치지만 과연 이 코드들? 뭘까? 간단하게 뜯어보도록 하겠다.
struct ContentView: View
struct 키워드를 사용하여 구조체를 선언하고, ContentView라는 이름을 가지며, View 프로토콜을 따르는 타입이다. 벌써부터 복잡해진다. 구조체? 프로토콜? ContentView라는 이름을 가진다는 것 밖에 이해를 못 하겠다.
구조체 선언?
구조체란 Swift에서 데이터 타입을 정의하는 방법이다.
struct People {
var name: String
var age: Int
}
위와 같이 People 구조체는 name 과 age 라는 속성(property)을 가지는 데이터타입이다. 데이터타입이 감이 안 잡히면 묶음이라고 봐도 무방하다. 이제 위와 같이 People 을 사용하게 된다면 아래와 같이 사용할 수 있다.
let Kim = Person(name: "Kim", age: 25)
let Jeon = Person(name: "Jeon", age: 24)
그렇다면 struct ContentView 는 ContentView 라는 묶음을 선언했구나! 정도로 쉽게 이해해 볼 수 있다.
View 프로토콜을 따르는 타입?
ContentView 라는 데이터타입을 선언했는데, 이 데이터 타입이 View 프로토콜(protocol)을 따르는 타입이라고? View 는 타입이면서도 body 라는 속성을 사용해야 한다는 특성이 있다. 프로토콜은 약속이라는 뜻이다. 따라서 View 를 쓴다는 것은 해당 뷰가 가져야 하는 규칙이나 약속을 정하는 것이다.
var body: some View
필수속성으로 필요한 body 속성(property)이 View 약속(protocol)을 따르는 어떤 뷰를 반환한다는 것을 나타낸다. 여기서 some 의 강력함이 나온다. 반환되는 뷰의 타입이 무엇인지 선언할 필요가 없다. 알아서 잘 맞춰줘!라는 의미이다. 만약 some 이 없다면 아래와 같이 Hello, World! 를 나타내는데 Text 라는 반환 타입을 지정해줘야 한다. 그렇게 되면 Text 말고 다른 것을 뷰에 넣으려면 또 다른 뷰를 선언해 줘야 한다.
struct ContentView: View {
var body: Text {
Text("Hello, World!")
}
}
프로토콜인 View 는 무슨 약속을 할까?
View를 사용함으로써 다음과 같은 요구사항을 만족해야 한다.
1. 뷰는 코드가 컴파일될 때 생성 가능해야 한다.
2. 뷰는 상태를 가질 수 있어야 하고 사용자 입력에 따라 뷰의 상태를 업데이트할 수 있어야 한다.
3. 앱 전체에서 사용되는 색상이나 폰트와 같은 환경 변수에 뷰에서 액세스 하여 사용할 수 있어야 한다.
결론
아래와 같은 코드는 결국 ContentView 라는 묶음을 선언하고, var body 를 선언해서 어떠한 뷰를 보여줄거예요. 라는 뜻이다!
struct ContentView: View {
var body: some View {
Text("Hello, World!")
}
}
'SwiftUI > SwiftUI 문법' 카테고리의 다른 글
[SwiftUI] @EnvironmentObject 알아보기 (0) | 2023.05.20 |
---|---|
[SwiftUI] @StateObject 알아보기 (0) | 2023.05.20 |
[SwiftUI] @Published, @ObservedObject 알아보기 (0) | 2023.05.20 |
[SwiftUI] @Binding 알아보기 (0) | 2023.05.20 |
[SwiftUI] @State 알아보기 (0) | 2023.04.28 |