Front-end/JavaScript
JS FP 2편 - 참조 투명성과 멱등성(Idempotence)
파리외 개발자
2023. 2. 19. 17:20
함수형 프로그래밍에서 참조 투명성을 가진다는 것은
함수의 결괏값이 예측이 가능하다는 것을 의미한다.
//Idempotence
function notGood(num) {
return Math.random(num); //인자에 영향받지 않는 다른 결과
console.log(num); //인자에 영향받는 같은 결과
}
notGood(5);
notGood이라는 함수에 어떤 인자를 넣어도 랜덤값을 출력한다.
5를 인자로 아무리 넣어도 항상 랜덤한 값을 출력하며
100을 인자로 전달해도 랜덤값을 출력한다.
이 함수는 인자에도 영향을 받지 않고 결과를 예측할 수 없으며 이런 함수를
- 참조 투명성을 가지지 않는다.(결과 예측 불가능)
- 순수합수다.(외부의 어떤 값을 변화시키지는 않음)
- 멱등성을 가지지 않는다.(차후 설명)
이번 함수는 랜덤한 값이 아닌 인자를 그대로 출력해 준다.
- 참조 투명성을 가진다.(결과 예측 가능)
- 순수 함수가 아니다.(콘솔 창에 어떤 값을 출력하는 것은 side effect)
- 멱등성을 가진다.
Idempotence
멱등성이란 f(x) == f(f(x))이다.
함수를 한번 실행한 값과
두 번 이상 실행한 값이 같을 때 멱등성을 가진다고 할 수 있다.
Math.abs(Math.abs(-50)); //항상 같은 행동의 결과
가장 대표적 예로 절댓값 함수가 있다.
abs함수를 아무리 많이 실행해도 결괏값은 양수가 나온다.
첫 번째 함수는 어차피 참조 투명성을 가지지 않는 랜덤함수라 값이 같지 않고
두 번째 함수는 인자를 그대로 리턴한다면 여러 번 실행시켜도 같은 값을 가지니 멱등성을 가진다.