apple 216

Swift 디자인패턴 Mediator Pattern (중재자 패턴)

Swift 디자인패턴 Mediator Pattern (중재자 패턴) Mediator Pattern은 객체 간의 복잡한 의사소통을 캡슐화하는 행동 패턴 히스토리2022-06-15: 디자인 패턴 스터디 정리2024-11-26: 포스팅 글 재정리 및 예제 변경  Mediator Pattern객체들이 직접 상호작용하지 않고, 중재자(Mediator)를 통해서만 소통하도록 설계.객체 간의 강한 결합을 줄이고 코드의 유연성을 높일 수 있음중재자 패턴은 일반적으로 4가지 개념으로 구성Colleague: 의사소통에 참여하는 객체로, 각 동료는 Mediator를 통해 간접적으로 소통Colleague Protocol: Colleague들이 구현해야 하는 메서드와 속성을 정의Mediator: Colleague 간의 의사소..

Swift Combine Networking

Swift Combine Networking  Combine을 활용해서 쉽게 서버와 통신을 처리할 수 있음.난이도는 총 3단계로 아래 파일에 있는 Refactoring(상)과 Advanced Model에 대해서만 설명.  목차1. Refactoring (상) 모델 파일//// UserModel.swift// CombineNetworking//// Created by Hamlit Jason on 2022/06/10.//// let user = try? newJSONDecoder().decode(User.self, from: jsonData)import Foundation// MARK: - UserElementstruct UserElement: Codable, Hashable { let id:..

Swift 디자인패턴 FlyWeight Pattern (플라이웨이트 패턴)

Swift 디자인패턴 FlyWeight Pattern (플라이웨이트) 플라이웨이트 패턴은 메모리 사용량과 처리 과정을 최소화하기 위한 구조 패턴. 히스토리2022-06-09: 디자인 패턴 스터디 정리2024-11-26: 포스팅 글 재정리 및 조금 더 실용적인 예제 코드로 변경 FlyWeight Pattern메모리를 효율적으로 사용하는 디자인 패턴으로, 공유 가능한 상태(공통 속성)를 분리하여 객체 생성 비용을 줄이는 방법을 제공대량의 객체를 생성해야 할 때 유용특히 반복적인 데이터를 다루는 경우 메모리 사용량을 크게 줄일 수 있음캐시를 구현하는데도 사용할 수 있음플라이웨이트 패턴은 일반적으로 3가지 개념으로 구성됨Intrinsic State: 공유 가능한 상태로 객체 간 공통된 데이터Extrinsic ..

Swift 디자인패턴 Facade Pattern (퍼사드 패턴)

Swift 디자인패턴 Facade Pattern (퍼사드 패턴) 퍼사드 패턴은 복잡한 시스템의 인터페이스를 단순화하여 사용자가 시스템을 더 쉽게 사용할 수 있도록 하는 구조 패턴 히스토리2022-06-07: 디자인 패턴 스터디 정리2024-11-26: 포스팅 글 재정리 및 조금 더 실용적인 예제 코드로 변경   Facade Pattern여러 개의 서브시스템을 하나의 통합된 인터페이스로 감싸서 클라이언트가 복잡한 내부 구조를 알 필요 없이 간단하게 기능을 사용할 수 있도록 제공여러 서브시스템을 하나의 간단한 인터페이스로 통합클라이언트는 서브시스템의 세부 사항에 의존하지 않고 Facade를 통해 필요한 기능 호출시스템 내부 구조가 변경되더라도 Facade 인터페이스가 변하지 않으면 클라이언트 코드에 영향..

Swift 디자인패턴 Multicast Delegate Pattern (멀티캐스트 딜리게이트 패턴)

