[Swift] Reactive Programming Combine - 4: Filtering Operators
Language/Swift2024. 5. 8. 21:48[Swift] Reactive Programming Combine - 4: Filtering Operators

Filtering Operatrosfilter어떤 값을 전달할 지 조건부로 결정하는 filter입니다.var subscriptions = Set()let numbers = (1...6).publishernumbers .filter { $0.isMultiple(of: 2) } .sink(receiveValue: { print($0) }) .store(in: &subscriptions)// *--- RESULT --*// 2// 4// 6 removeDuplicates동일한 값을 연속으로 내보내는 publisher를 무시합니다.let words = "hey hey there! want to listen to mister mister ? ? ?" .components(separatedBy..

[Swift] Reactive Programming Combine - 3: Transforming Operators
Language/Swift2024. 5. 8. 11:56[Swift] Reactive Programming Combine - 3: Transforming Operators

Transforming Operatorspublisher로부터 오는 값에 대해 연산을 수행하는 메서드를 Operators라고 합니다.Cominbe operator들은 실제로 publisher를 반환합니다. 해당 publisher의 upstream 값을 수신하고 데이터를 조작한 다음 downstream으로 보냅니다.개념적으로 간소화하기 위해 연산자를 사용하고 오류를 처리하는 게 목적이 아니라면 오류를 downstream에 게시할 뿐입니다. collectpublisher의 개별 값 stream을 해당 값의 배열로 변환합니다. ["A", "B", "C", "D", "E"].publisher .sink(receiveCompletion: { print($0 }, receiveValue: { ..

동시성 프로그래밍의 개념과 iOS에서 동시성 처리 방식
Life style/TIL2024. 5. 7. 17:44동시성 프로그래밍의 개념과 iOS에서 동시성 처리 방식

Concurrent Computing은 여러 계산이 순차적이지 않고 겹치는 기간 동안 동시에 실행되어 다음 계산이 시작되기 전에 하나가 완료되는 컴퓨팅의 한 형태이다.병렬 처리와 동시 처리의 차이둘 다 동일한 기간 동안 실행되는 여러 프로세스로 설명된다.병렬 처리는 동일한 물리적 순간에 발생한다. 실제로 동시에 수행하기 위해 멀티 코어를 이용하여 작업을 분산하여 처리한다. 주로 과학 계산, 고성능 컴퓨팅, 그래픽 처리, 인공 지능 등에 사용된다.동시 처리는 여러 작업이 시간적으로 겹쳐서 진행되는 것처럼 보이는 것을 의미한다. 즉, 하나의 CPU 코어가 여러 작업을 교차 실행하는 방식이다. 운영체제, 게임, 데스크톱 환경 등에 사용된다. 예를 들면, time-sharing slices(시분할)을 이용하여 ..

Hash Table, Hashing
자료구조와 알고리즘/자료구조2024. 5. 7. 13:37Hash Table, Hashing

Hash Table은 key로부터 매핑된(key-value 형식) 자료구조로 Hahsing이라는 기술을 사용합니다. Hash, Hashing해시는 O(1)을 지향합니다. 데이터 개수 N과 무관하게 단번에 값을 찾아내겠다는 것입니다.주어진 키를 사용해서 실제 레코드의 주소를 직접적으로 계산해내는 것을 해시라고 합니다.해시 함수에 주어진 레코드의 키에 해시 함수를 가하면 그 레코드가 저장되어야 할 인덱스가 나옵니다. 당연히 이 계산은 매우 빨라야 합니다. 키에 해시 함수를 가하여 채운 도표가 해시 테이블입니다. Hash function주어진 데이터를 실제 정수 값으로 변환하는 함수입니다. 여기서 나오는 정수값은 테이블의 인덱스로 사용할 수 있는 정수(해시 코드)입니다. key-value 값으로 연결될 때, ..

자료구조의 종류와 iOS 개발에서 자주 사용되는 자료구조
Life style/TIL2024. 5. 7. 12:53자료구조의 종류와 iOS 개발에서 자주 사용되는 자료구조

자료구조는 데이터를 효율적으로 사용할 수 있도록 정리하는 방법이다. 데이터 간의 관계 그리고 적용할 수 있는 함수나 명령을 의미한다. 선형 자료구조와 비선형 자료구조로 나눌 수 있으며, 선형 자료구조는 데이터 요소를 순서대로 정렬하고 비선형 자료구조는 데이터를 비연속적으로 연결한다. 개별 요소에 접근하는 작업에는 선형 자료구조가 더 효율적이지만, 네트워크 연결과 같은 특정 문제를 효율적으로 해결하기 위해서는 비선형 자료구조가 더 알맞다.배열, 연결 리스트, 스택, 큐의 특징과 iOS에서 구현 방법배열배열은 연속적인 메모리 블록에 요소를 저장한다. 각 0부터 인덱싱된다.C언어의 경우에는 선언 시 크기가 고정되는 반면 Swift에서는 capacity가 초기화될 때 일정 크기의 메모리 공간을 할당받으며, ca..

[Swift] Reactive Programming Combine - 2: Publishers & Subscribers
Language/Swift2024. 5. 4. 00:00[Swift] Reactive Programming Combine - 2: Publishers & Subscribers

Publishers & SubscribersCancellableSubscriber가 완료될 때, 더 이상 publisher로부터 값을 받지 않으려면 subscription을 취소하여 리소스를 확보하고 네트워크 호출과 같은 해당 활동이 발생하지 않도록 하는 것이 좋습니다. Subcription은 cancellation token으로 AnyCancellable 인스턴스를 반환하므로, 완료되면 취소할 수 있습니다. AnyCancellable은 Cancellable protocol을 준수하며, cancel()메서드는 정확히 그 목적을 위해 필요합니다.  Subsciption에서 cancel()을 명시적으로 호출하지 않으면, publisher가 완료하거나 정상적인 메모리 관리로 인해 저장된 subscription..

[Swift] Reactive Programming Combine - 1
Language/Swift2024. 5. 1. 23:55[Swift] Reactive Programming Combine - 1

What is Combine?이벤트 처리 연산자를 결합하여 비동기 이벤트 처리를 사용자 지정합니다. Combine 프레임워크는 앱이 이벤트를 처리하는 방식에 대한 선언적 접근 방식으로 제공합니다.Combine을 채택하면 이벤트 처리 코드를 일원화(centralizing)하고 중첩 클로저 및 convention을 기반하는 콜백과 같은 번거로운 기술을 제거하여 코드를 더 쉽게 읽고 유지 관리 할 수 있습니다. 여기서 말하는 일원화는 특정 이벤트 소스에 대해 단일 처리 체인으로 만드는 걸 의미합니다. 체인의 각 부분은 이전 단계에서 받은 요소에 대해 고유한 작업을 수행하는 결합 연산자입니다. Apple에서 비동기 프로그래밍을 개선하였고 몇 가지 메커니즘이 있습니다.NotificationCenter: 디바이..

[Swift] Protocol-Oriented Programming: POP
Language/Swift2024. 4. 30. 23:12[Swift] Protocol-Oriented Programming: POP

객체 지향 프로그래밍: OOPObject-Oriented Programming(OOP) 객체 지향 프로그래밍은 디자인 철학입니다.객체는 객체의 속성에 대한 정보를 포함하는 데이터 구조입니다.객체는 현실 세계에서 나무가 될 수도 호수가 될 수도 있습니다. Beer 라는 class로 표현을 해보면 이니셜라이저로 인스턴스가 생성될 때 모든 프로퍼티가 올바르게 초기화되도록 합니다.class Beer { var volume: Double var canSize: Double var description: String init(volume: Double) { self.volume = volume self.canSize = 500 self.descriptio..

image