Page 20 - 006963
P. 20
하면 같은 결과를 얻게 됩니다. 이때 누가 먼저 완료하든 상관없습니다. 즉, 경쟁 조건을 피할 수
있습니다.
또 같은 인수를 사용하여 함수를 호출할 때 항상 같은 함수를 반환하면 함수는 참조적으로 투명하
2
므로 생산된 값으로 함수의 표현 평가를 대신할 수 있습니다. 이에 따르면 함수는 두 번 연속으
로 평가할 필요가 없습니다(설정에 조금만 신경 쓴다면).
Note 재귀
여기까지 책을 읽은 독자라면 재귀에 익숙하거나 완전히 이해할 능력이 있다고 볼 수 있습니다. 지금까지는 재귀를 많
이 다루지 않았는데, 간단히 설명할 필요가 있습니다.
코드에 반복문이 있다면 이것을 재귀로 대체할 수 있습니다. 예를 들어 요소를 찾는 일을 다음과 같이 반복적으로 정
의할 수 있습니다(예제 파일: recursive.js).
function find(toFind, array){
let found = "not found";
array.forEach((element) => {
if(element == toFind){
found = "found";
};
});
return found;
};
console.log(find(3, [3, 9, 2])); // 결과: found
console.log(find(3, [2, 9, 3])); // 결과: found
console.log(find(3, [2, 9, 2])); // 결과: not found
하지만 이것은 find 재귀를 이용해서 구현할 수도 있습니다(예제 파일: recursive-1.js).
function find(toFind, array){
if(array[0] === toFind) {
return "found";
}else if(array.length === 0){
return "not found";
}else{
return find(toFind, array.slice(1));
}
};
console.log(find(3, [3, 9, 2])); // 결과: found
console.log(find(3, [2, 9, 3])); // 결과: found
console.log(find(3, [2, 9, 2])); // 결과: not found
계속
2 역주 참조적 투명성: 프로그램 동작을 변경하지 않은 채 관련 값을 대체할 수 있다면 표현식을 참조상 투명하다고 할 수 있습니다.
428
리팩토링 자바스크립트(본문)최종.indd 428 2018-09-19 오전 1:31:34