iOS

· iOS/SwiftUI
Demystify SwiftUI - Dependency종속성(Dependency)은 SwiftUI가 언제, 그리고 왜 UI를 업데이트해야 하는지 이해하는 방식입니다. 이는 앱의 성능과 정확성에 직결됩니다.종속성이란 뷰의 입력값(input)으로, 종속성이 변경되면 뷰는 새로운 body를 생성합니다. 여기서 입력값은 @State, @Binding, 프로퍼티 등이 있고, 이 값들이 변경되면 뷰는 다시 그려집니다.body는 뷰의 계층 구조를 만드는 곳이고, 이 뷰의 게층 구조를 더 깊이 보면, 액션(action)이 있는 버튼이 있습니다. 액션은 뷰의 종속성에 변경을 일으킵니다. SwiftUI의 뷰 계층은 단순한 트리 구조가 아니라 ‘그래프’ 구조입니다. 왜냐하면 여러 뷰가 하나의 동일한 데이터 소스에 의존할 수..
· iOS/SwiftUI
Demystify SwiftUI - LifetimeLifetime(수명)은 SwiftUI가 뷰와 데이터의 존재에 대해 추적하는 방법으로, 뷰의 identity(정체성)가 유지되는 기간을 의미입니다. 하지만 여기서의 뷰의 수명은 struct의 자체의 수명이 아닙니다. View value와 Identity의 차이영상에서는 고양이에 비유하여 View의 Value와 Identity에 대해 설명합니다.뷰의 값 (Value) - "고양이의 순간적인 사진"body 프로퍼티가 실행될 때마다 생성되는 struct 인스턴스입니다.이것은 "졸고 있는 테세우스", "놀고 있는 테세우스"처럼 순간을 포착한 사진과 같습니다.SwiftUI는 이 '사진'을 이전 '사진'과 비교하여 변경 사항이 있는지 확인한 다음, 바로 버립니다. ..
· iOS/SwiftUI
Source of TruthUIKit과 SwiftUI의 차이점 중 가장 중요한 부분 중 하나는 SoT(Source of Truth)라고 생각합니다. UIKit에서는 데이터와 UI의 상태를 개발자가 직접 일치시켜줘야 했습니다. 하지만 이 과정에서 실수가 발생하면 데이터와 UI가 서로 다른 상태를 가지는 불일치 문제가 생기고, 이는 예측하기 어려운 버그의 원인이 되었습니다.하지만 SwiftUI에선 SoT라는 개념을 통해 이러한 문제를 해결하였습니다. SoT는 데이터의 일관성과 정확성을 유지하는 중요한 개념으로, 데이터는 오직 한 곳에서만 관리되고, 모든 UI는 해당 데이터를 바라보며 자신(뷰)을 그립니다. 즉, 데이터가 변경되면 UI는 자동으로 변경되기 때문에, 데이터 불일치 문제가 차단되고, 코드 구조가 ..
MVVM의 한계점RxSwift + MVVM을 기반으로 프로젝트를 진행하면서 MVVM의 비즈니스 로직을 더욱 분리하는 방법에 대해 고민하게 되었습니다. 그 중 뷰를 생성하고 이동하는 flow logic과 business logic이 모두 ViewModel에 정의되어 있었는데, 이러한 부분은 단일 책임 원칙을 위배한다고 생각하였고, 이를 분리하는 Coordinator 패턴에 대해 학습하게 되었습니다.
· iOS/UIKit
FlexLayoutFlexLayout은 UIStackView에서 발전한 레이아웃 방법으로, 사용하기 쉬우면서 성능이 우수한 라이브러리입니다.flex container라는 부모 컨테이너 안에 flex items라는 자식들을 포함시켜 item을 정렬하는 구조입니다. 특징Flexbox의 레이아웃 잡는 방식은 간단하고 빠름main axis와 cross axis를 바탕으로 정렬 방향이 정의되며, direction을 통해 정의됨Creation, modification, definition of flexbox itemsaddItem(:UIView) → FlexUIView를 subview로 추가한 뒤, flexbox를 사용 가능하게 만듦define(_ closure: (_ flex: Flex) -> Void)flexb..
· iOS/UIKit
PinLayout“No Auto layout constraints attached” PinLayout은 오토 레이아웃을 사용하지 않고, 뷰의 레이아웃을 수동으로 정의하는 라이브러리로, UIStackView, 오토 레이아웃보다 뷰의 렌더링 속도가 훨씬 빠른 레이아웃 방식입니다.특징문법적으로 간결함addSubview까지 진행해야 함수동으로 레이아웃 (오토 레이아웃에 의존하지 않음)그렇다고 둘을 같이 쓰면 안되는 것은 아님Full Control기기, traitCollection, animation에 따른 조건문, 반복문 추가 가능간단하고 빠르게 동작하기 위해 존재함StatelessUIView에 저장 프로퍼티를 추가하지 않고, view의 frame 프로퍼티를 계산Stateless하기 때문에 다른 프레임워크와 충..
· iOS/SwiftUI
Demystify SwiftUISwiftUI엔 Identity, Lifetime, Dependency의 개념이 존재하는데, 해당 개념들은 SwiftUI가 뷰를 효율적으로 그리고 업데이트하는지를 이해하는데 매우 중요한 개념입니다.정체성 (Identity): 뷰를 서로 구별하고 알아보는 방법수명 (Lifetime): 뷰와 데이터가 언제까지 존재하는지를 추적하는 방법종속성 (Dependencies): 뷰가 어떤 데이터에 의존하며, 언제 업데이트되어야 하는지를 파악하는 방법 IdentityIdentity는 SwiftUI가 여러 화면 업데이트 과정에서 UI 요소를 "같은 것" 혹은 "다른 것"으로 인식하는 방법입니다. 아이콘이 사라졌다가 나타나는 fade 효과를 보일지, 아니면 slide 전환 효과를 보일지는 S..
MVVM의 한계점RxSwift + MVVM을 기반으로 프로젝트를 진행하면서 MVVM의 비즈니스 로직을 더욱 분리하는 방법에 대해 고민하게 되었습니다. 그 중 뷰를 생성하고 이동하는 flow logic과 business logic이 모두 ViewModel에 정의되어 있었는데, 이러한 부분은 단일 책임 원칙을 위배한다고 생각하였고, 이를 분리하는 Coordinator 패턴에 대해 학습하게 되었습니다. Coordinator 패턴Coordinator 패턴이란 Khanlou라는 개발자가 View Controller의 책임을 분리하면서 navigation flow와 관련된 로직을 하나의 패턴으로 정의하면서 나타났습니다. Coordinator 패턴은 화면 간 전환인 flow logic을 담당하며, Coordinato..
Dev_Ted
'iOS' 카테고리의 글 목록