FrontEngineer JungBam

순수 함수 본문

자바스크립트 개념

순수 함수

정밤톨 2023. 3. 1. 15:30

 순수 함수란 결국 외부에서 참조되는 값이 결과에 영향을 미치지 않는 함수를 말한다.

const a = 1
const add = (b,c) => a + b + c

 위의 코드에서 add함수는 a라는 값을 참조하여 연산한 값을 리턴하는데 이렇다면 다른 곳에 불려갔을 때에는 a값이 없기 때문에 에러가 날 것이다. 즉, 이 함수의 컨텍스트로만 동작했을 때에 함수가 제대로 동작하지 않는 것이다.

const add = (a, b, c) => a + b + c

 위의 코드에서 함수는 어디에서 불러오더라도 인자가 제대로 들어오는한 문제없이 동작한다. 위 함수는 순수함수이다.

 한가지 경우를 더 보자.

const add = (a, b) => {
  const c = 3
  return a + b + c
}

 이 함수 또한 어디에서 불려오더라도 이상없이 동작한다. 이 함수 또한 순수 함수인 것이다.

 함수의 사이드 이펙트에서 선언되는 값들은 함수의 선언 위치에 따라서 달라진다. 즉, 사이드 이펙트에서 실행되는 코드로 인한 영향이 있다면 그것은 순수함수가 아닌 것이다. 

const addminus = (a , b) => {
  const c = 2
  const result = () => a + b - c
  return result()
}

 이 result는 순수함수일까? 정답은 그렇다이다. 어디에서 호출되더라도 그 값이 동일하게 동작하기 때문이다. result를 반환하도록 해서 클로저로 만들고 클로저는 순수함수일지 생각해보자.

const addminus = () => {
  const c = 2;
  const result = (a, b) => a + b - c;
  return result;
};
const add = addminus();

 이 result를 반환받아 addminus라는 함수가 생애주기가 마감하더라도 그 안에 c 변수를 참조하는 클로저를 만들어봤다. 그럼 이 때에 이 클로저를 반환받은 add는 순수함수인가? 정답은 그렇다. 이 add를 어디에서 실행하더라도 결국 값은 동일할 것이고 참조하는 변수 또한 같을 것이다.

반응형
Comments