본문으로 바로가기

순수 함수(pure Function)

category 함수형 프로그래밍 2021. 1. 20. 17:02

함수형 프로그래밍에서는 함수를 중심으로 Side-Effect가 없도록 프로그래밍을 하는 것을 말한다

여기서의 함수는 순수 함수(pure Function)이다

순수 함수란 동일한 인자를 넣었을 때 항상 동일한 리턴값을 반환하고 외부에 영향을 받지 않는 함수를 말한다

 

순수 함수

  • input : 어떠한 함수에서 외부의 데이터를 직접적으로 사용하지 않고, 파라미터로 받는다

  • output : input값에 의해 output이 결정되기 때문에 외부의 값들이 변경되더라도 함수 자체에는 외부에 영향을 받지 않기 때문에 Side-Effect가 없다는 것이다

파라미터

순수하지 않은 함수

const peopleList = ['eve', 'kyle', 'dico', 'autumn'];

const getPeopleList = () => {
  return peopleList;
}

 

순수한 함수

const peopleList = ['eve', 'kyle', 'dico', 'autumn'];

const getPeopleList = (list) => {
  return list;
}

 

 

  • 순수하지 않은 함수는 위의 코드와 마찬가지로 외부에 있는 변수를 직접 참조한다 외부에 있는 변수인 peopleList가 아니라 peopleList2로 바뀐다면 순수하지 않은 함수에서는 peopleList를 peopleList2로 바꿔줘야 할 것이다

  • 순수한 함수는 매개변수로 list를 받는다 외부의 데이터를 직접 참조하지 않고 그 함수를 호출하는 곳에서 전달 인자로 넘겨주게끔 위임을 해주는 것이다 

 

부수효과

순수하지 않은 함수

const peopleList = ['eve', 'kyle', 'dico', 'autumn'];

const updatePeopleList = () => {
  peopleList.push('beemo');
  return peopleList;
}

 

순수한 함수

const peopleList = ['eve', 'kyle', 'dico', 'autumn'];

const updatePeopleList = (list) => {
  list.push('beemo');
  return list;
}

 

  • 순수하지 않은 함수는 외부의 값이 변경되게 한다

  • 순수한 함수는 외부의 값은 변경하지 않는다 

 

조합성

  • 순수한 함수는 조합성을 강조한다 (모듈화 수준을 높인다)

순수하지 않은 함수

const peopleList = ['eve', 'kyle', 'dico', 'autumn'];

const updateAndPrintPeopleList = () => {
  peopleList.push('beemo');
  console.log(peopleList);
}

updateAndPrintPeopleList();

 

순수한 함수

const peopleList = ['eve', 'kyle', 'dico', 'autumn'];

const getPeopleList = (list) => {
  return list;
}

const updatePeopleList = (list) => {
  list.push('beemo');
}

const printPeopleList = (list) => {
  console.log(list);
}

const peopleList2 = getPeopleList(peopleList);
const updateList = updatePeopleList(peopleList2);
printPeopleList(updateList);

 

여기서 말하는 조합성이란 단어는 모듈의 독립성으로도 대체 할 수 있을거 같다.

결국 모듈의 수준을 높이기 위해 모듈의 독립성과 응집력을 높입니다. 모듈화 수준이 높아지면 얻을 수 있는 효과로는

기획 변경의 대응력을 높이고, 오류를 줄이고 다른 모듈에 영향이 가지 않도록 하여 생산성과 안정성을 확보 할 수 있다