본문 바로가기

전체 글

(40)
[UIKit] UIViewController계층 동작 제대로 이해하기(+트러블 슈팅) 안녕하세요  최근 저는 RIBs아키텍처를 사용한 앱을 개발하고 있습니다.  RIBs아키텍처의 경우 Builder, Router, Interfactor (+ Presenter)로 구성된 구조를 가집니다.  RIBs의 장점중 하나는 모듈이 해제(detach)될 때 구성요소들의 메모리해제 여부를 확인하는 감시자 내부적으로 동작하고 있습니다.  따라서, 특정 RIB을 제거시 메모리 누수가 발생하지 않음을 런타임에 확인할 수 있습니다.  먼저 제가 겪은 문제를 말씀드리겠습니다.  RIBs 메모리 해제 트러블 슈팅제가 개발하는 앱의 경우 많은 RIB이 존재하고 복잡한 네비게이션 구조를 가집니다.  따라서 RiB이 detach됨가 동시에 Presenter(=UIViewController)를 네비게이션 계층에서 없에 ..
[트러블슈팅] Actor를 활용한 동시성 관리 & GCD와 함께 사용시 주의할 점 안녕하세요!   최근 Swift concurrency, actor, Sendable을 주제로 글을 작성했었는데요  오늘은 Actor를 실제로 활용한 사례를 통해 어떤 문제를 해결하였고 성능적 이점으로는 어떤 것이 있는지 알아보겠습니다.  저는 SimpleImageProvider라는 라이브러리를 개발하였습니다.  해당 라이브러리는 캐싱기능을 지원하는데요, 캐싱 여부와 캐싱데이터를 불러오는 기능이 존재합니다.  하나의 객체로 여러 이미지 요청이 동시에 들어오는 상황에서 해당 기능은 동시성 문제를 야기할 수 있었습니다.  따라서 저는 GCD를 활용하여 해당 문제를 해결하였습니다.  아래코드와 같이 write, remove작업이 진행되는 경우 barrier플래그를 통해 동시성 큐이지만 직렬성을 보장받도록 설계하..
[Swift] why에 집중한 Swift concurrency, Sendable, Actor ... 안녕하세요!  오늘은 Swift concurrency와 Actor에 대해 설명하는 글을 남겨봅니다.  두 기능은 이제 나온지가 오래됬다고 말할 수 있는데요, 사용할 일이 없다고 생각하게 되는 점점 멀어지는 느낌입니다.  하지만, 해당 기능이 생겨나게된 이유를 살펴보는 과정에서 훌륭한 기능이라고 생각하게됬습니다.  잘 정리하여 여러 곳에 활용할 수 있겠다고 생각하였습니다.  Swift concurrency는 왜 등장했을까? 이 부분에 대해서는 많이 들으셨을 꺼라고 생각합니다. 🤔  기존의 비동기 코드 실행방식인 GCD의 문제를 해결하려는 시도가 보입니다. 간략하게 살펴보겠습니다.  ☑️ CPU오버헤드  GCD와 가장 큰 차이점은 역시 쓰레드를 어떻게 활용하는가입니다.  쓰레드가 많아지면 다음과 같은 문제..
[개발] 객체지향과 상속에 대한 생각정리(with 조용호, 『오브젝트』) 최근에 조용호, 『객체지향의 사실과 오해』 를 감명깊게 읽은 후  조용호, 『오브젝트』를 열심히 읽어나가고 있습니다.  해당 책의 10장 상속편을 인상깊게 읽고 생각정리 겸 내용을 공유하기위해 글을 남기게 되었습니다. 상속이란? 일부 개발 분야를 제외하고는 모든 곳에서 객체지향적 프로그래밍이 사용됩니다.  그런의미에서 '상속'은 개발자에게 괴장히 익숙한 단어라고 생각합니다.  2학년 수업에 처음으로 C++언어로 클래스 상속개념을 접했을 때가 엊그제 같내요.  상속은 특정 객체의 코드를 상위 코드에서 재사용할 수 있도록 해주는 강력한 기능입니다.  좋은 기능이기도 하지만, 치명적인 단점이 있기에 논란이 많은 기능이고도 하지요.  상속의 단점상속을 사용하는 전제는 우선 중복코드가 발생했고 중복 코드를 없애려..
[iOS] fastlane을 사용하며 겪은 일들(with Tuist) 안녕하세요 주니오스입니다.  얼마전 소프트웨어 마에스트로 연수과정이 종료되어 잠시 휴식을 취한 후  만들고 싶은 개인앱이 생겨열심히 만들고 있습니다.  한 2주정도 바짝 개발을 했는데요, MVP버전이 완성되어 현재 심사중입니다.  테스트 플라이트 배포 및 앱스토어 배포과정에서 처음으로 fastlane이라는 툴을 사용해보았습니다.  해당 서비스를 사용하며 맞닥드린 문제 및 여정을 적어보려고 합니다.   fastlane - App automation done rightThe easiest way to build and release mobile apps. fastlane handles tedious tasks so you don’t have to. Developer hours saved 10,558,200f..
[iOS] 나만의 이미지 캐싱 SDK만들기(다운샘플링, 디스크 & 메모리 캐싱) 저번글에서 이미지 캐싱에 대해 다뤘던 적이 있습니다. 추가적으로 학습을 하다보니 제가한 설계한 객체가 다소 객체지향에 어긋나고, 이미지 최적화에 있어 다소 미흡함을 알게되었습니다.  그래서 추가적인 학습을 통해 객체지향적 설계를 확립하고 다운샘플링 기술을 적용한 나만의 SDK를 만들어보자고 결정했습니다.   우선 앞선 iOS환경에서 바이너리 정보가 어떻게 이미지로 표출되는 지 이해할 필요가 있었습니다.  iOS의 이미지 프로세싱 우선 인터넷 서비스를 통해 혹은 로컬 저장소에서 불러온 이미지 정보는 모두 단순히 이진 데이터입니다. 해당 데이터들이 디코딩을 통해서 iOS내에서 시각화할 수 있는 이미지 버퍼(UIImage)로 변환되게됩니다. 최종적으로 시각화 형태의 데이터만이 지속적으로 메모리에 남게됩니다. ..
[iOS] Fun하지 않은 정적/동적 라이브러리와 Symbol 빌드세팅의 Mach-O 타입을 설정하여 빌드할 타겟이 어떤 결과물이 될 것인지 설정할 수 있다.  그중 가장 대표적인 형식이 정적/동적 라이브러리이다.  여러 기술블로그들을 통해 "정적라이브러리는 리소스를 가지지 않는다." 같은 내용은 많이 봐왔다.  하지만 이러한 내용은 실제개발시 발생한 문제를 해결하는데 별로 도움이 되지 않았다.  아래 사진과 같이 복잡한 모듈 구조에 대해 각각의 모듈들이 어떤 형식을 가져야 최적화 될 수 있을까? Tuist를 사용하여도 빌드시 코드가 중복될 수 있고, 심볼 충돌이 발생할 수 있다. 이를 어떻게 해결할 수 있을까?  이번글이 모든 문제를 해결하는 해결책은 아니지만, 개발을 하며 알아낸 사항들에 대해 다뤄 보려고한다.  빌드결과물빌드의 가장 작은 단위는 Swift파일이..
[iOS] 케어밋 프로젝트 기술회고2: 재사용가능한 UI에 대해서 저번편에 이어 케어밋 프로젝트 회고를 마저 작성해보려고 한다.  GitHub - 3IDLES/idle-iOS: SW Maestro 15th | 재가요양 시장의 새로운 구인구직 플랫폼 | 케어밋SW Maestro 15th | 재가요양 시장의 새로운 구인구직 플랫폼 | 케어밋. Contribute to 3IDLES/idle-iOS development by creating an account on GitHub.github.com   의도를 잘 못 파악한 MVVM패턴 사용 🙃 해당 프로젝트는 MVVM패턴을 사용하여 UI와 데이터와 로직 각기다른 객체로 분리했다. UI는 말그대로 User Interface로써 데이터를 기반으로 시각화 정보 및 유저로부터 액션을 전달받는다. 데이터와 로직은 시각화할 정보와 특정..