✋🏻 부작용(Side-Effect)가 없는 함수
: 동일한 입력 인자에 대해서는 항상 같은 값을 출력/반환하는 함수
: 값이 예측이 가능해 결정적(deterministic)임
✋🏻 순수 함수의 조건
: 같은 인자에 대하여 항상 같은 값을 반환.
: 함수 외부의 어떤 상태도 바꾸지 않음. (함수 외부의 변수를 바꾸는 것도 포함)
: 람다식에 순수함수가 필요
🤔 순수함수, 왜 사용하나요?
입력과 내용을 분리하고 모듈화하므로 재사용성이 증가하기 때문
: 여러 함수와 조합해도 부작용이 없다.
특정 상태에 영향을 주지 않으므로 병행 작업시 안전!
함수의 값을 추적하고, 예측할 수 있으므로 테스트나 디버깅에서 유리
순수함수를 함수형 프로그래밍에 적용하면, 아래와 같은 장점과 활용 구조를 갖는다.
fun main() {
println(highFunc({x,y -> x+y}, 10, 20) //람다식, 정수형 변수 2개 선언
}
fun highFunc(sum: (Int, Int) -> Int, a:Int, b: Int){return sum(a,b)}
→ highFunc 함수를 선언할 때 Sum이라는 함수 추상화 후, 실제 사용할 때 람다식을 이용하여 구체화한다고 보면 됨.
fun main(){
println(highFunc(10,20){
x,y -> x+y
}
}
fun highFunc(a:Int, b: Int, sum: (Int, Int) -> Int):Int
{return sum(a,b)}