전체 글

iOS/UIKit

[Swift/RxSwift] flatMap VS flatMapLatestFrom, 뭐가 다를까?

flatMap flatMap 연산자는 들어오는 모든 Observable을 병렬로 구독하고, 이들 각각에서 방출되는 모든 아이템들을 단일 Observable 스트림으로 합칩니다. 만약 여러 Observable들이 동시에 아이템을 방출할 경우, flatMap은 이들 아이템들을 순서와 상관없이 즉시 방출합니다. 이는 동시에 여러 작업을 처리하고 각 작업의 결과를 계속 관찰하고 싶을 때 유용합니다. flatMapLatest flatMapLatest 연산자는 새로운 Observable이 들어올 때마다 이전에 구독한 Observable을 취소하고 새 Observable만을 구독합니다. 항상 최신 결과만을 처리하고 싶을 때 사용됩니다. 즉, 새로운 데이터나 요청이 들어올 때 이전 데이터는 더 이상 중요하지 않고 오직..

개발일지/알러지키미

[알러지키미] Post-Mortem, 알러지키미 앱스토어 출시 후 회고

나의 첫 출시 앱, 알러지키미 처음으로 기획부터 디자인, 개발까지 전적으로 스스로 해낸, 의미가 깊은 프로젝트입니다. 여러번의 리젝을 받으면서 좌절도 했지만, 앱의 출시 플로우를 제대로 경험해 볼 수 있었습니다. 개발일지로 짬짬히 이슈 등의 과정의 발자취를 남겨두었지만, 출시를 마치고 다시 돌아보기로 했습니다. 기획과 디자인은 어려워 이번 프로젝트는 온전히 나의 것이었기 때문에, 이전까지 배우고 학습했던 것들을 최대한 적용해보고 싶다는 욕심과 경험해보지 못했던 기술들을 적용해보고 싶다는 사심이 많이 들어갔습니다. 네이버 맵 SDK, Mordern Cell을 통한 실시간 검색 시 셀 애니메이션, Tag List 등... 이것저것 넣어보며 기획과 디자인을 마구잡이로 하다보니, 생각보다 이에 시간이 많이 들었..

iOS

Swift로 코딩테스트 시작하기, 시간복잡도, 공간복잡도, 입출력

"무엇"을 사용해서 코딩테스트를 준비해야 하나? macOS > Command Line Tool(명령어 라인 도구)로 새로운 프로젝트를 생성합니다. 🤷‍♂️: 왜 playground에서 실행 안 하고 Command Line Tool에서 실행하는 걸까요? 🐶: 대부분의 OJ 플랫폼에서는 직접 입출력 부분까지 구현해야 합니다. playground에서는 readLine() 메서드를 사용할 수 없기 때문에 Command Line Tool을 사용해야 합니다. 또한 playground에서는 REPL(Read-Equal-Print Loop) 방식으로 동작하기에 디버깅이 어렵습니다. 이런 이유로 코딩테스트를 준비하기 위해서는 Command Line Tool을 사용합니다. "어디서" 코딩테스트를 연습할 수 있는가? 일반적..

카테고리 없음

[알러지키미] # 11. View Life Cycle 이슈

트러블 슈팅🔧 realm fetch에서 시점 문제 충돌 최근 본 상품을 저장하는 과정에서 realm을 사용했다. ProductDetailView에서 pop해서 나올 때, realm에 저장했다. 홈에서 나온 뒤에는 HomeViewController에서는 저장된 realm의 리스트가 보인다. HomeViewController가 매번 나타날 때마다 이 realm을 리스트에 다시 패치해서 보여줘야했다.

개발일지/알러지키미

[알러지키미] #10. 새벽시간에 API는 왜 이럴까?

이후 양식에 맞춰 작성하겠습니다! 원래대로라면 내 위치 쥐변 약국 api를 불러오는게 정상이지만, 개발 후 집에 돌아가니 발생한 참사! 왜 이러는지 몰라 계속 api 들여다 보기를 반복하고... 결국 잠에 들고 일어나니 원래대로 돌아가있다... 왜 새벽 시간에 이럴가?

개발일지/알러지키미

[개발일지/알러지키미] #9. Header와 용량 문제

트러블 슈팅🔧 저장공간이 부족합니다. 용량 문제..다... 처음에는 pod 문제 또는 xcode 에러인가 싶어서 한참 시간을 쏟았다. 맥북 저장공간을 확보하니 해결되었다.

