함수형 프로그래밍에서는 함수를 중심으로 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);
여기서 말하는 조합성이란 단어는 모듈의 독립성으로도 대체 할 수 있을거 같다.
결국 모듈의 수준을 높이기 위해 모듈의 독립성과 응집력을 높입니다. 모듈화 수준이 높아지면 얻을 수 있는 효과로는
기획 변경의 대응력을 높이고, 오류를 줄이고 다른 모듈에 영향이 가지 않도록 하여 생산성과 안정성을 확보 할 수 있다