일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- async
- mvc
- 옵셔널
- 이론
- observable
- 대표
- RxSwift
- swift
- 실습
- 구름톤 유니브
- 네트워크
- 반응형
- struct
- ios
- 학과별커뮤니티
- 스트럭트
- 캐시
- 토이프로젝트
- CS
- snkit
- WeatherKit
- SwiftUI
- 기초문법
- uikit
- 세종대학교
- 동시성
- 프로토콜
- Kingfisher
- collectionview
- 라이브러리
- Today
- Total
목록분류 전체보기 (113)
스윞한 개발자

안녕하세요! 또 새로운 주제로 포스팅을 해보려고 합니다! 오늘의 주제는 "@Observable 매크로의 내부 동작과 ObservableObject와의 비교"입니다! 오늘 포스팅에서는 WWDC23에서 소개되고 iOS17부터 본격적으로 사용할 수 있게 된 @Observable 매크로에 대해 파해쳐보겠습니다! # ObservableObject의 한계 SwiftUI가 처음 등장했을 때, 상태 관리를 위해 ObservableObject 프로토콜과 @Published 속성 래퍼를 사용했습니다.저 또한 아직까지 뷰모델에서 ObservableObject와 @Published를 자주 사용하는 거 같습니다. ObservableObject의 특징을 보면1. ObservableObject는 참조 타입인 클래스에서만 사용이 ..

안녕하세요! 이번 포스팅에서는 SNKit 시리즈의 마지막 이야기를 적어보려 합니다. 지금까지 SNKit의 개발 배경, 캐시 시스템, ETag 검증 및 다운로드 시스템에 대해 살펴보았습니다. 이번 글에서는 SNKit의 마지막 핵심 기능인 이미지 처리 시스템과 UIKit과의 통합(추후에 SwiftUI도 반영예정입니다!)에 대해 자세히 알아보겠습니다. 이미지 처리의 중요성모바일 앱에서 이미지 처리는 성능과 사용자 경험에 큰 영향을 미칩니다.1. 메모리 효율성고해상도 이미지를 그대로 사용하면 메모리 사용량이 급증하여 앱 성능이 저하되고, 최악의 경우 메모리 부족으로 인한 앱 종료가 발생할 수 있습니다. 특히 iOS 기기에서는 메모리 한계가 명확하기 때문에, 이미지 크기를 적절히 조절하는 것이 필수적입니다.2...

안녕하세요! 오늘은 제가 iOS 앱 개발을 하면서 정말 중요하다고 느낀 SwiftUI 뷰 렌더링 최적화 기법에 대해 이야기해보려고 합니다. 최근에 불투명 타입과 Type Erasure에 대한 글을 썼었는데요, 이번엔 조금 더 실용적인 내용을 가져왔습니다! SwiftUI로 앱을 개발하다 보면 처음엔 모든 게 신기하고 간단해 보이지만... 앱이 복잡해질수록 성능 문제가 눈에 띄기 시작하죠. 특히 화면이 버벅거리거나 스크롤할 때 프레임이 떨어지는 현상은 사용자 경험에 치명적이라고 생각합니다. 제가 처음에 SwiftUI에 대해 공부했을 때는, 렌더링? 뷰가 언제 다시 그려지고 언제 안 그려지는지는 전혀. 생각해보지 못했습니다. 아~~ 그냥 그려지는구나! 어? 돌아가네.. 라고만 생각하고 프로젝트를 만들기 급..

안녕하세요! SNKit 개발 일지 이후에 오랜만에 다른 주제로 돌아온 거 같습니다 ㅎㅎ 요즘에 SwiftUI에 대해 다시 공부를 시작했는데요! 보면 볼수록 늘 새롭고 짜릿한... SwiftUI.. 제가 처음에 SwiftUI를 시작했을 때는 강의만 듣고 구현하기에 급급했는데요,,, some,, AnyView... 등등그냥 구현하기 위해 왜 쓰는지도 모르고 사용했었죠.그래서 오늘은! Swift Opaque Type vs Swift Type Erasure에 대해 비교해 보고 정리해 보겠습니다!두 가지 중요한 개념인 Opaque Type과 Type Erasure은 정보를 추상화하는 방법이지만, 사용 목적과 동작 방식에는 중요한 차이가 있습니다. 우선 타입의 정보를 추상화한다... 결국 타입의 정보를 숨기는 과..

