Combine 뽀개기 2장: Subscriber
·
Swift
Subscriber A protocol that declares a type that can receive input from a publisher. 게시자로부터 입력을 받을 수 있는 형식을 선언하는 프로토콜입니다. Subscriber는 공식문서에도 쓰여있듯 프로토콜 Subscriber를 채택받은 타입은 Publisher로 부터 방출된 값을 받을 수 있는 녀셕이 된다. 코드로 보면, class CustemSubscriber: Subscriber { typealias Input = String typealias Failure = Never func receive(subscription: Subscription) { print("구독 시작") subscription.request(.max(1)) } func..
Combine 뽀개기 1장: Publisher
·
Swift
Publisher Declares that a type can transmit a sequence of values over time. 형식이 시간이 지남에 따라 값 시퀀스를 전송할 수 있음을 선언합니다. Publisher는 하나 이상의 Subscriber 인스턴스에게 Element를 전달한다. 쉬운 말로 값을 방출하는 녀셕!!! 또한 Publisher는 프로토콜이다. 내부엔 Output, Failure, receive(subscriber:)를 필수로 구현해야 한다. 하나씩 보면, Output: Publisher 객체가 내보낼 값의 타입 Failure: Error가 발생했을 때 Error 타입(Error를 방출하고 싶지 않으면, Never로 설정) receive(subscriber:): Publisher..
[Swift] Swift Concurrency와 GCD
·
Swift
안녕하세요. 저번 글에서 Race Condition과 Thread Safe에 대해 알아봤었는데 비동기에 대해서 공부하다 보니 자연스럽게 WWDC 2021에서 소개된 Swift Concurrency에 대해서도 관심이 생겼습니다. 그래서 이번 기회에 GCD Swift Concurrency에 대해 간단하게 알아보고 사용법을 정리해 볼까합니다. GCD, Swift Concurrency 란??? GCD 기존 Swift에서 동시성 프로그래밍을 구현하기 위해 단연코 GCD API를 주로 사용했습니다. GCD는 비동기로 실행되고자 하는 코드 블록을 DispatchQueue라는 선입선출 Queue에 넣어 스레드에 작업을 할당하는 방식입니다. GCD는 클로저를 사용해 DispatchWorkItem라는 실행해야 할 작업 객..
[Swift] Race Condition과 Thread Safe
·
Swift
비동기적으로 기능을 구현하다 보면, 순차적으로 코드가 실행되는 것이 아니다 보니 주의해야 할 점이 생긴다. 그중 Race Condition과 해결책인 Thread Safe에 대해 알아보고자 한다.Race ConditionRace Condition 이란, 여러 Thread가 하나의 자원에 동시에 접근해서 자원이 변질되어 원하는 결과가 나오지 않는 현상을 뜻한다. 비동기적으로 코드가 실행되면, 여러 Thread 동시에 하나의 자원에 접근하는 경우가 생긴다. 이때 Thread가 한 자원 접근해 해당 자원에 변화를 주게 되면, Race Condition 발생되고, 원하는 결과를 얻기 힘들어진다. 코드를 통해 이해해 보자.var books = ["어린왕자", "백설공주", "해리포터", "신데렐라", "알라딘",..
[Swift] Protocol
·
Swift
Swift는 클래스를 이용한 추상화보단 구조체와 프로토콜을 통한 프로토콜을 권장한다. 프로토콜에 대해 프로토콜이란, 특정 역할을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진을 정의합니다. 구조체, 클래스, 열거형은 프로토콜을 채택할 수 있습니다. 프로토콜 내부에는 채택했을 시 꼭!!! 구현되어야만 하는 메서드, 프로퍼티, 이니셜라이저 등이 정의 및 제시되어 있습니다. 때문에, 프로토콜 스스로는 기능을 구현하지 않습니다. 프로토콜은 다른 프로토콜을 상속받을 수 있고, 또한 다중 상속도 가능합니다. 자식 프로토콜은 부모 프로토콜에 제시된 기능은 중복하여 써줄 필요 없습니다. 프로토콜 채택 시에는 ":"뒤에 프로토콜 이름을 작성하여 채택합니다. 클래스 상속과 같이 사용할 시에는 클래스를 먼저 ..
[Swift] 객체지향(OOP)
·
Swift
오늘 내용은 객체지향 패러다임과 객체지향의 특징인 일반화, 추상화, 은닉화, 캡슐화이다. 객체지향이 만들어진 이유는 프로그램을 만드는 이들이 세상을 프로그램으로 나타내려는 과정에서 만들어졌다. 때문에 우리가 사는 세상처럼 객체를 중심으로 서로 상호작용하며, 프로그램이 동작하게 된다. 그 과정에서 만들어진 일반화, 추상화, 은닉화, 캡슐화를 한 문장으로 정리하면, 일반화란, 공통된 특성 또는 행위를 묶어 놓은 것 추상화란, 객체를 나타냄에 있어 중요한 포인트만 추려내는 것 은닉화란, 외부로 보일 필요가 없거나, 그러면 안 되는 특성 또는 행위들을 숨겨놓은 것 캡슐화란, 숨겨진 특성 또는 행위를 외부에서 제어할 수 있도록 행위만을 제공해 주는 것 📝 타입을 정의할 때 구조체와 클래스가 사용되는데, 둘의 차이..