본문 바로가기

iOS공통

(15)
[iOS] 케어밋 프로젝트 기술회고1: 클린아키텍처 근 3개월간 진행한 케어밋 프로젝트에 대한 기술적 회고를 진행해 보려고 한다. 기술의 진정한 의의를 알지 못한 채로 사용한 기술이 많아 회고를 통해 해당기술에 대한 장단점을 논해보려고한다. 우선 프로젝트의 깃허브 링크는 아래와 같다.   GitHub - 3IDLES/idle-iOS: SW Maestro 15th | 재가요양 시장의 새로운 구인구직 플랫폼 | 케어밋SW Maestro 15th | 재가요양 시장의 새로운 구인구직 플랫폼 | 케어밋. Contribute to 3IDLES/idle-iOS development by creating an account on GitHub.github.com 4편에 걸쳐 회고하려는 주제는 다음과 같다. 뭔가 모바일 개발자가 한번쯤은 생각해볼 만한 주제라고 생각해서 글..
[iOS] 첫 어플리케이션 배포 심사 회고 첫번째 어플리케이션 배포를 앞두고  심사를 통과했다는 메일 받은 직후 심사과정을 회고해 보려고 합니다.  HIG와 배포 심사 애플은 일명 HIG라는 디자인 가이드라인을 제공합니다. HIG를 읽어보신 분들은 아시겠지만, HIG는 어떻게 해야하며 어떤 것이 잘 들어나야 한다 등 구체적인 부분을 강조합니다. 저도 HIG를 읽고 적용하려고 노력하지만, 그 양이 방대하고 모든 UI에 대한 규율을 하나하나 기억하는 것인 상당히 어렵다고 생각합니다. 따라서 HIG를 인자하돼 UI개발시 시중에 출시된 앱의 래퍼런스를 많이 참고하였습니다. (당근마켓, 토스) 레퍼런스를 바탕으로 어플리케이션의 현재 상태에 대해 유저에게 직관적으로 인지시키는 것을 가장 높은 우선순위로 하였습니다.    해당 마인드셋을 지향한 결과 총 50..
[Swift] 이미지 캐싱을 통한 로딩속도 최적화 안녕하세요 최근 프로젝트에 적용한 이미지 캐싱방법에 대해 회고해 보려고합니다. 우선 문제는 다음과 같았습니다. 크기가 큰 이미지의 경우 로딩속도가 생각보다 오래걸렸습니다. 화면상에 존재하는 이미지는 하나뿐이지만, 사용자가 리스트 형태로 주어지는 경우 반복적인 로딩은 유저경험을 크게 저하시킬 것이 분명했습니다. 따라서 이미지를 캐싱하기로 했습니다.  아래영상은 이미지 로딩 속도입니다.  KingFisher를 사용하지 않은 이유 이미지 캐싱을 위해 KingFisher라이브러리를 많이 사용합니다.   현재 개발중인 서비스는 iOS와 AOS에서 모두 동작합니다.  따라서 두 플랫폼에서 업로드한 이미지를 플랫폼에 상관없이 보여주기위해 파일 포맷을 통일하기로 했습니다.(iOS에 가장 최적화된 형식인 HEIC타입의 ..
[아키텍처 패턴] MVP에서 VIPER까지 안녕하세요 오늘은 모바일 엔지니어링에 사용되는 아키텍처 패턴에 대해  경험을 통해 얻은 제 생각과 느낀점을 정리해 보려고 합니다.  MVC, MVP, MVVM, VIPER  이렇게 4가지에 대해 다뤄보려고 합니다.  아키텍처 패턴은 왜 사용하는가? 아키텍처 패턴은 시스템의 구조와 그 시스템을 구성하는 요소들 간의 상호작용 방식을 정의하는 패턴입니다.  정형화된 패턴은 작업을 진행하는 사람이 다수인 경우 가독성을 증가시킬 수 있는 장점이 있습니다.  만약, 작업을 하던 사람이 바뀌게 되어도 작업을 그대로 이어나갈 수 있게 됩니다.  또한, 기능에 대한 역할을 각영역에 분배하여 문제가 발생시 빠르게 그 원인을 찾을 수 있습니다.  종합적으로 보았을 때, 아키텍처 패턴은 시스템이 끊임없이 안정적으로 구동하는데..
[RxSwift] subscribe(on:)과 observe(on:)의 차이를 아시나요? RxSwift로 개발을 하다보면,  특정 옵저버블이 옵저버에게 전달해주는 이벤트를 처리하는 작업을  특정쓰레드에서 진행되도록 해야하는 경우가 있습니다.  UI관련 로직이라면 반드시 메인쓰레드에서 해당 작업이 이뤄나도록 해야하는 것 처럼요.  Rx는 Scheduler라는 것을 사용하여 멀티 쓰레드 환경을 관리합니다.  먼저 Rx에서 Scheduler가 의미하는 것이 어떤 것인지 살펴봅시다.  Scheduler  MainScheduler,ConcurrentDispatchQueueScheduler,SerialDispatchQueueScheduler,OperationQueueScheduler,ImmediateScheduler,CurrentThreadScheduler  우선 Rx에는 다양한 스케쥴러가 존재하는데요..
[자료구조] 해시 테이블(+Swift) 안녕하세요 오늘은 자려구조중 해쉬테이블에 대해 다뤄보겠습니다. 어떤 개발자에게 "해시테이블을 모르면 개발자가 아니다." 라는 말을 들은적이 있는데요. 해시테이블 개념에 대해 정리해보고, Swift에서는 어떻게 활용할 수 있을지 알아보겠습니다.   해시 테이블해시 테이블은 key, value쌍으로 이루어진 자료구조입니다.  내부적으로 배열을 사용하여 구현됩니다. key값을 배열의 인덱스로 변경하기 위해 해시함수를 사용합니다. 해시함수마다 성능의 차이는 존재하지만, 서로다른 키 값에 대해서 같은 해쉬값이 생기게되어 충돌(collision)이 발생할 수 있습니다. 해당 경우를 해결하기 위한 방법들은 다음과 같습니다.   체이닝특정 해시값이 가리키는 공간을 링크드 리스트의 시작점으로 하고 충돌이 발생하는 경우 ..
[Swift] GCD와 Swift concurrency에 대해 안녕하세요 비동기 프로그래밍에 대해 공부한 내역을 정리해 보려고 작성한 포스팅입니다. 기본적으로 iOS프로그래밍은 2가지 비동기 처리방식을 제공합니다. 바로 GCD와 비교적 최근에 도입된 Swift concurrency입니다. 무언가 새로운 것을 만들어 냈다는 것은 기존의 문제를 해결자는 의지에서 나온다고 생각합니다. 따라사 애플이 Swift concurrency를 통해서 해결하고자 했던 문제가 무엇이었는지에 대해 다뤄 보려고 합니다. ※ 쓰레드는 특정시점에 하나의 작업을 실행할 수 있으며, 작업의 단위는 코드 블록(하위블록 포함)이다. GCD오브젝티브C 부터 사용된 비동기 프로그래밍 방식입니다. GCD는 DispatchQueue를 통해 작업을 조율합니다. 등록된 작업들을 FIFO방식으로 쓰레드를 사용..
[RxSwift] self순환 참조에 대해 안녕하세요 주니오스입니다. 오늘은 RxSwift에서 평소에 습관처럼 사용했던 동작에 대해 한번 자세하게 다루어 보려고합니다.  옵저버블에 대한 구독을 클래스타입 내부에서 진행하고, 내부 프로퍼티를 이벤트를 수신함으로써 수정하고 싶은 경우 위와 같은 패턴을 사용하여 순환참조를 막습니다. 변경되는 부분이 많아지는 경우 self를 많이 사용해야 하기 때문에 매우 귀찮은 작업입니다. 우선 self를 캡쳐해야 하는 이유에 대해 알아보겠습니다. 명시적 Self를 요구하는 이유 클로저나 매서드나 모두 함수인데 우리는 매서드에서 프로퍼티를 수정하는 경우 self를 사용하지 않는 다는 것을 알고 있습니다.  본론부터 말씀드리면, subscribe에 전달된 클로자는 궁극적으로 탈출클로져에 전달되게 됩니다. 따라서 함수블록..