Pure Function
강의명 : Swift로 함수형 프로그래밍 시작하기
수강 기한 : 무제한
진도율 : 0강/29강 (0%) | 시간 : 0분/85분
함수형 프로그램은 함수를 이용해서 프로그래밍을 합니다. 여기서 말하는 함수를 기존의 함수 또는 메소드와 구분하기 위해 순수함수라고 합니다.
이 순수함수는 '특정 input에 대해서 항상 동일한 output을 반환하는 함수'를 의미합니다.
output을 만드는데 input만을 사용한다는 의미이므로, 함수 외부의 값을 사용하지 않아 side-effect가 없다는 뜻이 됩니다.
- output은 input에 의해서만 결정됩니다.
- 함수의 수행 과정에서 외부에 있는 값을 사용하지 않습니다.
- 그리고 외부의 값을 변경하지도 않습니다.
- 그래서 순수함수는 외부에 영향을 주지도 받지도 않습니다. 즉, side-effect가 없습니다.
var name = "FP" var greeting = "" func makeGreeting() { greeting = "Hello, \(name)" }예를 들어 이 소스에서는 함수의 동작이 외부에 있는 변수인
name
과 greeting
에 의해 영향을 받습니다. Side-Effect가 존재합니다.
이것을 순수함수로 바꾼다면 이렇게 됩니다.
func greeting(_ name: String) -> String { return "Hello, \(name)" }함수의 수행결과가 파라미터로 받은 name에 의해서만 결정되고, 외부에 영향을 전혀 받지 않습니다. 언제든 특정 입력값에 대해 항상 동일한 결과를 얻을 수 있습니다.
let greet = "Hello" func greeting(_ name: String) -> String { return "\(greet), \(name)" }만약 이런코드도 순수 함수 일까요? 결과를 만드는데 외부값인
greet
이라는 변수를 사용합니다. 하지만 이 값은 let
으로 정의되어 있어 변경이 불가능한 값입니다. 이렇게 변경이 불가능한 데이터를 immutable data
라고 합니다. 그리고 이 immutable data
만 사용하는 함수도 특정 input에 대해 항상 동일 output을 내기 때문에 순수함수 입니다.
func add(_ a: Int) -> Int { return Int(arc4random()) + a }이 함수는 순수 함수 입니까? 결과를 만드는데 외부값을 사용하지는 않지만, 내부에서 랜덤값을 사용해서 결과를 만들고 있기 때문에, 동일한 값을 입력하더라도 실행 때 마다 다른 결과를 얻게 됩니다. 따라서 이 함수는 순수함수가 아닙니다.
실습
주어진 코드에서 외부변수를 사용하지 않는 순수함수로 변경하세요import Foundation var sum = 0 //이 변수를 삭제하세요 func solution(_ nums: [Int]) -> Int { for i in nums { sum += i } return sum }직접 풀어보시고, 다음 페이지에서 솔루션 코드를 확인해보세요.
-
목차
질답