본문 바로가기
728x90
SMALL

SWIFT9

💰 Swift reduce 완전 정복: totalAmount() 메서드로 배우는 누적 합계 계산 앞서 살펴본 filteredTransactions 함수는 특정 타입과 날짜에 해당하는 거래 내역만 골라내는 데 사용되었습니다.이번에는 그 필터링된 거래들을 합산해서 누적 금액을 계산하는 totalAmount() 메서드를 소개하려고 합니다.📦 함수 선언func totalAmount( type: TransactionType, in date: Date, granularity: Calendar.Component = .month) -> Int { let filtered = filteredTransactions(type: type, in: date, granularity: granularity) return filtered.reduce(0) { $0 + $1.amount }}🧭 이 함.. 2025. 8. 3.
🧾 iOS MVVM 가계부 앱 - 거래 내역 조회(Read), 수정(Update), 삭제(Delete) 기능 완벽 구현 이전 글에서는 MVVM 구조에서의 TransactionViewModel 전반 구조와 초기화 방식에 대해 정리했습니다.이번 글에서는 그 ViewModel 내부에서 수행되는 데이터 읽기, 수정, 삭제 기능을 소개합니다.✳️ 전체 흐름 요약모든 데이터 처리는 TransactionCoreDataManager를 통해 Core Data와 통신하며, Combine을 통해 비동기 스트림을 처리합니다. 📌 관련 구조:TransactionViewModel → View에서 호출TransactionCoreDataManager → Core Data와 실제 상호작용@Published → UI 바인딩을 위한 데이터 상태 반영📖 Read - 거래 내역 불러오기✅ 모든 거래 내역 불러오기 (readAllTransactions()).. 2025. 8. 3.
💸 iOS MVVM 가계부 앱 - ViewModel(TransactionViewModel) 구조 완벽 정리 가계부 앱을 MVVM 구조로 개발하면서 핵심 역할을 하는 TransactionViewModel에 대해 소개합니다.이 글에서는 ViewModel의 역할, 내부 구조, init 설계 이유, 그리고 View와의 데이터 흐름까지 모두 짚어볼게요.🎯 ViewModel이란?MVVM에서 ViewModel은 View와 Model 사이의 중간 매개체로 작동합니다.사용자의 입력을 받아 Model에 반영하고, Model의 데이터를 가공해 View에 제공합니다.💡 이 글에서는 실제 프로젝트에 사용한 TransactionViewModel을 기준으로 설명합니다.📦 전체 구조 살펴보기final class TransactionViewModel { // MARK: - Published Properties @Pu.. 2025. 8. 3.
📦 iOS MVVM 가계부 앱 - Core Data 삭제(Delete) + 이미지 제거까지 정리 가계부 앱에서 한 번 입력한 지출/수입 데이터를 삭제하는 기능은 반드시 필요합니다. 특히 사용자가 실수로 입력했거나, 잘못된 이미지를 포함한 경우 Core Data + 이미지 파일까지 함께 삭제하는 구조가 되어야 합니다. 이번 글에서는 deleteTransaction(id:) 함수를 중심으로 Core Data에서의 삭제 처리 흐름과 이미지 정리 방식까지 상세히 정리합니다.🧩 1. 삭제 함수 코드func deleteTransaction(id: UUID) -> AnyPublisher { return Future { [weak self] promise in guard let self = self else { print("❌ deleteTransaction: self가 n.. 2025. 8. 2.
📚 iOS MVVM 가계부 앱 - Core Data 수정(Update) + 이미지까지 깔끔히 반영하는 법 가계부 앱을 만들면서 생기는 대표적인 고민 중 하나는 "기존에 등록된 내역을 수정할 때 이미지나 메모를 어떻게 반영하지?" 입니다.이번 글에서는 Core Data에서 기존 내역을 업데이트하고, 선택적으로 이미지까지 덮어쓸 수 있는 구조를 소개합니다.💡 목표 기능사용자가 등록한 기존 내역(지출/수입)을 수정메모, 금액, 카테고리 등 변경 사항 반영기존 이미지가 있을 경우:이미지 삭제이미지 교체기존에 이미지가 없더라도 새로 추가 가능📦 업데이트 함수 코드func updateTransaction(_ updatedTransaction: ExpenseModel) -> AnyPublisher { return Future { [weak self] promise in guard let self =.. 2025. 8. 2.
💾 Core Data와 FileManager로 지출 내역 저장하기 Core Data + FileManager + Combine 조합으로 데이터와 이미지까지 한 번에 저장하기✨ 목표지출 내역을 저장할 때,기본 정보(날짜, 금액, 메모 등)는 Core Data에선택 이미지가 있다면 FileManager에 저장하고 → 저장된 이미지 경로를 Core Data에 함께 저장해 관리하는 방식.✅ 핵심 클래스: TransactionCoreDataManagerfinal class TransactionCoreDataManager { // MARK: - Variable static let shared = TransactionCoreDataManager() private let context = (UIApplication.shared.delegate as! AppDe.. 2025. 8. 1.
📦 Swift에서 FileManager로 이미지 저장하기 – 이미지 저장, 경로 관리, 불러오기까지의 전체 흐름 정리 Swift의 FileManager를 사용해 이미지를 저장하고, 저장된 경로를 활용해 불러오거나 삭제하는 기능을 구현할 수 있습니다. 이번 글에서는 단순히 코드만 보여주는 것이 아니라 이미지를 저장하고 관리하는 전체 과정을 어떤 흐름으로 설계하고 구현해나가는지에 대해 설명합니다. ✅ 최종 목표사용자가 입력한 지출 내역에 이미지가 있을 경우, 해당 이미지를 FileManager로 저장하고 저장 경로를 String으로 저장저장된 경로를 이용하여 이미지 불러오기수정 또는 삭제 시 해당 폴더의 이미지 제거🧱 전체 구조 설계: 어떤 흐름으로 진행할까?💡 목표: 이미지를 저장하고, 그에 대한 경로를 기억하기1. 이미지를 저장할 디렉토리 위치 지정 (예: Documents 폴더)2. 거래(transaction) 단.. 2025. 7. 31.
📱 iOS 가계부 앱 데이터 모델 설계하기 enum + class를 활용한 깔끔하고 확장성 높은 데이터 구조 설계💡 어떤 앱인가요?제가 만들고 있는 이 앱은 지출이나 수입을 이미지(카메라/앨범)와 함께 기록할 수 있는 iOS 가계부 앱입니다.예를 들어:영수증을 찍어서 저장하거나감성적인 쇼핑 사진을 남기거나어떤 항목에 얼마를 썼는지를 사진과 함께 기록하는 목적이에요.그래서 금액, 카테고리, 메모 외에도 사진(image) 필드가 꼭 필요했고, 수입/지출을 명확하게 분리하면서도 관리하기 쉽도록 데이터 모델을 설계했습니다.🧱 데이터 구조 설계1. enum TransactionType: 수입 / 지출 타입수입(income)과 지출(expense)을 구분각각에 따른 카테고리 목록과 아이콘 맵핑 제공2. class ExpenseModel: 실제 기록되는 .. 2025. 7. 30.
📊 Swift로 주간 수입·지출 요약 만들기 – weeklySummary 함수 분석과 고차함수 filter 완전 이해하기🧭 이 글의 목적 iOS 앱에서 주간 단위로 수입과 지출을 요약해서 보여주는 화면을 만들고 싶을 때, 아래처럼 날짜별로 정리된 데이터가 필요합니다.[ ("Mon", 12000.0, 3000.0), ("Tue", 0.0, 5500.0), ("Wed", 0.0, 0.0), ... ("Sun", 5000.0, 10000.0)] 이번 글에서는 이를 가능하게 해주는 weeklySummary라는 함수를 소개하고, 그 핵심인 고차함수 filter의 사용 이유와 구조를 상세히 분석합니다.✅ weeklySummary 함수 – 무슨 역할을 할까?🔹 함수 정의func weeklySummary(in baseDate: Date) -> [(d.. 2025. 7. 29.
728x90
LIST