Swift 디자인패턴 Multicast Delegate Pattern (멀티캐스트 딜리게이트 패턴) 멀티캐스트 델리게이트 패턴은 델리게이트 패턴을 확장하여, 하나의 객체가 여러 개의 델리게이트에게 알림을 전송. 히스토리2022-06-07: 디자인 패턴 스터디 정리2024-11-26: 포스팅 글 재정리 및 예제 변경 Multicast Delegate Pattern멀티캐스트 객체가 델리게이트 객체와의 관계가 일대일이 아닌 일대다로 확장되며, 여러 개의 델리게이트 객체가 이벤트를 수신하고 반응할 수 있음이 패턴의 핵심은 멀티캐스트 델리게이트 헬퍼 클래스로, 이 클래스는 여러 델리게이트를 관리하고, 델리게이트 객체들이 이벤트를 받을 수 있도록 함.헬퍼 클래스를 통해 한 객체가 여러 델리게이트에게 동일한 이벤트를..

[Combine] Let's study Combine!

Let's study Combine!SwiftUI Combine 공부  ✅ 애플 공식 문서를 바탕으로 정리하였습니다.https://developer.apple.com/documentation/combine Apple Developer Documentation developer.apple.com   ✅ Combine이란?이벤트 처리 오퍼레이터들을 결합함으로써 비동기 이벤트의 핸들링을 사용자가 다룹니다!조금 더 쉽게 말해보자면 Combine 프레임워크는 결국은 시간에 따라 값을 처리하기 위해 SwiftUI API를 제공합니다. 값을 방출하는 Publisher와 값을 수신하는 Subscriber를 통해 처리합니다. RxSwift를 공부했다면 더욱 쉽습니다.   ✅ Combine을 공부하는 이유.SwiftUI(..

[SwiftUI] @StateObject

@StateObject ✅ 아래 공식문서를 바탕으로 작성하였습니다. https://developer.apple.com/documentation/swiftui/stateobject Apple Developer Documentation developer.apple.com 특성 선언에 @StateObject 속성을 적용하고 ObservableObject 프로토콜을 준수하는 초기 값을 제공하여 View, App 또는 Scene에서 상태 개체를 만듭니다. @StateObject var model = DataModel() SwiftUI에서는 객체를 선언하는 인스턴스에 대해 한 번만 객체의 새 인스턴스를 생성합니다. 관찰 가능한 객체의 속성이 변경되면 SwiftUI는 해당 속성에 의존하는 뷰의 일부를 업데이트합니다...

[SwiftUI] State and Data Flow

State and Data Flow ✅ 아래의 문서 중 필요한 부분을 골라서 작성하였습니다. https://developer.apple.com/documentation/swiftui/state-and-data-flow Apple Developer Documentation developer.apple.com SwiftUI는 user interface 디자인을 선언적으로 제공하고 있다. (선언형 프로그래밍) 따라서 view를 계층적으로 구성할 때 views를 위한 데이터도 종속성도 표시한다. 외부 이벤트 혹은 user가 취하는 액션에 의해 데이터의 변화가 있을 때, SwiftUI에 영향을 받는 부분을 자동으로 업데이트 합니다. 결과적으로 이 프레임워크(SwiftUI)는 전통적으로 viewController에..

iOS 화면 캡쳐 및 녹화 감지 (feat. SwiftUI)

iOS 화면 캡쳐 및 녹화 감지 (feat. SwiftUI)DRM 기술 적용에 대해서 연구하면서 화면 녹화 감지에 대해서 서술하고자 함. 화면 캡쳐 및 감지하는 시스템 코드// 화면캡쳐NotificationCenter.default.publisher(for: UIScreen.capturedDidChangeNotification) // 화면녹화NotificationCenter.default.publisher(for: UIApplication.userDidTakeScreenshotNotification) 코드 샘플  import SwiftUIstruct ContentView: View { var body: some View { ZStack { MainVie..

[SwiftUI] ViewModifier

ViewModifier ✅ 공식문서 https://developer.apple.com/documentation/swiftui/viewmodifier Apple Developer Documentation developer.apple.com ✅ 공석문서의 일부 ✅ 이를 통해서 중복되는 코드를 쉽게 줄일 수 있습니다. import SwiftUI struct ContentView: View { var body: some View { VStack(spacing: 50){ Text("Hello, world!") .modifier(MyRoundedText()) // modifier를 활용 Text("Hello, world!") .myRoundedTextStyle() Image(systemName: "pencil") ..