기존에 TableView나 CollectionView를 구성할 때 우리는 DataSource와 Delegate를 활용해 구현을 했다. DataSource는 데이터를 받아 뷰를 그려주는 역할을 한다. 뭘 어떻게 보여줄거냐를 해주는 것이 DataSource라고 생각하면 된다. Delegate는 어떤 행동에 대한 "동작"을 제시하는 역할을 한다. DataSource가 "보여주는" 역할을 담당했다면 Delegate는 사용자가 보이는 부분 중에 어떤 것을 클릭하거나 어떠한 행동을 했을 때 그 행동에 대한 동작을 수행하는 역할을 한다. 그러던 중 WWDC 19에서 Diffable DataSource가 등장하게 되었다 DiffableDataSource란? TableView 또는 CollectionView를 그리기 위..
앞서 살펴보았던 예제들 말고도 조금 다른 예제들도 봐야 내가 이해할 것 같아서 조금 더 알아보도록 하겠다. CurrentValueSubject 예제 // subject 생성 let currentValueSubject = CurrentValueSubject("기본값") // subscriber1 currentValueSubject .sink(receiveCompletion: { print("1 번째 completion: \($0)") }, receiveValue: { print("1 번째 value: \($0)") }) // subscriber2 currentValueSubject .sink(receiveCompletion: { print("2 번째 completion: \($0)") }, receiveV..
저번에 살펴보았던 Publisher와 Subscriber에 이어서 Subject에 대해 살펴보도록 하겠다. 회사에서 개발된 코드의 VM에는 CurrentValueSubject, PassthroughSubject가 즐비하게 늘어서 있기 때문에 무적권 알아둬야 할 것 같다.. Subject란? subject는 외부 발신자가 element를 publish할 수 있는 방법을 제공하는 publisher이다. 그냥 publisher라고 이해해보자.. 이러한 Subject는 Publisher 프로토콜을 채택하고 있다. Combine에는 미리 만들어진 Subject가 2가지 존재한다. 1. CurrentValueSubject 2. PassThroughSubject CurrentValueSubject란? single v..
iOS 개발자로써 회사에 입사하게 된지 어느덧 1개월이라는 시간이 지났다!! 카페->집->카페->집 의 반복된 일상생활에 질려서 거의 합격하자 마자 일주일도 안된 날짜에 입사시기를 결정했는데, 약간 후회가 되기도 하지만 일을 하면서 부족함을 많이 느끼고 있어서 오히려 좋아(?)라는 생각으로 회사에 다니고 있다. 첫 출근 전날 친구들에게 정장 입고 가야되는지를 물어봤던 것이 떠오른다. 깔끔하게 입고 가긴 했지만 만약 정장을 입고 갔더라면.. 두고두고 놀림감이 되지 않았을까 싶다. 자유로운 분위기라 반바지를 입고 다니시는 분도 있다 아무튼 현재 내가 맡게 될 업무는 기존에 웹 뷰 형식이던 서비스를 iOS 네이티브 앱으로 전환하는 것이다. 그러나 아직 기획안이 나오지 않아서 1~2개월이라는 시간이 나에게 주어..
현재 다니고 있는 회사에서는 UIKit + Combine을 활용한 앱을 개발하고 있다. 따라서 이제껏 Combine을 써오긴 했지만 뭐가 뭔지도 모르고 항상 쓰고 있어서 이번에는 꼭 깊게 공부를 해보려고 다짐하며 글을 쓰게 되었다. 진짜 이번에도 안하면 내가 사람이 아니지 Combine 5가지 프로토콜 1. Publisher 2. Subscriber 3. Subject 4. Scheduler 5. Cancellable Publisher란? Publisher는 프로토콜. 타입이 시간에 따라 일련의 값을 전송할 수 있음을 선언한다. Publisher는 하나 이상의 Subscriber 인스턴스에게 element를 제공한다. Publisher는 receive(subscriber:) 메소드를 구현해 subscri..
Compositional Layout이란? 요즘 앱들을 보면 단순히 TableView, CollectionView 하나로 이루어져 있는 경우보다 섹션별로 각각 다른 레이아웃으로 구성되어 있는 경우가 대부분이다. 과거에 나 또한 TableView에 CollectionView를 넣어서 화면을 구성했던 기억이 나는데, 기억상 데이터 전달을 할 때 어지러웠던 기억이 난다. 이러한 경우 Compositional Layout을 사용하게 된다면 유연하고 편리하게 화면을 구성할 수 있다. Compositional Layout 구성 Compositional Layout은 Layout, Section, Group, Item으로 구성된다 Layout안에는 Section들이, Section안에는 Group들이, Group안에..
Coodinater Pattern이란? Coordinator는 뷰 컨트롤러의 움직임을 조정하기 위한 타입이다. 이러한 Coordinater가 필요한 이유는 1. Massive View Controller의 문제점 2. 기존 화면전환 시 존재하던 ViewController간의 수평적인 관계 또는 강한 결합의 문제점 을 해결하기 위해서 등장하게 되었다. 이러한 문제점을 극복하기 위해 아예 화면전환을 관리하는 독립적인 클래스를 이용하자는 것이 주 아이디어이다. 한 두개의 화면으로 구성된 프로젝트의 경우 큰 문제가 없을지 몰라도, 프로젝트가 커질 경우 다양한 방식의 화면 전환이 이루어질 가능성이 있고, ViewController들이 서로서로 종송적으로 연결되어 있다면 관리하기 또한 어려울 것이다. 따러서 Vie..
클린 아키텍처란? 오늘날까지 수많은 아키텍처(마이크로 서비스, 서버리스 등)들은 전반적으로 '관심의 분리'(Seperation of concerns)와 '테스트 가능성'(Testability)을 보편적인 요구를 갖고 있습니다. 클린 아키텍처는 이러한 요건을 만족하는, 간단히 말하면 '추상화 개념'(Abstraction principle)으로써 관심사를 분리시키고 의존도를 낮추는 것에 목적을 둔 아키텍처입니다. 의존도를 낮추고 서로에게 주는 영향을 감소함으로써 유지보수의 용이성이 향상됩니다. 덕분에 낮은 비용으로 새로운 기능을 추가할 수 있습니다. 기본적인 원리는 종속성 규칙(Dependency Rule)을 지키는 것입니다. 각 코드의 종속성은 외부에서 내부로 안쪽으로만 가리킬 수 있고, 고수준 정책(Hi..