개요 SwiftUI를 활용해 앱을 개발하면서, 데이터 저장 도구에 대한 선택지를 고민했습니다. iOS 앱을 개발할 때 데이터 저장 솔루션을 선택하는 것은 중요한 결정입니다. 데이터를 어떻게 저장하고 관리할지를 결정하는 것은 앱의 성능, 확장성 및 개발 경험에 큰 영향을 미칩니다. 이 글에서는 Core Data와 Realm의 장단점을 비교하고 어떤 상황에서 어떤 것을 선택해야 하는지 알아보겠습니다. Core Data 장점: 공식적인 Apple 지원: Core Data는 Apple에서 제공하는 공식 데이터 저장 및 관리 프레임워크로서 iOS 개발 생태계와 밀접한 통합을 제공합니다. SwiftUI와의 호환성이 뛰어나며, Apple의 업데이트에 즉시 대응할 수 있습니다. 간편한 통합: SwiftUI에서 @Fet..
☀️ 기상 모니터링 애플리케이션 만들기 현재 기상 조건(온도, 습도, 기압)을 추적해서 아래 결과를 표시하는 앱을 만들어 보려고 해요 :] 1. 현재 조건 2. 기상 통계 3. 간단한 기상 예보 기상 모니터링이므로 당연히 이 항목들은 모두 실시간으로 갱신돼야 해요. 여기에 더해 추가 요구 사항이 있어요.. 다른 개발자가 직접 날씨 디스플레이를 만들어서 바로 넣을 수 있도록 확장 가능해야 합니다. 나중에 새로운 디스플레이를 손쉽게 추가할 수 있도록 해주세요. 🤖 시스템 파악하기 이 시스템은 총 3가지로 구성되어 있어요. 1. 기상 스테이션 ➡️ 실제 기상 정보를 수집하는 물리 장비(데이터를 제공하는 부분) 2. 기상 스테이션으로부터 오는 정보를 추적하는 객체 ➡️ WeatherData 객체 3. (제공되는..
🔥 헤드퍼스트 디자인패턴 시작하기 "헤드퍼스트 디자인패턴"은 Java를 기반으로 쓰인 책이지만, 여기서는 Swift로 구현하며 내용을 정리해 볼게요! 항상 그렇지만 이 글은 개인적인 정리의 목적으로 작성하는 것이기 때문에 책을 직접 읽어보기를 추천드려요 :] 🐥 오리 시뮬레이션 게임 만들기 SimUDuck이라는 오리 게임을 만들어볼게요 :] 방법 1. 일반적인 상속 구조 사용하기 일반적인 표준 객체지향 기법을 사용하여 Duck이라는 Super class를 만들고, 상속을 통해 여러 오리를 만들어요. (private, final 등 세세한 설정 등은 생략할게요) 각 오리들은 부모 클래스(Duck)의 메서드를 override 하여 사용해요. 🚨 추가 요구 사항 발생 ➡️ 오리는 날 수 있어야 합니다 여기서 ..
개요 자주 쓰는 단축키는 초록색 으로 표시하고, 개인적으로 잘 외워지지 않는 단축키는 핑크색 으로 표시했어요(나중에 보려고 정리한 거라..) 참고의 Apple 공식 문서에 들어가면 더 많은 단축키를 볼 수 있어요! 필요에 따라 지속적으로 업데이트될 예정이에요. 아래 정보는 Xcode 14.1을 기준으로 해요. 혹시 잘못된 정보가 있다면 피드백 부탁드려요 🙏 🛠 XCode 단축키 Command(⌘) + Shift(⇧) + K : 프로젝트 클린 Command(⌘) + B : 프로젝트 빌드 Command(⌘) + R : 프로젝트 실행 Command(⌘) + I : 프로젝트 프로파일링 빌드 Command(⌘) + T : 새로운 탭 열기 Command(⌘) + [ : 해당 코드 왼쪽으로 indent 한 탭(4 s..
개요 앱의 크래쉬를 분석하다 보면 네트워크 이슈를 의심하는 경우가 있어요. 그런 상황을 재현하기 위해 맥에서 네트워크 속도를 조절할 수 있는 툴을 소개합니다 :) Mac에서 네트워크 속도 조절하기 Network Link Conditioner는 애플에서 공식적으로 제공해주는 도구예요. 그래서 안심하고 사용할 수 있어요. 설치하기 2022년 10월 기준 Network Link Conditioner는 Apple Developer 사이트에서 다운로드할 수 있어요. Apple Developer Downloads 로그인 - Apple idmsa.apple.com Additional Tools 혹은 Network Link Conditioner로 검색하면 아래와 같이 나와요. Network Link Conditione..
개요 이번 글은 공유의 목적이라기보다 XCTest를 사용하며 개인적으로 놓쳤던 세세한 부분을 기록하는데 목적이 있어요. 가볍게 작성하는 내용이라 가볍게 읽으시면 좋을 것 같아요 :) 이 글은 Raywenderlich의 Testing in iOS를 기반으로 합니다! 위의 강의를 보면서 놓쳤던 부분을 기록한 연습장 정도로 보셔도 좋을 것 같아요! XCTest INFO I missed 1. Test를 진행할 때 Scheme 설정 Test를 구현할 때(특히 TDD)를 할 때 중요한 것이 테스트의 속도예요. 테스트를 구현할 때 모든 구현이 끝난 후 마지막에만 실행시켜보는 것이 아니라 실패 테스트를 먼저 작성하고, 테스트를 구현하는 과정 중간중간에 지속적인 테스트가 필요해서 빠른 테스트 속도는 정말 중요해요. 기본..
개요 이번 글에서는 iOS File System에 대해서 이야기해보겠습니다! 어떤 앱에서 다른 앱(또는 위젯)에 원하는 데이터를 전달하는 데에 저장소에 대한 이해가 필요해서 이 글을 쓰게 되었어요 :] 우선, 공식 문서를 기준으로(iOS를 초점으로) 저장 시스템의 기본을 이해해볼게요! File System이란? Apple 생태계의 기본 파일 시스템은 APFS로 macOS, iOS, watchOS, tvOS 파일 시스템의 기본이 돼요(iOS 10.3 이상, macOS HighSierra 이상). 여기서 파일 시스템이란 데이터 파일, 앱 및 운영체제와 관련된 파일의 저장소를 처리하는 시스템을 의미해요. 특정 데이터를 저장, 삭제, 수정하는 것처럼 파일 시스템과 상호 작용하는 코드를 작성하기 위해서는 이 시스..
1편 글에 이어서 2편 글을 이어나갈게요! SwiftUI에서 UI 업데이트하기 SwiftUI의 View에서 프로퍼티 값을 변경할 경우, @State를 마킹해서 "변경이 필요한 상태 값"이라는 것을 표시해요. UIKit의 경우 특정 객체의 상태를 변경해주기 위해 그 객체에 접근해서 메서드를 통하거나 직접 그 프로퍼티의 값을 변경했었어요. 이 과정에서 타이밍에 따라 의도하지 않은 결과가 나오거나 버그가 발생하는 등의 문제가 발생하기 쉬워서 고려해야 할 게 많아요. SwiftUI의 경우 @State로 마킹된 프로퍼티의 값이 변경될 경우, 그 뷰를 무효화(invalidate)하여 숨겼다가 body를 다시 계산해서 보여줘요. UIKit의 경우 어떤 값을 보여주다가 그 값을 갱신할 경우 기존의 UI에서 reload..
- Total
- Today
- Yesterday
- Brackets#Stacks and Queues#Codility#Python
- Distinct#Codility#Python
- 토마토#백준알고리즘#Python
- API#lazy#
- 리모컨#완전탐색#BOJ#Python
- 암호코드#dp#BOJ#Python
- 나무자르기#BOJ#이분탐색#Python
- Triangle#Sorting#Codility#Python
- filter#isalnum#lower
- PassingCars#Codility#Python
- 공유기 설치#BOJ#이분탐색#Python
- 랜선자르기#이분탐색#BOJ#Python
- 배열합치기#분할정복#BOJ#Python
- django
- NumberofDiscIntersections#Codility#Sort#Python
- 파이썬알고리즘인터뷰#4장
- 병든 나이트#BOJ#탐욕법#Python
- 날짜 계산#BOJ#완전탐색#Python
- N으로 표현#DP#Programmers#Python
- 미로 탐색#백준알고리즘#Python
- Swift#Tuples#Range
- 쿼드트리#BOJ#분할정복#Python
- 텀 프로젝트#백준알고리즘#Python
- 섬의개수#백준알고리즘#Python
- 반복수열#백준알고리즘#Python
- 백준 알고리즘#BackTracking
- django#slicing
- 순열사이클#BOJ#Python
- MinAvgTwoSlice#Codility#Python
- 종이자르기#분할정복#BOJ#Python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |