고양이와 코딩
[쏙쏙 들어오는 함수형 코딩] CH14 ~ CH15 본문
728x90
중첩된 데이터에 함수형 도구 사용하기
앞부분은 생략하고, 최종적으로 만들어진 `updateX` 가 실행되는 과정을 정리해 보자
function updateX(object, keys, modify) {
var key1 = keys[0];
var restOfKeys = drop_first(keys);
return update(object, key1, function (value1) {
return updateX(value1, restOfKeys, modify);
});
}
function update0(value, modify) {
return modify(value);
}
//updateX()는 일반적으로 nestedUpdate() 라고 부릅니다!
function nestedUpdate(object, keys, modify) {
if (keys.length === 0) return modify(object);
var key1 = keys[0];
var restOfKeys = drop_first(keys);
return update(object, key1, function (value1) {
return nestedUpdate(value1, restOfKeys, modify);
});
}
만약 nestedUpdate 함수가 중첩 수준이 3인 경우에 사용된다면 어떻게 작동할까?! (cart > options > size)
→
- nestedUpdate() 함수는 세 개의 인자를 받습니다:
- object: 대상 객체입니다. 여기서는 cart 객체가 됩니다.
- keys: 수정할 필드의 경로를 나타내는 배열입니다. 예를 들어, ["options", "size"]와 같이 각 레벨의 필드를 지정합니다.
- modify: 필드를 수정하기 위한 함수입니다.
- 함수 내에서는 먼저 keys 배열의 길이를 확인하여, 만약 keys 배열이 비어 있다면(즉, 더 이상 수정할 필드가 없다면), 주어진 객체에 대해 수정 함수를 적용한 후 반환합니다. 이는 재귀 호출의 종료 조건입니다.
- 그렇지 않으면, keys 배열에서 첫 번째 요소를 가져와 key1에 저장합니다. 여기서는 "options"가 됩니다.
- 그런 다음 drop_first 함수를 사용하여 keys 배열에서 첫 번째 요소를 제외한 나머지 요소들을 가져옵니다. 이것을 통해 "options"를 제외한 나머지 경로를 restOfKeys 배열에 저장합니다.
- 이제 update 함수를 사용하여 object의 key1 필드를 수정합니다. 여기서는 cart 객체의 "options" 필드가 됩니다. 이 때, 수정할 값을 결정하기 위해 해당 필드의 값을 가져와 nestedUpdate 함수를 재귀적으로 호출합니다.
- 재귀 호출에서는 value1이 cart 객체의 "options" 필드의 값이 되고, restOfKeys 배열은 "size"가 됩니다. 따라서 다음 단계에서는 "options" 객체의 "size" 필드를 수정하게 됩니다.
- 재귀 호출에서 nestedUpdate 함수는 value1인 "options" 객체를 대상으로 하여 modify 함수를 적용하여 해당 필드를 수정합니다.
결국 재귀 호출을 사용하는 이유는, 중첩이 길어질 때 필요한 작업을 간편하게 반복하기 위함입니다
따라서 중첩이 6번 되어있는 객체가 있다면 !!
- 처음 호출에서 nestedUpdate 함수는 첫 번째 레벨의 필드를 수정하기 위해 호출됩니다. 여기서는 cart 객체의 필드를 수정하려는 것입니다.
- 그런 다음 재귀적으로 nestedUpdate 함수가 호출됩니다. 이때는 두 번째 레벨의 필드를 수정하기 위해 호출됩니다. 여기서는 options 필드를 수정하려는 것입니다.
- 그 다음에는 세 번째 레벨의 필드를 수정하기 위해 다시 nestedUpdate 함수가 호출됩니다. 여기서는 size 필드를 수정하려는 것입니다.
- 이때는 더 이상 중첩된 객체가 없으므로 재귀 호출이 종료됩니다. 수정 함수가 적용되어 해당 필드가 변경됩니다.
이렇게 작동합니다. nestedUpdate에서는
var restOfKeys = drop_first(keys)
이 부분이 남은 키가 하나 줄어들게 하는 부분입니다 !
p.383에 시각화 있음
'함수형 코딩 스터디' 카테고리의 다른 글
[쏙쏙 들어오는 함수형 코딩] CH12 ~ CH13 함수형 반복, 함수형 도구 체이닝 (0) | 2024.03.12 |
---|---|
[쏙쏙 들어오는 함수형 코딩] - CH8 ~ CH9 계층형 설계 (0) | 2024.02.19 |
[쏙쏙 들어오는 함수형 코딩] CH6 ~ CH7 (얕은 복사, 깊은 복사) (0) | 2024.02.11 |
[쏙쏙 들어오는 함수형 코딩] - CH4 ~ CH5 (1) | 2024.02.04 |
[쏙쏙 들어오는 함수형 코딩] - CH1 ~ CH3 (1) | 2024.01.28 |