본문 바로가기

Programming Paradigm8

커링 (Currying) 20세기 수학자인 Haskell Curry 등의 작업으로 수학에서 유래한 언어 기술 여러개의 파라미터를 받는 함수를 하나의 파라미터를 받는 여러 개의 함수로 쪼개는 것 func multiply(_ a: Int) -> (Int) -> Int { return { b in return a * b } } let area = multiply(10)(20) //200 커링을 하는 이유 함수의 합성을 원활하게 하기 위해서 입니다. 함수의 Output이 다른 함수의 Input으로 연결되면서 합성될 때 함수들이 서로 chain을 이루면서 연속적으로 연결이 되려면, Output과 Input의 타입과 갯수가 같아야 합니다. 함수의 Output은 하나밖에 없으니 Input 또한 모두 하나 씩만 갖도록 한다면 합성하기가 쉬워질.. 2020. 6. 16.
Materialize/dematerialize fimuxd/RxSwift https://rhammer.tistory.com/304 Materialize/dematerialize third party 프레임워크에 의해 생성될 수 있는, sequence 제어가 제한되거나 제어가 불가능해서 발생하는 에러를 처리하는 해결책. 관찰 가능 이벤트를 관찰 가능 이벤트로 변환하려는 경우가있을 수 있습니다. 이것이 유용한 일반적인 시나리오 중 하나는 관찰 가능한 속성이있는 관찰 가능 개체를 제어 할 수없고 외부 시퀀스가 ​​종료되지 않도록 오류 이벤트를 처리하려는 경우입니다. materialize 연산자는 어떤 sequence든 Event enum sequence로 변환한다. Original Data → X Data → Completed Materialized Ev.. 2020. 5. 16.
Test Driven Development in Swift Let's TDD - 전수열 devxoul/LetsGitHubSearch devxoul/LetsGitHubSearch Let'Swift 18 Workshop - Let's TDD. Contribute to devxoul/LetsGitHubSearch development by creating an account on GitHub. github.com TDD의 핵심 RED 테스트 작성 → 구현이 없어서 실패 GREEN 테스트를 통과할 수 있는 최소한의 구현 REFACTOR 테스트의 존재 덕분에 안전한 리펙토링 가능 TDD는 단순하지만, 테스트를 작성하는 능력이 더 중요하다 나의 앱에 TDD를 도입하기 어려운 이유 의존성 주입이 되어있지 않음 (모든 곳에 커플링이 걸려있음 → 네트워크를 분리하기 어려움) 뷰.. 2020. 3. 8.
비동기 반환 (Async Result) 연산이 오래 걸리거나, 네트워크를 통해서 결과를 얻거나, 딜레이가 포함되어 있는 내용은 비동기(async) 방식으로 결과는 나중에 생길 때 전달받기로 하고 프로그램의 수행을 멈추지 않는 방식으로 함수를 구현하는 것이 좋습니다. // 동기 func syncFunc(_ nums: [Int]) -> Int { sleep(1) let sum = nums.reduce(0, +) return sum } // 비동기 func asyncFunc(_ nums: [Int], _ result: @escaping (Int) -> Void) { print("sleep......3") DispatchQueue.main.async { sleep(3) let sum = nums.reduce(0, +) result(sum) // 결과.. 2020. 3. 5.
ReactorKit으로 단방향 반응형 앱 만들기 - 전수열 ReactorKit으로 단방향 반응형 앱 만들기 - 전수열 ReactorKit으로 단방향 반응형 앱 만들기 Massive View Controller를 피하기 위해 Why? 뷰와 로직의 관심사 분리 뷰 컨트롤러가 단순해짐 RxSwift의 장점을 모두 취한다. ReactorKit은 RxSwift를 기반으로 함 모든 RxSwift 기능을 사용 가능 상태 관리가 쉽다. 단방향 데이터 흐름 중간 상태를 reduce() 함수(pure function)로 관리 pure function(순수 함수) 상태 관리가 간결해짐 View 사용자 입력을 받아서 Reactor에 전달 Reactor로부터 받은 상태를 렌더링 뷰 컨트롤러, 셀, 컨트롤 등을 모두 View로 취급 Reactor View에서 전달받은 Action에 따라.. 2020. 3. 4.
'RxSwift 4시간에 끝내기'를 듣고 RxSwift 4시간에 끝내기 오프라인 강좌 링크 iamchiwon/RxSwift_In_4_Hours ReactiveX 공식 ReactiveX RxSwift Github ReactiveX/RxSwift operator 마블 그림으로 볼 수 있는 곳 RxMarbles: Interactive diagrams of Rx Observables RxSwift 4시간에 끝내기 유투브 RxSwift 4시간에 끝내기 시즌0 - YouTube Moya ('나중에줄게' 를 single로 준다)(Alamofire 다음으로 유행하는 swift 네트워크 라이브러리) Bolts (옵씨 리엑티브 유행) PromiseKit (JS 리엑티브 유행) ipthread : POSIX C API → Thread : obj-c,.. 2020. 1. 26.
함수형 프로그래밍 : 합성 (Composition) 함수의 반환값이 다른 함수의 입력값으로 사용되는 것 func f1(_ i: Int) -> Int { return i * 2 } func f2(_ i: Int) -> String { return "\(i)" } let result = f2(f1(100)) /// 1급개체로서의 함수를 합성하는 예제 func ff(_ pf1: @escaping (Int) -> Int, _ pf2: @escaping (Int) -> String) -> (Int) -> String { return { i in // i == 100 // 100 -> 200 -> "200" return pf2(pf1(i)) } } let f3 = ff(f1, f2) let result2 = f3(100) // 합성된 함수를 한번에 사용 /// ge.. 2020. 1. 25.
Swift로 함수형 프로그래밍 시작하기 Swift로 함수형 프로그래밍 시작하기 링크: http://programmers.co.kr/learn/courses/4806 파트1. 함수형 프로그래밍 소개 현재의 프로그래밍 패러다임은 "동시성"이라는 관점으로 옮겨지고 있다. OOP에 가려서 주목을 받지 못하던 FP(함수형 프로그래밍)이 다시 주목을 받는 이유 프로그램 외부 효과를 주지 않는 방법으로 동시성 문제를 해결할 수 있기 때문 FP에 대한 오해들 프로그래밍 기법들 != FP Immutable Data Higher Order Function Currying Map Filter Reduce Side-Effect Free Programming == FP FP가 OOP를 대체할 수 있을까? OOP와 FP에 대해 잘 이해하고 현재 내가 당면한 문제를 해.. 2018. 12. 30.