ios 131

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 간의 의사소..

[git] Git-flow 전략과 프로젝트 예시(feat. Kuring)

Git-flow 전략과 프로젝트 예시(feat. Kuring) (포스팅 최초 작성) 2022.06.10(포스팅 수정) 2024.08.29커밋 내역 관리하는 방법 수정   ✅ Kuring에서 사용하는 Git-flow 분석과 Git-flow에 대해서 공부하며, Kuring에서 내가 사용하는 커밋 규칙을 정리하고자 포스팅합니다.  🥕 목차 🥕1. 우아한 형제들 Git-flow 전략에 대해서 알아보기2. Kuring의 Git-flow 전략 분석 (소규모 팀에서의 Git-flow 전략)3. Git-flow 전략을 개인 레포에 적용하고 연습해보기4. git 충돌 해결 방법  ✅ 1. 우아한 형제들 Git-flow 전략에 대해서 알아보기우아한 형제들 기술 블로그를 참고하여 Git-flow 전략에 대해서 공부해 봅..

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 인터페이스가 변하지 않으면 클라이언트 코드에 영향..

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..

Swift 디자인패턴 State Pattern (상태 패턴)

Swift 디자인패턴 State Pattern (상태 패턴) State Pattern은 객체의 내부 상태에 따라 동작이 변경되도록 설계하는 행동 패턴.  히스토리2022-05-30: 디자인 패턴 스터디 정리2024-11-27: 포스팅 글 재정리 및 조금 더 실용적인 예제 코드로 변경  State Pattern상태 패턴을 사용하면 객체의 상태를 별도의 상태 클래스로 추상화하고, 객체는 자신의 상태를 바꾸면서 동작을 동적으로 변경할 수 있음Context: 상태를 관리하고, 현재 상태에 따라 행동을 위임하는 클래스State: 공통 인터페이스 또는 추상 클래스 정의 모든 Concrete 클래스는 해당 인터페이스 구현Concrete State: State 인터페이스를 구현한 클래스로 상태별 고유 동작 저의상태..

SwiftUI Toast, popup

SwiftUI Toast, popup 오픈소스를 활용해서, 팝업 및 토스트 UI를 처리하는 부분을 기술.직접 구현해도 크게 어렵지 않으나, 개인 앱 개발 시 오픈소스를 활용함으로써 본질에 더 집중할 수 있다는 이점. 히스토리2022.05.23. 15:36초기 포스팅 PopupView 2점대 버전2024.11.18. 02:23PopupView 예제 개선 및 3점대 버전으로 재정리주의: 해당 오픈소스를 확장 개발하기 위해 PR 및 이슈를 검토하던 중, 메인테이너 분이 바쁘셔서 문제점을 다른 작업자의 PR을 고스란히 넣어주고 있음하지만, 개인 앱 개발에서 크리티컬한 문제가 되지 않아서 재정리 오픈소스 링크https://github.com/exyte/PopupView GitHub - exyte/PopupView..

[iOS] Thread 1: "Attempt to insert non-property list object () for key ~

Thread 1: "Attempt to insert non-property list object () for key ~ ✅ 이슈 리포트 오랜만이다. UserDefault를 사용하여 값을 저장할 때 발생하였다. UserDefault의 경우에는 기본적인 타입만 저장 가능한데, 나의 경우에는 struct를 통해서 내가 정의한 타입을 저장하면서 이 문제가 발생했다. 이를 해결하는 방법으로는! UserDefault를 사용할때 encode 및 decode를 이용하여 수행하면 된다! 그렇게 하면 bit로 저장되어서 문제 없이 저장되고 나중에 이것을 꺼내와서 decode하면 원하는 값을 얻을 수 있따.

[iOS] tableViewCell Swipe Action 구현하기

tableViewCell Swipe Action 구현하기 ✅ 이번 시간에는 tableViewCell Swipe Action을 구현해보자 직접 애플 문서를 읽어보는 것을 추천하지만, 이 포스팅에서는 정말 간략하게 어떻게 사용하는 지만 알아보자. 이번 포스팅에서는 1. tableView에서 leading과 trailing swipe를 지원해주는 메소드를 사용하여 구현하는 것 2. editStyle을 메소드를 활용하여 구현하는 것 을 볼 예정이다. ✅ 1. tableView에서 leading과 trailing swipe를 지원해주는 메소드를 사용하여 구현하는 것 func tableView(_ tableView: UITableView, leadingSwipeActionsConfigurationForRowAt i..