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함수를 아무리 많이 실행해도 결괏값은 양수가 나온다.

첫 번째 함수는 어차피 참조 투명성을 가지지 않는 랜덤함수라 값이 같지 않고

두 번째 함수는 인자를 그대로 리턴한다면 여러 번 실행시켜도 같은 값을 가지니 멱등성을 가진다.