안녕하세요! 이번 포스팅에서는 캐시 라이브러리 SNKit에 대한 4번째 개발일지를 적어보려 합니다! 벌써 4번째라니.. 처음에는 걱정이 많았지만 잘(?) 개발하고 있는 거 같습니다!! 오늘 소개해 드릴 내용은 제가 캐시 라이브러리를 만들어보고자 한 이유 중 하나인 ETag에 대해 다뤄보려고 합니다.이번 글에서는! SNKit의 핵심 기능인 ETag와 이미지 다운로드 시스템에 대해 다뤄보도록 하겠습니다! HTTP 캐싱과 ETag의 이해이미지 캐싱 시스템을 효율적으로 구현하기 위해서는 HTTP 프로토콜의 캐싱 메커니즘을 잘 활용하는 것이 중요합니다. 그중에서도 ETag는 매우 유용한 기능입니다. 제가 처음 캐시에 대해 스터디를 할때 여러 질문 공격(?)을 받았던 적이 있습니다.1. URL을 키로 이미지를 저장..

안녕하세요!이번 포스팅에서는 지난 시간에 메모리 캐시에 대해 구현했던 것에 이어서 디스크/하이브리드 캐시를 구현해 본 과정을 정리해 보았습니다! 디스크 캐시 구현 세부사항디스크 캐시는 앱이 종료된 후에도 데이터를 유지할 수 있는 장점이 있지만, 메모리 캐시보다는 접근 속도가 느립니다. SNKit에서는 파일 시스템을 활용한 디스크 캐시를 다음과 같이 구현했습니다. final class DiskCache { private let fileManager = FileManager.default private let cacheDirectory: URL private let lock = NSLock() private let capacity: Int private let expiration..

안녕하세요! 이번 포스팅에서는 최근 개발을 시작한 SNKit의 개발 첫 번째 이야기를 다뤄보려고 합니다. 첫 번째 글에서는 SNKit의 개발 배경과 전체적인 기획에 대해 살펴보았습니다. 이번 글에서는 SNKit의 핵심 기능인 메모리 캐시와 디스크 캐시의 구현에 대해 자세히 알아보겠습니다. 캐시 시스템 설계 요구사항효율적인 이미지 캐싱 시스템을 구축하기 위해 다음과 같은 설계 요구사항을 구성했습니다!!메모리 효율성: 과도한 메모리 사용 방지하기지속성: 앱 재시작 후에도 필요한 데이터 유지하기만료 관리: 오래된 캐시 항목을 자동으로 정리하기용량 제한: 지정된 용량을 초과하지 않도록 자동으로 관리하기스레드 안전성: 여러 스레드에서 동시에 접근해도 안전하게 동작하도록 관리메타데이터 관리: 이미지 외에도 관련 ..

안녕하세요! 이번 포스팅에서는 DB Transaction / ACID 에 대해 정리해 보겠습니다! DB 트랜잭션(Transaction)과 ACID란?1. DB 트랜잭션이란?우선 정의를 살펴보면,, 데이터베이스(DB)에서 트랜잭션(Transaction)은 여러 데이터베이스 연산이 하나의 논리적 단위로 묶여서 실행되는 일련의 작업들을 말합니다. 트랜잭션은 여러 데이터베이스 작업을 하나의 단위로 처리하여, 데이터의 일관성 및 무결성을 보장합니다.... 이렇게 말하면 감이 잘 안 오실 텐데요! 은행 계좌 간 이체 작업을 예를 들겠습니다. "계좌 A에서 돈을 빼고, 계좌 B에 돈을 넣는" 작업은 둘 다 하나의 트랜잭션(연산단위)으로 묶여야 하며, 한쪽만 실행되고 다른 쪽은 실행되지 않는 경우는 허용되지 않습니다..