[iOS-Swift] SwiftUI란 무엇인가?

ornwoo·2024년 10월 18일
0

iOS

목록 보기
1/4

안녕하세요. 😃
iOS 개발자 비모 🤖 입니다.

오늘은 제가 SwiftUI에 대해 간단하게 설명하는 시간을 가지려고 합니다.
SwiftUI란 무엇인지? 애플에서 왜 SwiftUI를 개발하였는지? 그리고 어떤 장단점이 있는지 알아보고자 합니다!

그럼 시작하겠습니다! 🚀


SwiftUI란?

출처 - WWDC2019 Introducing SwiftUI: Building Your First PPT 중에서..

SwiftUI는 애플이 2019년 WWDC에서 발표한 사용자 인터페이스(UI) 프레임워크입니다. iOS, macOS, watchOS, tvOS 등 애플의 모든 플랫폼에서 앱의 UI를 선언적(declarative) 방식으로 작성할 수 있게 해주는 프레임워크입니다.


🤔 왜 애플은 SwiftUI를 만들었을까?

• 애플이 SwiftUI를 만든 이유는 최근의 개발 패러다임 변화와 긴밀하게 관련되어 있습니다. 현대 앱 개발 환경에서는 효율적이고 간결한 코드 작성이 점점 더 중요해지고 있습니다.


출처 - https://www.apple.com/kr/newsroom/2024/06/introducing-apple-intelligence-for-iphone-ipad-and-mac/

뿐만 아니라 다양한 플랫폼(iOS, iPadOS, MacOS, WatchOS..)을 지원해야 하는 애플 개발 환경에서는 코드의 재사용성과 일관성이 큰 이슈로 떠올랐습니다.


SwiftUI는 이러한 요구를 충족시키기 위해 애플이 제시한 선언형(declarative) UI 프레임워크입니다.

그렇다면 SwiftUI의 장점은 무엇일까요?


SwiftUI의 장점

1. 선언형 문법(Declarative Syntax)

출처 - https://developer.apple.com/xcode/swiftui/

• SwiftUI는 선언형 프로그래밍 방식을 사용합니다. 이는 개발자가 UI의 상태를 선언적으로 정의하고, 그 상태에 따라 UI가 자동으로 업데이트되도록 합니다.
• 결과적으로, 코드가 간결하고 이해하기 쉬워지며, 유지보수가 용이해집니다.

2. 크로스 플랫폼 지원

import SwiftUI

struct ContentView: View {
    var body: some View {
        #if os(iOS)
        NavigationView {
            VStack {
                Text("iOS에서 실행 중").padding()
            }
        }
        #else
        VStack {
            Text("macOS에서 실행 중").padding()
        }
        #endif
    }
}

• SwiftUI는 iOS, macOS, watchOS, tvOS 등 애플의 다양한 플랫폼에서 하나의 코드베이스로 UI를 작성할 수 있습니다.
• 이를 통해 여러 플랫폼에 동일한 사용자 경험을 제공하면서, 코드 재사용성을 극대화할 수 있습니다.

3. 미리 보기(Preview)

출처 - WWDC2020 Structure your app for SwiftUI previews 중에서..

• Xcode에서 제공되는 미리 보기(Preview) 기능을 통해, 코드를 작성하면서 실시간으로 UI 변경 사항을 즉시 확인할 수 있습니다.
• 이 기능은 개발 속도를 크게 향상시키며, 반복적인 빌드-실행 사이클을 줄여줍니다.

뿐만 아니라, 기존에 스토리보드나 AutoLayout을 사용해 UI를 구축하던 개발자들도 Preview 기능을 통해 코드 기반 UI와의 차이를 줄이며 더 빠르고 직관적인 개발을 경험할 수 있습니다. 이로 인해 선언형 UI의 장점인 즉각적인 피드백을 더욱 실감할 수 있습니다.

4. 간단한 상태 관리(State Management)

출처 - WWDC2020 Data Essentials in SwiftUI 중에서..

• SwiftUI는 @State, @Binding, @ObservedObject, @EnvironmentObject 와 같은 속성 래퍼를 사용해 상태를 쉽게 관리할 수 있습니다.
• 상태가 변경되면 UI가 자동으로 다시 렌더링되므로, 별도의 코드 없이도 동기화가 이루어집니다.

5. 애니메이션의 간편한 적용

struct ContentView: View {
    @State private var isAnimating = true
    
    var body: some View {
        VStack {
            Rectangle()
                .foregroundColor(isAnimating ? .yellow : .red)
                .frame(width: isAnimating ? 50 : 100, height: isAnimating ? 50 : 100)
                .animation(.spring(response: 1,dampingFraction: 0.3 ,blendDuration: 40))
            
            Button("Animate") {
                isAnimating.toggle()
            }
        }
    }
}

