본문 바로가기

전체 글

(36)
TCA 뷰 컴포넌트 만들기 - Store vs ViewStore 그리고 @ObservedObject TCA를 공부하면서 SeoulSalam을 개발하다보니, 공부한 것을 적용하는 데에 초점을 맞춰서 코드가 깔끔하지 않고 반복되며 재사용성이 굉장히 낮아졌었다. 이러한 이유로 리팩토링을 하며 모듈화 작업을 진행하다가 뷰 구조체 안에서 메인뷰의 store을 어떻게 받아와서 사용해야 하는 지 공부한 결과, 이를 위해서는 Store와 ViewStore의 차이점이나 언제 @ObservedObject를 사용해야 하는지에 대한 명확한 이해가 필요하다는 것을 알았고 학습 후에 코드에 적용해 보았다. Store와 ViewStore TCA에서, Store는 앱의 상태와 액션을 관리하는 컨테이너 역할을 하고 reducer가 액션에 해당하는 함수로 상태 변경을 한다. 이 개념 안에서 뷰에서 Store의 인스턴스를 생성해주고 W..
내가 틀리더라도 예시코드를 작성하는 이유. 필자는 현재 멋쟁이 사자처럼 iOS 부트캠프 앱스쿨 3기의 보조강사를 맡고 있다. 블로그를 작성할 때와 같이 훈련생분들이 질문을 할 때 나는 예시코드를 바로 작성해서 드리는 편이다. 물론 코드를 실행해보고 드리긴 하지만, 라이브 코딩이나 짧은 시간에 만든 코드는 당연히 오류가 있을 수도 있고, 틀리게 작성할 수도 있어서, 사실 블로그나 보조강사로서 그러한 행위를 하는 것은 조금 리스크가 있는 행동이라고 생각하긴 한다. 그리고 혹자는 코드를 보고 따라서 작성하는 것이나 클론코딩 등이 도움이 되지 않는다고 꾸짖는 글과 영상들을 투고하기도 한다는 사실을 잘 알고 있다. 사실 필자 또한 흔히 강의지옥이라고 불리는 유데미에서 큰 수확없이 시간을 허비한 적도 있고, 내 스스로를 속이며 공부하는 척만 했던 적도 있다..
백준 3078번 좋은 친구 스위프트(Swift) 가끔씩 독자분들에게 조언과 의견을 구하기 위해서 해결하기 힘들었던 코딩 테스트 문제 풀이를 공유해볼까합니다. https://www.acmicpc.net/problem/3078 큐를 이용하여 푸는 문제였다. 테스트케이스도 통과하고 답도 맞으나, 사이트에서는 시간 초과. 처음의 O(n^2)의 시간복잡도를 가진 코드에서 다양하게 개선시켜보았으나 여전히 시간초과였다. 고질적인 백준의 Swift 한정 readLine() 시간초과가 원인이 아닐까 싶다. 다른 사이트들은 swift는 꽤 널널하게 잡아주거나 하던데... 참 이게 기업코테에서도 문제가 된다면 어떻게 해야할지가 요새 제일 큰 고민이다. 다음은 O(n^2)의 시간복잡도를 가진 풀이이다. struct Queue { private var enqueue: [T?..
TCA(리덕스패턴)과 MVVM, 그리고 MVC [2 - 完] 이전 글을 꼭 읽고 와주세요 Combine과 RxSwift를 이용한 MVVM 패턴도 데이터흐름을 이벤트 스트림으로 단방향으로 보내는 패턴인데...? 이전에 필자가 쓴 TCA 입문기를 읽으면 마치 TCA(리덕스패턴)이 유일무이하고 아주 참신한 단방향 아키텍쳐 패턴인양 느껴질 것이다. 하지만 위와 같은 의문에 대한 답을 찾아보니 TCA와 RxSwift 혹은 Combine을 통한 MVVM(Model-View-ViewModel)은 모두 모델과 뷰 간의 효율적인 데이터 흐름을 단방향으로 유지하면서 UI의 복잡성을 줄이는 아키텍처 패턴이 맞다고 한다!!! 그렇다면 같은 단방향 아키텍쳐를 기반으로 두 아키텍쳐가 어떻게 다른 방식을 취하고 있고, 어떠한 부분이 좋은지에 대한 필자 개인적인 생각을 정리하고 공유해보고자 ..
TCA(리덕스패턴)과 MVVM, 그리고 MVC [1] TCA로 만든 앱을 출시한 이후, RxSwift로 처음 프로젝트를 만들며 문득 든 두가지 생각이 있다. 1. Combine과 RxSwift를 이용한 MVVM 패턴도 데이터흐름을 이벤트 스트림으로 단방향으로 보내는 패턴인데...? 2. 그 코드의 양이 캡슐화로 인해 줄었을 뿐 MVVM과 TCA 아키텍쳐 또한 일종의 신호를 뷰에서 보내줘야 하는 것 아닌가...? 이 두 가지 질문에 대한 답을 공부하면서 MVC, MVVM, TCA에 대한 필자 나름대로 정리가 크게 되었다. 독자님들도 읽어보시면서 세가지 아키텍쳐 패턴에 대한 나름대로의 정립을 하셨으면 좋을 것 같다!! 먼저, 2번에 대한 답을 같이 알아보자! 그 코드의 양이 캡슐화로 인해 줄었을 뿐 MVVM과 TCA 아키텍쳐 또한 일종의 신호를 뷰에서 보내줘야..
소켓통신과 Sendbird swift와 RestAPI 글에서 마지막 부분에 etc.에 가볍게 socketAPI에 대해서 소개하였었다. 그리고 사실 그것은 전부 이 글을 쓰기위한 복선이었다! 전의 이미지 캐싱 글에서도 언급했듯이 프로젝트를 만들면서 공부할 목적으로 RxSwift와 RxCocoa를 이용하여 데이팅 앱을 만들고 있다. 그 중심 기능은 두 가지로 스와이프로 유저들을 like, pass 할 수 있고 채팅까지만 구현하는 간단한(사실 안 간단했다) 프로젝트를 기획했다. 사실 필자도 채팅 구현을 위해서는 소켓통신을 이용해야한다는 사실은 알고 있었지만, 그 이유가 서버와 클라이언트 사이에 양방향 통신이 가능하기 때문이라는 정도로만 알고 있고, 꼭 socket 통신을 이용해야만 하는건지, 다른 방식이 뭐가 있는 지에 대해서는 전혀 ..
이미지 캐싱? SDWebImage vs Kingfisher 1. 이미지 캐싱 UIKit Project로 샘플 데이팅앱(매칭 앱)을 만들어보았다. 데이팅 앱의 선조와도 같은 틴더에서 하듯이 스와이프하여 like와 pass를 할 수 있도록 구현하는데, 그 카드에 모든 유저의 정보가 다 담겨져 있다. 보통 이미지는 url의 형태로 저장되고 요청을 하게 되는데, 그 양이 많아질 수록 로딩시간이 오래걸리고, 같은 이미지를 다시 요청하면 작업을 한 번 더 반복하는 식이 되어버린다. 또, 그에 따라서 뷰가 버벅거리는 등 사용자 경험에도 안 좋은 영향을 미친다. 바로 이러한 경우 이미지 캐싱을 사용하여 이미지를 비동기적으로 부르는 방법을 선택한다. 캐시는 RestAPI 블로그 글에도 이야기 했듯이 임시 저장소 같은 곳인데, 이 곳에 저장을 해두고 비동기적으로 해당 이미지가 '..
Swift와 RestAPI - Rest? Api? 쉽게 좀 말해주세요... 코드작성에 어느정도 익숙해졌을 때 가장 경계해야 하는 마인드는 타성에 젖게되는 것이라고 생각한다. 처음에는 코드를 작성하기 위한 최소한의 이해만 하고 그렇게 고군분투하여 내가 원하는 것을 만들게 되면, 그 다음부터는 그 코드를 살짝 수정하여 재활용하거나 깃허브에서 서칭해서 내가 원하는 코드만 떼어오고, 그렇게 자연스럽게 작성하는 코드들의 정확한 작동을 잊어버리는 현상들이 일어나기 때문이다. 그래서 오늘은 아무리 코드를 밖에서 긁어오더라도 머리속에 자리잡혀 있어야 하는 RestAPI에 대한 최소한의 지식을 정리해보겠다. 그리고 다음으로는 Swift로 RestAPI 통신을 구현하기 위해 알아야할 지식들을 알아볼 것이다. *본 글은 컴퓨터과학적인 지식을 이해가 쉽도록 풀어서 쓰는 과정에서 다소 비약적인 비유가..