swiftUI 16

[SwiftUI] 성능 최적화의 여정(1) - 뷰의 렌더링 최적화

성능 최적화에 대한 관심이 지대한 요즘.. 이것저것 테스트 해보다가 WWDC까지 찍먹하고 글을 썼지만 이론적으로만 공부하는 게 아니고 실제 프로젝트에 적용해보고 싶어서 힘이 닿는 대로 프로젝트 성능에 대한 최적화를 하는 글을 써볼까 한다.. 포부는 원대하지만 막상 글을 제대로&꾸준히 쓸 수 있을지 걱정되는 현실 😅 일단 그 첫 번째 여정으로 프로젝트를 진행하면서 가장 많이 개선의 필요성을 느꼈던 지점인 '불필요한 뷰 렌더링'을 최적화 하는 글을 작성해볼까 한다.    커스텀뷰를 만드는 방법은 다양하다. some VIew를 리턴하는 함수/연산 프로퍼티로 만들 수도 있고, 구조체로 만들수도 있다. 그럼 이렇게 만든 커스텀 뷰를 여러 개 띄울 때, 예를 들어 ForEach로 여러 개 요소를 반복적으로 나열했..

SwiftUI 2024.12.12

[SwiftUI] 뷰의 성능 개선(3) -Identifier의 중요성 | WWDC23. Demystify SwiftUI performance

> 뷰의 성능 개선 시리즈[SwiftUI] 뷰의 성능 개선(1) - Dependency 관리[SwiftUI] 뷰의 성능 개선(2) - 뷰의 slow update 개선[SwiftUI] 뷰의 성능 개선(3) -Identifier의 중요성  뷰의 성능에 대해 말하는 WWDC23 Demystify SwiftUI performance 세션에서 다루는 내용 중 마지막은 List와 Table의 Identifier에 관련한 내용에 대한 이야기이다. 특히나 List의 요소로 들어가는 것들이 어떻게 ID를 가지게 되고 어떤 식으로 동작하는지와 이 때문에 어떤 식으로 List와 ForEach를 사용하면 좋은지에 대한 언급을 한다. 아무래도 List의 경우에는 사용되는 화면이 많고 대량의 데이터를 로드할 경우가 있다 보니 자..

SwiftUI 2024.12.06

[SwiftUI] 뷰의 성능 개선(2) - 뷰의 slow update 개선 | WWDC23. Demystify SwiftUI performance

> 뷰의 성능 개선 시리즈[SwiftUI] 뷰의 성능 개선(1) - Dependency 관리[SwiftUI] 뷰의 성능 개선(2) - 뷰의 slow update 개선[SwiftUI] 뷰의 성능 개선(3) -Identifier의 중요성  이번 글은 뷰 성능 개선 (1), (3) 보다는 간단한 글이 될 것 같다. 근데 실제 프로젝트에 대한 성능을 개선할 때 고려해야 할 점을 언급한 부분이 있어서 작성해 본다.   첫 번째 성능 개선 글에서는 dependency와 뷰의 업데이트 "횟수"에 초점을 맞췄다면, 이 글에서는 뷰가 업데이트 될 때 사용되는 비용을 줄여 "속도"를 개선하는 것에 초점이 있다.  📍 반응성 저하(reduced responsiveness)뷰가 느리게 업데이트 되는 것이 어떤 문제가 있길래..

SwiftUI 2024.11.30

[SwiftUI] 뷰의 성능 개선(1) - Dependency 관리 | WWDC23. Demystify SwiftUI performance

> 뷰의 성능 개선 시리즈[SwiftUI] 뷰의 성능 개선(1) - Dependency 관리[SwiftUI] 뷰의 성능 개선(2) - 뷰의 slow update 개선[SwiftUI] 뷰의 성능 개선(3) -Identifier의 중요성   함께 공부하는 분께 SwiftUI를 선호하는지 UIKit를 선호하는지 여쭤본 적이 있다. 그분의 대답은 “SwiftUI보다 UIKit를 더 선호한다. SwiftUI는 데이터에 따라 뷰가 재 렌더링 되는 것을 관리하기 까다로운 것 같다” 이었다. 나는 어떨까 생각해 보니 성능적인 것보다는 뷰를 만들기 직관적이고 쉽다는 측면으로 SwiftUI를 선호했던 것 같다. 그래서 최근에 SwiftUI 뷰에 대한 최적화 방법은 무엇이 있을까 여러 방면으로 공부해 보고 테스트해 보았다...

SwiftUI 2024.11.26

[SwiftUI] some View 때문에(?) 필요한 @ViewBuilder

@ViewBuilder에 대해서는 이전 블로그 글에서도 쓴 적이 있지만 활용 방법 위주로만 서술한 것 같아서 SwiftUI가 뷰를 리턴 받는 방식인 some View와도 연관되게 설명해보려 한다. 아래 글은 옛날에 썼던 글!SwiftUI 재사용가능한 뷰를 만들기 위해 필요한 @ViewBuilder    📍ViewBuilder 공식문서 역시나 건너뛸 수 없는 공식문서의 정의를 봐보자!A custom parameter attribute that constructs views from closures. '클로저를 통해 뷰를 구성하는 매개변수에 대한 어트리뷰트이다.'라고 설명한다.*어트리뷰트 : 컴파일러에게 추가적인 정보를 알려주는 역할을 하는 것   이게 무슨 뜻인지 모르겠다면 SwiftUI에서 뷰를 그릴 ..