• SwiftUI는 기본적으로 애니메이션을 쉽게 적용할 수 있는 다양한 API를 제공하여, 몇 줄의 코드로 자연스러운 애니메이션을 구현할 수 있습니다.
• 복잡한 애니메이션도 간단한 코드로 작성할 수 있어, 사용자 경험을 개선할 수 있습니다.

6. 컴포넌트 기반 설계

출처 - WWDC2019 SwiftUI Essentials 중에서..

• SwiftUI는 컴포넌트로 UI를 구성하고, 이 컴포넌트를 재사용할 수 있게 합니다.
• 이를 통해 코드 중복을 줄이고, 유연하게 UI를 조합할 수 있습니다.

7. 우수한 레이아웃 시스템

출처 - WWDC2019 Building Custom Views with SwiftUI 중에서..

SwiftUI 레이아웃 프로세스의 3 단계

  1. 부모가 자식의 크기를 제안
  2. 부모의 제안을 받아 자식은 스스로 크기를 선택
  3. 자식이 선택한 크기를 기반으로 부모는 좌표 공간에 자식을 배치

이제 그외에 SwiftUI의 단점을 한번 알아봅시다!


SwiftUI의 단점

1. 호환성 문제

• SwiftUI는 iOS 13 이상에서만 지원됩니다. 이로 인해, 구형 iOS 버전을 지원해야 하는 앱에서는 SwiftUI만으로 개발하는 것이 어렵습니다.

현실적으로 iOS 13 이상에서 SwiftUI를 사용할 수는 있지만, iOS 15 - 16 이상에서는 더 많은 API들을 지원함으로써, SwiftUI를 보다 원활하게 활용할 수 있습니다.

2. 제한된 기능

• SwiftUI는 상대적으로 새로운 프레임워크이기 때문에, UIKit에 비해 기능이 아직 미흡한 부분이 많습니다.
• 복잡한 UI, 고급 애니메이션, 특정 커스텀 컨트롤 구현에서는 SwiftUI만으로는 한계가 있을 수 있습니다. 이때는 여전히 UIKit에 의존해야 합니다.

3. 가파른 학습 곡선

출처 - https://www.dhiwise.com/post/flutter-vs-swiftui-a-developers-perspective-on-performance

• 처음 SwiftUI로 개발할 때는 각 단계별로 학습이 필요하므로 개발 과정에서 추가 공수가 발생할 수 있습니다.
• Objective-C -> Swift 전환과 마찬가지로 프로젝트 개발 기간이 다소 늘어날 수 있습니다.

그러나 학습 후에는 SwiftUI를 통해 대부분의 작업을 더 빠르게 수행 할 수 있습니다.

4. 지원이 적은 관련 라이브러리/컴포넌트

• SwiftUI는 여전히 신생 프레임워크이기 때문에, UIKit이나 AppKit과 비교했을 때 외부 라이브러리 지원이 부족합니다.
• SwiftUI는 일반적인 사용 사례에 중점을 둔 컴포넌트를 제공하지만, 모든 개발 요구사항을 충족시키기에는 부족할 수 있습니다.
• 필요에 따라 UIKit이나 AppKit을 래핑해 사용해야 하는 경우가 있으며, 이 과정에서 추가 작업이 발생할 수 있습니다.
• 기존 라이브러리나 컴포넌트가 SwiftUI에서 바로 작동하지 않는 경우, 브리징 작업이 요구될 수 있습니다.

5. 계속된 업데이트

출처 - https://developer.apple.com/documentation/swiftui/view/foregroundcolor(_:)

• SwiftUI는 꾸준히 업데이트되고 있으며, 새로운 기능 추가와 버그 수정이 계속 이루어지고 있습니다.
• 빠른 업데이트는 새 기능을 신속하게 적용할 수 있는 장점이 있지만, 기존 코드와의 호환성 문제를 발생시킬 수 있습니다.
• SwiftUI가 성숙해지면서 더 많은 기능이 추가되겠지만, 이에 따라 개발자는 지속적인 학습과 업데이트에 대응할 필요가 있습니다.


마무리

이로써 SwiftUI의 정의 및 장단점에 대해 간단하게 알아보는 시간을 가졌습니다. SwiftUI! 오늘은 간단하게 알아보았으니 다음부턴 조금 더 Deep 하게 알아보는 시간을 가져보고자 합니다.

이만 iOS 개발자 비모 🤖 였습니다.

읽어주셔서 감사합니다. 🥺

profile
🧑🏻‍💻 정신과 시간의 방 🧘🏻

0개의 댓글