Functor의 개념과 Swift내의 functor

배열은 Swift에서 동일 타입의 원소를 하나 이상 가질 수 있는 순서있는 집합을 나타내는 자료 구조이다. 배열은 Swift 뿐만 아니라 거의 모든 프로그래밍 언어에서 가장 기본적이며 중요한 자료 구조 중 하나인데, 특히 함수형 프로그래밍 언어에서는 배열을 리스트라고 하는 재귀적인 데이터 구조를 사용하여 일련의 연속적인 값들을 집합으로 다루게 된다. 배열 혹은 리스트에 대한 연산 중에서 가장 대표적인 것은 맵핑 연산이다.  하스켈의 fmap 은 임의의 타입의 원소를 갖는 리스트의 각 원소에 대해 주어진 함수를 적용하여 새로운 리스트를 생성한다. 그리고 대부분의 배열을 지원하는 현대 언어들도 비슷한 기능을 가지고 있다. 자바 스크립트의 Array와 Swift의 Array도 공통적으로 map이라는 메소드를 통해서 변형(transform)함수를 받아 자신의 원소들에게 적용하여 유사한 동작을 수행한다.

Functor의 개념과 Swift내의 functor 더보기

Chaining Multiple CIFilters

Chaining CIFilters

Swift의 문법적 특징은 Objective-C를 사용할 때보다 훨씬 더 간결하고 간단한 구조의 코드를 작성할 수 있게 해주는데, 이번에는 Swift의 문법을 활용하여 CIFilter를 연쇄적으로 적용하는 자료 구조를 만들어 보도록 하겠다.

기본적으로 하나의 이미지에 여러 개의 필터를 적용하는 경우에는 각 필터의 outputImage 속성을 다음 순서의 필터의 kCIInputImageKey로 전달하는 방식으로 처리할 수 있다.

이를 아예 연산자로 정의하는 것도 가능하다. 이미지 인스턴스는 필터라는 상태로 둘러싸여 그 내부에서 조작되는 엔티티로 볼 수 있기 때문에 필터 자체를 모나드로 볼 수 있다. Chaining Multiple CIFilters 더보기