[ SwiftUI ] SwiftUI 기본 특징

2023. 9. 5. 01:28Mobile/SwiftUI

SwiftUI 의 특성

1. 선언형 프로그래밍 ( Declarative programming)

⇒ User Interface 의 기능만 명시하면 됨!
⇒ 프로그램이 어떤 방법으로 해야하는지 나타내기보다 무엇이 같은지를 설명하는 경우 ‘선언형’ 이라고 한다.

반면, 명령형 프로그래밍은

알고리즘을 명시하고 목표는 명시하지 않는데 반해 선언형 프로그래밍은 목표를 명시하고 알고리즘을 명시하지 않는 것이다.

e.g.

    • html 마크업언어로 만들어지는 웹페이지 구조도 선언형인데, <h1>,text,<p>, <img..> 인 경우
    • 그 외 SQLSELECT 학생 FROM 야자반; 과 같이 무엇을 나타내야 하는지를 묘사하는 것이지, 어떤 방법으로 컴퓨터 화면에 페이지를 나타내야 하는지를 묘사하지 않는다.
import SwiftUI

struct AlbumDetail: View {
	var album: Album

	var body: some View {
		List(album.songs) { song in 
			HStack {
				Image(album.cover)
				VStack(alignment: .leading) {
					Text(song.title)
					Text(song.artist.name)
						.foregroundStyle(.secondary)
				}
			}
		}
	}
}

장점

코드가 간단하고, 가독성이 향상된다.

시간절약, 유지관리 용이

2. SwiftUI 가 제공하는 것들

  • 제공되는 UI : views, controls, layout structures
  • framework

         - event handler, App Model - tap, gestures, 기타 유형 input 을 App 에 전달

          ⇒ 사용자가 상호작용하고 보기위한 view 와 control 까지의 Data Flow 관리하는 도구를 제공한다.

3. App 구조

App 프로토콜을 사용해 앱 구조를 정의하고 앱의 UI 를 구성하는 View 가 포함된 장면으로 앱 구조를 채운다

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            Text("Hello, world!")
        }
    }
}

View : 앱 UI의 일부를 나타내고 view 를 구성하는데 사용하는 modifier를 제공하는 유형이다.
⇒ View 프로토콜을 준수하는 사용자 정의 view 를 만들고, stack, List 등을 사용해 텍스트, 이미지 및 사용자 정의 모양을 표시하기 위한 SwiftUI view 로 구성된다.

struct MyView: View {
    var body: some View {
        Text("Hello, World!")
    }
}

4. 내장된 뷰와 고유한 뷰의 강력한 수정자(modifier)를 적용렌더링 및 상호작용을 커스터마이즈한다.(사용자정의한다.)

⇒ context 와 presentation 에 맞춰 조정되는 view와 controls 을 사용해 여러 플랫폼의 앱 간에 코드를 공유할 수 있다.

5. SwiftUI view 를 UIKit, AppKit, WatchKit 프레임워크 개체와 통합해 플랫폼별 기능을 더욱 활용할 수 있다.

6. 사용자 정의 앱 프로토콜 준수자가 앱에 대한 진입점을 제공한다는 것을 나타내기 위해 @main 속성을 struct 선언 앞에 붙인다.

⇒ SwiftUI App 에는 단 하나의 진입점이 포함되어 있다. 앱에서 둘 이상의 구조에 @main 을 적용하려고 하면 컴파일러 오류가 발생한다.

모든 앱 파일 중 정확히 하나의 entry point(진입점)을 가질 수 있다.

NOTE

main() 은 app 이 초기화되고 실행한다. App 준수자 선언 앞에 @main 특성(attribute)을 추가하면 시스템은 준수자의 main() (type method)메서드를 호출하여 앱을 시작한다.

@MainActor
static func main()