November 23, 2020
이 글은 윤준성의 개발꼬맹이 시절, 혼자 노션에 공부하며 정리해둔 것 중 괜찮은 것을 추려올린 글입니다. 기술블로그 글 기고 목적으로 작성되지 않아, 가독성이 좋지 않거나 알 수 없는 워딩이 있을 수 있습니다.
공유하고 있는 범위(scope) 내에 있는 변수, 객체, 메모리 공간
경쟁 조건(race condition)에 관한 문제
const x = {
val: 2
};
const x1 = () => x.val += 1;
const x2 = () => x.val *= 2;
x1();
x2();
console.log(x.val); // 6
//만일 호출 순서가 달랐다면?
x2();
x1();
console.log(x.val); // 5⇒ 함수형 프로그래밍스럽게 바꾼다면?
const x = {
val: 2
};
const x1 = x => Object.assign({}, x, { val: x.val + 1 });
const x2 = x => Object.assign({}, x, { val: x.val * 2 });
// 전역변수 x의 속성 값을 직접 바꾸는 것이 아닌, 아예 새로운 객체를 반환!
console.log(x2(x1(x))).val); // 6⇒ 이로써 공유상태의 불변성을 유지하는 것이 아주 중요하다!
⇒ 명령형 흐름 제어 보다는 합성함수를 이용하자!
const doubleMap = numbers => {
const doubled = [];
for (let i = 0; i < numbers.length; i++) {
doubled.push(numbers[i] * 2);
}
return doubled;
};
console.log(doubleMap([2, 3, 4]));const doubleMap = numbers => numbers.map(n => n * 2);
console.log(doubleMap([2, 3, 4])); // [4, 6, 8]2 * 2
doubleMap([2, 3, 4])
Math.max(4, 3, 2)