ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SwiftUI
    SwiftUI 2021. 4. 14. 22:55

    안녕하세요. 그린입니다🟢

    오늘의 포스팅은 SwiftUI에 대해 학습해보겠습니다🧑🏻‍💻

    SwiftUI?

     - 스위프트 언어로 모든 플랫폼에서 앱에 대한 UI와 동작을 선언해주는 프레임워크

     - 접근성 및 지역화 등 다양한 기능을 자동으로 지원해줌 (다크모드, 유동적 글자 크기 조정 등)

     - UIKit, AppKit, WatchKit 프레임워크 객체와 통합해 플랫폼 별 더 많은 기능을 활용할 수 있음

     - 캔버스와 코드가 동기화되어 MVVM 아키텍쳐 패턴에 적합

     - Xcode12, iOS13 이상부터 지원 가능

     - 뷰 프로토콜을 채택하고 바디를 구현해주어 뷰를 사용하게함

     - 공간의 개념으로 뷰를 만들면 중앙부터 차지하게됨 (상대적이 아님)

    SwiftUI 장점?

     - 한번의 개발로 모든 플랫폼에서 동작이 가능한 앱 구현이 가능

     - 스토리보드를 통한 MVC 아키텍쳐 패턴의 작업 시 데이터의 변화 상태를 바로 볼 수 없는 등의 단점을 해결

     - 코드 작성과 동시에 디자인 인터페이스가 생성되고 렌더링이 됨

     - .Modifier(.)로 체이닝을 통해 스타일링에 대해 구현이 가능

     - 유지보수 시 코드 가독성이 좋고 편리

     - 오토레이아웃을 일일히 해주지 않아도됨

    SwiftUI 단점?

     - 아직 UIKit을 전부 대체하지 못함

     - 낮은 버전에 대해 지원이 되지 않아 Deployment Target이 한정적

     - 나온지 얼마 되지 않아 아직 버그 및 문제가 많음

    SwiftUI와 UIKit?

     - SwiftUI는 UIKit의 대체는 아니다. 이유는 SwiftUI의 많은 기능들이 UIKit 상에서 작동한다.

     - UIKit은 이벤트 중심 프레임워크이고 SwiftUI는 상태 중심 프레임워크

     - UIKit 위에서 빌드된다는 말로 코드가 내부에서 UIKit에 있는 컴포넌트 소스로 변환해 컴파일 한다는 의미

     - 동시에 사용하려면 UIHostingController를 사용!

    UIKit -> SwiftUI로 변화된 UI 요소

     - UITableView: List

     - UICollectionView: No SwiftUI equivalent

     - UILabel: Text

     - UITextField: TextField

     - UITextField with isSecureTextEntry set to true: SecureField

     - UITextView: No SwiftUI equivalent

     - UISwitch: Toggle

     - UISlider: Slider

     - UIButton: Button

     - UINavigationController: NavigationView

     - UIAlertController with style .alert: Alert

     - UIAlertController with style .actionSheet: ActionSheet

     - UIStackView with horizontal axis: HStack

     - UIStackView with vertical axis: VStack

     - UIImageView: Image

     - UISegmentedControl: SegmentedControl

     - UIStepper: Stepper

     - UIDatePicker: DatePicker

     - NSAttributedString: Incompatible with SwiftUI; use Text instead.

    SwiftUI Property Wrappers?

     - @State: 상태변화를 감지하도록 사용

     - @Binding: 정의된 @State 변수를 사용하고 해당 값을 넘겨받을거란 의미로 다른 부분에서 변경이 일어나도 자동 연결 변경됨

    MVC와 MVVM의 차이?

     - MVVM은 MVC의 C(Controller)가 VM(ViewModel) 뷰모델로 변경된것으로 뷰와 뷰모델을 바인딩해줌

     - 이미 바인딩되있어서 데이터가 바뀌면 자동으로 뷰가 변경됨 (테스트 할때 시뮬레이터를 돌리지 않아도 볼 수 있음)

     - 뷰를 자체적으로 뷰모델로 테스트할 수 있음으로 MVC보다 테스트에 적합!

     

     

    추가로, SwiftUI에 대한 여러 기초적인 삽질을 아래 깃헙으로 업로드하여 참고하실분들은 여기로!!

    github.com/GREENOVER/SwiftUI

     

    GREENOVER/SwiftUI

    SwiftUI에 대한 연습 프로젝트. Contribute to GREENOVER/SwiftUI development by creating an account on GitHub.

    github.com

     

    [느낀점]

    SwiftUI를 WWDC2019 영상을 보며 좀 충격을 받았다. 왜 대체 이 편하고 좋은걸 안쓰는걸까 하다가 직접 실습을 해보니 아직 시기상조?

    라는 느낌도 들었다. 중요한건 앞으로 미래에는 애플이 의도한 방향으로 SwiftUI를 사용하게 될것이라 생각한다. SwiftUI를 맛보기로 조금 구현해보며 느껴봤는데 중요한점은 기존 UIKit와 아키텍쳐 패턴 차이를 보인다는것이다. MVVM이 MVC보다 좀 더 이상적이고 테스트하기도 용이한 패턴이라고 생각이 들어 시간이 될때 더 구체적으로 학습해봐야겠다.

     

    [참고자료]

    https://developer.apple.com/documentation/swiftui/

    https://developer.apple.com/videos/play/wwdc2019/204/

    https://www.hohyeonmoon.com/blog/swiftui-tutorial-introduction/

     

     

    'SwiftUI' 카테고리의 다른 글

    ActivityView in SwiftUI  (0) 2021.11.29
    Rotation Animation  (0) 2021.11.21
    SwiftUI - NotificationCenter  (0) 2021.09.19
    NavigationLink  (0) 2021.09.11
    Overlay & ZStack  (2) 2021.09.10
Designed by Tistory.