1. 프로젝트 개요
SwiftUI를 활용한 iOS용 가계부 앱 개발기는 총 9편으로 구성되며, 본 글은 그 첫 번째 이야기입니다. 이 앱은 개인의 수입과 지출을 쉽게 관리하고 통계로 시각화해주는 기능을 목표로 제작되었습니다. 실사용자를 고려한 기능과 디자인, 그리고 로컬 저장소인 CoreData 기반의 구조로 설계되어 네트워크 연결 없이도 안정적으로 사용할 수 있는 것이 특징입니다.
2. 개발 배경
가계부 앱은 이미 다양한 형태로 존재하지만, 사용자의 실제 사용 흐름에 최적화된 앱은 많지 않습니다. 기존 앱을 사용하면서 느꼈던 불편함, 예를 들어 복잡한 입력 과정이나 직관적이지 않은 UI 등을 개선하고자 이 앱을 기획하게 되었습니다. 또한 SwiftUI의 진입 장벽이 낮아진 만큼, 최신 기술을 실전 프로젝트에 적용해보자는 개발적 동기도 함께 있었습니다.
3. 사용 기술 스택
- 프레임워크: SwiftUI
- 데이터 저장: CoreData
- 아키텍처: MVVM (Model-View-ViewModel)
- 시각화: Charts (iOS 16+ 내장 라이브러리)
- 언어 지원: 다국어(Localization) 적용 (한국어/영어)
4. SwiftUI를 선택한 이유
SwiftUI는 선언형 UI 프레임워크로, 기존 UIKit 기반 개발에 비해 훨씬 간결하고 직관적인 코드로 UI를 작성할 수 있습니다. 특히 다양한 뷰 간 상태 공유와 반응형 업데이트가 중요한 가계부 앱에서는 @State
, @Binding
, @ObservedObject
와 같은 SwiftUI의 상태 관리 도구들이 큰 장점이었습니다. UI 요소들이 데이터의 변경에 따라 자동으로 갱신되므로 사용자의 상호작용 흐름을 더 쉽게 구성할 수 있습니다.
또한 SwiftUI는 Apple 플랫폼 전반에서 통일된 디자인 시스템을 제공하므로, 일관된 사용자 경험을 설계할 수 있습니다. 이를 통해 iOS뿐 아니라 iPadOS, macOS 등 다양한 확장 가능성을 고려해볼 수 있는 구조를 설계했습니다.
5. MVVM 구조를 도입한 이유와 이점
MVVM은 View, Model, ViewModel로 구성되는 아키텍처입니다. 이 앱에서도 화면을 담당하는 View
, 데이터 구조와 저장을 처리하는 Model
, 로직과 상태를 중계하는 ViewModel
을 분리함으로써 다음과 같은 이점을 얻었습니다:
- 코드의 명확한 역할 분리: UI 코드와 비즈니스 로직이 분리되어 가독성과 유지보수성이 크게 향상됩니다.
- 테스트 용이성: ViewModel은 UI에 의존하지 않으므로 단위 테스트가 더 쉽습니다.
- 재사용성 증가: ViewModel의 로직은 다양한 View에서 재사용이 가능해 확장성과 일관성을 확보할 수 있습니다.
- SwiftUI와 자연스러운 연계: SwiftUI는 MVVM과 매우 잘 맞는 구조를 가지고 있어
@StateObject
,@ObservedObject
등을 통해 ViewModel과의 연동이 수월합니다.
6. 전체 구조 소개
앱은 크게 다음과 같은 주요 기능으로 구성됩니다:
- 수입/지출 내역 기록: 날짜, 금액, 카테고리, 결제수단 등의 정보 입력
- 카테고리 및 카드 관리: 사용자 맞춤 항목 추가 및 삭제
- 통계 기능: 월별 수입/지출 비교, 필터링 기능 포함
- 설정 화면: 테마, 잠금 설정, 광고 제거 등 사용자 설정 기능
- 다국어 지원: 시스템 언어에 따라 자동으로 한국어/영어 인터페이스 적용
이러한 구조를 바탕으로, 사용자의 데이터 입력부터 통계 확인까지 모든 흐름이 자연스럽고 빠르게 이루어질 수 있도록 UX를 설계했습니다.
SwiftUI 가계부 앱 개발기 2편 – Core Data 모델 구성과 Entity 설계 에서는 CoreData를 활용해 수입과 지출 데이터를 어떻게 모델링했는지 구체적으로 살펴보겠습니다.
시리즈 목록
SwiftUI 가계부 앱 개발기 1편 – 프로젝트 생성과 폴더 구조 설계
SwiftUI 가계부 앱 개발기 2편 – Core Data 모델 구성과 Entity 설계
SwiftUI 가계부 앱 개발기 3편 – 필터 기능 구현
SwiftUI 가계부 앱 개발기 4편 – 카테고리 관리 기능 구현
SwiftUI 가계부 앱 개발기 5편 – 카드 관리 기능: 결제일 및 청구 주기 설정
SwiftUI 가계부 앱 개발기 6편 – 통계 화면 구성: 월별 그래프 및 유형별 정리
SwiftUI 가계부 앱 개발기 7편 – 다국어(Localization) 지원: 한국어/영어 국제화 처리