import UIKit
// 명령형 프로그래밍 패러다임 VS 함수형 프로그래밍과 패러다임
func doSomething() { print("do something") }
func doAnotherThing() { print("do another thing") }
// 명령형 프로그래밍 패러다임
func excuteAll() {
doSomething()
doAnotherThing()
}
excuteAll()
// 함수형 프로그래밍 패러다임
func excute(tasks: [()-> Void]) {
for task in tasks {
task()
}
}
excute(tasks: [doSomething, doAnotherThing]) // *함수를 전달인자로 사용한다
///////////////////////////////////////////////////
// 두 수의 합을 구하고 싶은 경우
// 명령형 프로그래밍 패러다임
func sum(first: Int, second: Int) -> Int {
return first + second
}
sum(first: 10, second: 5)
// 함수형 프로그래밍 패러다임
func sum(first: Int) -> ((Int) -> Int) {
return { second in first + second}
}
sum(first: 10)(5) // 커링[Currying] 기법으로 전달인자를 하나만 두고 반환하면서 second in first + second 처럼 전달인자를 사용할 수 있다.
위에서 확인해본 간단한 차이 외에도 모나드[Monad], 함수객체[Functor], 필터[Filter], 맵[Map], 플랫맵[FlatMap], 리듀스[Reduce] 등의 기능을 사용할 수 있다.
함수형 프로그래밍 패러다임으로만 프로그램을 작성하면 다음과 같은 장점이 있다.
- 여러 가지 연산 처리 작업이 동시에 일어나는 프로그램을 만들기 쉽다.
- 멀티 코어 혹은 여러 개 연산 프로세서를 사용하는 시스템에서 효율적인 프로그램을 만들기 쉽다.
- 상태변화에 따른 부작용에서 자유로워지므로 순수하게 기능 구현에 초점을 맞추어 설계할 수 있다.
'STUDY > Swift' 카테고리의 다른 글
Swift 함수의 가변 매개변수, 입출력 매개변수 (0) | 2018.06.29 |
---|---|
Swift 함수의 일급 객체 조건 (0) | 2018.06.29 |
Swift 비교 연산자 (0) | 2018.06.29 |
Swift nil 병합 연산자, 옵셔널 관련 연산자 (0) | 2018.06.29 |
Swift 구조체와 클래스 [Struct, Class] (0) | 2018.06.29 |