SwiftUI 2024.11.21

[Swift] SwiftUI에서 some View를 사용하는 이유 | any VS some

왜 SwiftUI에서는 some View를 사용해서 뷰를 그려요? some 키워드가 Opaque Type에서 사용되고 Opaque Type에 대한 개념도 어느 정도 알고 있지만, 어느 날 문득 왜 SwiftUI에서는 any View도 아니고 some View로 뷰에 대한 타입을 리턴 받아 사용하는 걸까 궁금했다.    이렇게 some 키워드로 나타내는 타입을 Opaque Type이라고 하는데, 불명확 타입이라고도 불리며, 역제네릭 타입으로도 불린다. 왜 불명확 혹은 역제네릭 타입으로 불리는지 Opaque Type에 대해 살펴보고, 왜 SwiftUI에서 뷰를 그릴 때는 some View 처럼 Opaque Type을 사용하는지에 대해서도 알아보자!    📍Generic 왜 Opaque Type 알아본다고 ..

Swift 2024.11.14

[SwiftUI] Remote Notification 원격 알림 (1)

이전 글에서 로컬 알림 기능이 어떻게 구현되는지와 기기에 설정된 앱의 알림 기능을 확인하는 방법에 대해서 알아보았다면, 이번에는 푸시 서버로부터 사용자의 기기까지 어떻게 원격 알림이 전달되는지에 대한 전반적 개념을 알아보고자 한다. [SwiftUI] Remote Notification 원격 알림 (1) [SwiftUI] Remote Notification (2) FCM 서비스 사용하여 원격 알림 구현 알림 관련 이전 글 [SwiftUI] Local Notification 앱의 로컬알림 기능 구현 [SwiftUI] Notification | 알림설정확인 getNotificationSettings Provisional Authorization # 🥨 원격 알림은 왜 필요할까? 제한된 기능만 수행할 수 있는 ..

SwiftUI 2023.08.20

[SwiftUI] Local Notification 앱의 로컬알림 기능 구현

로컬 알림에 대해 이해하고 구현하기 위해서는 먼저 우리가 푸시 알림이라고 부르는 local notification과 remote notification의 차이점에 대해 알아볼 필요가 있다. remote notification는 서버 측에서 보내는 서버 푸시이며 기기 자체에서 앱으로 알림을 보내는 것은 local notification이다. 두 케이스는 각기 다르지만 local notification는 서버가 없어도 앱 자체만으로 해결이 가능하기 때문에 구현하기 비교적 간단하다. 이 글에서는 Local Notification을 구현하기 위한 과정을 각각 설명하고자 한다. #🥨 사용자로부터 푸시알림 사용 권한 요청 앱에서 알림 기능을 사용자에게 제공하기 위해서는 가장 먼저 사용자가 알림을 받고 싶은지의 여부..

SwiftUI 2023.07.17

[SwiftUI] 연속한 뷰에 대해 드래그 제스처로 on/off할 수 있는 기능 구현 | 드래그 제스처 .gesture DragGesture

forEach로나열해 준연속한 뷰에 대해 드래그 제스처로 연속해서 각 셀을 on/off할 수 있는 기능을 구현하고 싶어 SwiftUI로 드래그 기능을 구현한 여러 가지 샘플코드들을 테스트해 보았고 가장 나의 케이스에 맞는 코드를 참고하여 이 기능을 구현하고 dragGesture에 대해 잘 익힐 수 있는 기회가 되었다. 우선, 기능 구현을 위해 필요한 요소들을 나열하면서 각각 필요한 이유에 대해 설명하고자 한다. #🥨 특정 뷰에서드레그 하는 제스처를감지하고업데이트시켜주기 위해서는. gesture수정자와 DragGesture 구조체 사용 특정 뷰에서드레그 하는 제스처를감지하고업데이트시켜주기 위해서는. gesture수정자와 DragGesture 구조체를 gesture 수정자 : 사용자가 앱을 사용할 때 하는 ..

SwiftUI 2023.07.13

[SwiftUI] @StateObject 와 @ObservedObject

MVVM 아키텍처를 사용해서 앱을 구현했을 때 view model을 구독할 수 있는 property wrapper인 @StateObject 와 @ObservedObject 사이에서 헷갈렸던 적이 많이 있었기 때문에 둘 사이의 공통점과 차이점에 대해 기록하고자 한다. # 🥨 Property Wrapper 우선, @StateObject 와 @ObservedObject 는 구독하고 있는 객체의 변경에 반응해서 화면을 업데이트할 수 있게 해주는 SwiftUI의 프로퍼티 래퍼이다. 두 프로퍼티 래퍼 모두 ObservableObject 프로토콜을 채택한 객체를 필요로 한다. 예를 들어 MVVM 아키텍처로 앱을 구현한다고 했을 때 ViewModel 프로퍼티의 변화를 View에 반영해주고 싶다면 ViewModel을 정..

SwiftUI 2023.06.21