Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 개발자
- 고차함수
- interface
- Solid
- iOS프로그래밍
- 디자인패턴
- 의존성
- 객체지향프로그래밍
- OOP
- Swfit
- 클린코드
- 문법
- SWIFT
- DesignPattern
- 의도
- 인터페이스
- fp
- protocol
- IOS
- CleanCode
- 함수형프로그래밍
- 아이폰프로그래밍
- 네이밍
- 협업
- 부스트코스
- 함수형패러다임
- POP
- 이름
- 개발
- 클린소프트웨어
Archives
- Today
- Total
밤에 쓴 코드
FP) Pure Function - 순수함수 본문
Pure Function
함수형 프로그래밍에서의 함수는 기존의 함수와 메서드와는 구분하기 위해서 순수함수라는 표현을 사용합니다.
순수함수는 '특정 input에 대해서 항상 동일한 output을 반환하는 함수'를 의미합니다.
순수함수는 부수효과(side-effect) 가 존재 하지 않습니다.
부수효과가 존재한다는 것은 함수가 내부에서 일처리를 함에 다른 추가적인 효과들이 발생하는 것입니다.
var sum = 0
func add(numbers:[Int]){
return numbers.reduce(sum,number)
}
위의 예 와 같이 add라는 함수는 sum이라는 외부의 값을 사용하는 경우도 부수효과가 발생합니다.
함수에 동일한 입력을 넣는다고 해도 , 참조하는 외부의 값이 다를 경우 , 다른 결과가 나올수 있게됩니다.
let sum = 0
func add(numbers:[Int]){
return numbers.reduce(sum,number)
}
위의 경우처럼 외부의 값이 let
으로 정의되어 있다면 사이드이펙트로 부터 자유로울 수 있겠습니다.
위의 경우 언제나 *동일한 Input 에 동일한 Output *을 뱉어 내기 때문에 순수함수입니다.
var sum = 0
func add(numbers:[Int]){
for number in numbers {
sum += number
}
return number
}
또 외부의값을 함수 내부에서 변경하고 있습니다.
이 또한 외부의 값을 변경하는 부수효과를 내고 있습니다.
func add(numbers:[Int]){
var sum = 0
for number in numbers {
sum += number
}
return number
}
변수를 내부로 옮김으로써 , 외부의 영향을 주지도 , 받지도 않게 되었습니다.
그로 인해 언제나 동일한 Input에 동일한 Output을 반환하게됩니다.
이로써 순수함수가 되었습니다.
func add(_ a: Int) -> Int {
return Int(arc4random()) + a
}
위의 경우는 외부의 영향을 주지도 , 받지도 않아 부수효과(side-effect) 에서는 자유로우나
동일한 Input에 Output을 반환하지 않습니다.
위의 경우는 순수함수로는 탈락입니다.
순수함수는 언제나 동일한 Input에 동일한 Output을 반환하게됩니다 , 그 과정에서 부수효과에서는 자유롭게 됩니다.
'FP' 카테고리의 다른 글
FP) Currying - 커링 (0) | 2019.05.13 |
---|---|
FP) Higher Order Function - 고차함수 (0) | 2019.05.13 |
FP ) Functional Programming Paradigm - 함수 중심 프로그래밍 패러다임 (0) | 2019.05.10 |
Comments