[함수형프로그래밍] Pure Function

Pure Function

1. 순수 함수란?

2. 예제들

var name = "kimdo"
var greeting = ""
func setGreeting() {
    greeting = "hello, \(name)"
}

위의 코드는 외부 변수를 사용하고 있고, 또 외부 변수를 바꾸고 있으므로 순수 함수가 아니고 side-effect가 존재한다. (외부 변수를 바꾸는 다는 것 자체가 side-effect가 있다는 뜻이다.)

이를 순수함수로 바꾸면 다음과 같다.

func greeting(_ name: String) -> String {
    return "hello, \(name)"
}

=> 외부의 값에 영향을 받지 않고, 파리미터 값(input 값)에 따라 항상 동일한 값을 반환하므로 순수 함수가 맞다.

let greet = "hello"
func greeting(_ name: String) -> String {
    return "\(greet), \(name)"
}

=> 위 소스코드 또한 순수함수다. 왜냐하면 외부 변수 greetlet으로 선언되어 있어 변경이 불가능하므로, 결국 이 함수도 input값에 따라 동일한 output값이 반환되기 때문이다. 그리고 greet처럼 변경이 불가능한 데이터를 immutable data라고 한다.

func add(_ a: Int) -> Int {
    return Int.random(in: 0...100) + a
}

=> 위 소스 코드는 순수 함수일까? 얼핏 보면 외부 값을 사용하거나 변경하지 않으므로, 순수 함수가 맞는 것처럼 보인다. 하지만, random 함수를 호출하므로 특정 input 값에 대해 동일한 output값을 반환하지 않음을 알 수 있다. 즉, 동일한 input값이어도 매번 다른 결과가 나타나므로 위의 함수는 순수 함수가 아니다.