작은 앱 프로젝트

오직 필요한 기능만 제공하는 '작은 앱'을 디자인하고 개발합니다.

ios 2

백그라운드 스레드와 메인 스레드 간 전환으로 비동기 데이터 처리 개선 💡✨

iOS 앱을 개발하면서 얻은 지식과 깨달음, 그 과정에서 겪은 시행착오를 공유합니다.Contents 1. 백그라운드 스레드와 메인 스레드 간 전환 2. 의존성 주입(Dependency Injection)유연성테스트 용이성단일 책임 원칙확장성재사용성 3. SwiftUI View에서 ViewModel 사용 아이폰 캘린더(달력) 앱 스케줄러에서는 사용자가 좌우 스와이프로 '월'을 이동할 수 있다. 달력에 표시해야 하는 데이터가 적을 때는 크게 눈에 띄지 않지만, 데이터가 많아지면 움직임이 월을 이동하면서 살짝 끊기는 현상이 생긴다. 이 문제의 원인 중 하나를 월 이동 시 데이터 조회(Data Fetching) 같은 시간이 오래 걸리는 작업을 메인 스레드(Main Thread)에서 수행하고 있기 때문으로 추측하..

Concurrency 2024.06.22

Swift 동시성 코드 Race Condition 버그 해결 과정 💡✨

iOS 앱을 개발하면서 얻은 지식과 깨달음, 그 과정에서 겪은 시행착오를 공유합니다. iOS 캘린더(달력) 앱 스케줄러에는 '기본 캘린더' 기능이 있다. 애플 캘린더 등 외부 캘린더를 연동한 뒤, 연동한 캘린더에 일정 등록 시 가장 자주 쓰는 캘린더가 선택돼 있도록 하는 설정 기능이다. 이 기능은 연동 캘린더에 일정을 등록할 때 나타나는 아래 편집기의 '캘린더 선택' 부분에 사용자가 설정한 '기본 캘린더'가 선택돼 있도록 한다.    💡 경쟁 상태(Race Condition)로 발생한 문제 해결 과정 그런데 '가끔' 다른 캘린더가 선택돼 있을 때가 있었다. '가끔'이라는 표현이 중요하다. 항상 그런 게 아니었다. 대부분의 경우 정상적으로 동작했다. 어떻게 디버깅해야 할 지 감이 안 잡혔다. 가끔일지라도..

Concurrency 2024.06.20