개발일지/알러지키미

[개발일지/알러지키미] #8. rootViewController 교체

트러블 슈팅🔧 시점 문제과 루트뷰 교체. onboarding에서 HomeView로 넘어갈 때, 이전에 보여줬던 뷰를 pop해서 내려야겠다고 생각했었다. 그러나 실행된 뷰를 펼쳐보니 잘 이전 뷰가 내려가지 않고 그냥 쌓여 있었다. 그리고 클로저에 값을 넣어버린 탓에 이번 뷰가 생성된 시점 이후에 UserDefaults에 값을 넣어줘서 바로 반영이 안되는 문제가 있었다. 루트뷰 자체를 바꿀 수 있었다! sceneDelegate를 불러와서 루트뷰를 교체해주면 된다! 그리고 클로저에 값을 넣지 않고 HomeViewController 인스턴스 생성시점 전에 UserDefaults에 값을 저장했다. 느낀점 이전에는 구현에만 급급해서 자잘한 오류 발생요인들을 놓치고 갔다..

개발일지/알러지키미

[개발일지/알러지키미] #7. 레이아웃 이슈와 문자열 예외 처리

트러블 슈팅🔧 내가 잡은 레이아웃을 무조건 신뢰하지 말자. 이렇게 레이아웃을 짜놓고 왜 태그리스트를 담은 collectionView가 뜨지 않는지 한참을 고민하고 헤맸다. 처음에는 데이터가 잘 안 들어오는 줄 알고 UICollectionViewDelegate 프로토콜 numberOfItemsInSection과 cellForItemAt에서 올바르게 출력이 되고 있는지 확인해 보았다. numberOfItemsInSection 함수는 출력이 되나 cellForItemAt은 출력되지 않았다. 더미 데이터를 넣어보면서 테스트해도 에러도 발생하지 않았다. 무엇이 문제인 걸까? 고민하면서 돌고 돌아 레이아웃으로 돌아왔다. 설마설마하면서 collectoinView의 공간이 모자라서 셀들이 출력되지 않은 것일까! 하며 ..

회고

2차 Recap 회고

1차 Recap에 비하여 스스로 많이 성장했다 느낄 수 있었다. 이번 2차 Recap은 1차 Recap과 유사하게 앱의 구현 조건을 받아, 이에 부합하게 앱을 구현하는 것이다. 개선할 점 파일 네이밍 허헛...사실 이 부분에 대해 평소에 많이 고민을 했었다. 파일이름을 무엇으로 지어야 할지, 그리고 어떤 폴더에 이 파일을 위치시켜야 할지 등등.. try! Realm은 위험해 OS 버전, Realm 버전 등 다양한 이슈로 인해서 Realm 인스턴스화가 실패할 수 있는 가능성이 높다. 그런 이유로 무작정 try!로 인스턴스를 생성하는 것은 위험하다고 한다.. 실제 서비스를 생각했을 때, 즐겨찾기 기능을 이용하다가 앱이 종료되는 상황보다는 이 기능을 이용할 수 없는게 사용자 경험적인 면에서 나을 것이다. 이 ..

회고

1차 Recap 회고

뒤늦은 1차 Recap 회고다. 2차 Recap 회고를 하려 하니, 1차 Recap에 대해 떠올릴 필요가 있다고 느껴졌다. 지난달의 기억을 짚어가며 1차 Recap의 회고를 작성한다. 처음으로 주어진 요구사항과 가이드라인을 바탕으로, 앱의 시작부터 끝까지를 무엇을 어디서부터 어떻게 구현해야 할지를 고민할 수 있었다. 개선할 점 강제 언래핑 우선 강제 언래핑을 많이 사용하는 문제가 있었다. 지금 당장의 어떤 경우에서느 문제가 없이 작동할 수 있겠지만, 강제 언래핑 코드로 인해 앱이 꺼지는 문제는 심각한 문제다. 옵셔널 바인딩을 사용하는 습관을 길러 추후에 생각치도 못한 앱의 강제 종료를 막을 수 있도록 해야겠다. 필요한 프로토콜만 채택하자 서버에서 통신을 받는 Response의 역할만 하는 구조체에 Cod..

쨈미니
서우의 성장일기