// 기존 함수
function arraySet(array, idx, value) {
const copy = [...array]
copy[idx] = value
return copy
}
// 리팩토링
function arraySet(array, idx, value) {
return withArrayCopy(array, (copyArray) => {
copyArray[idx] = value
})
}
// 카피 온 라이트에 대한 함수 재사용 가능함!!!!
function withArrayCopy(array, callBackFunc) {
const copy = [...array]
callBackFunc(copy)
return copy
}
// 배열을 직접 변경하는 고성능 정렬함수
const sortedArray = withArrayCopy(array, (copyArray) => SuperSorter.sort(copyArray))
withArrayCopy
라는 함수는 재사용이 가능해 졌다!!!// 기존 코드
try{
saveUserData(user);
}catch(err){
logToSnapErrors(err);
}
try{
fetchProduct(productId);
}catch(err){
logToSnapErrors(err);
}
function withLogging(callBackFunc){
try{
callbackFunc()
}catch(err){
logToSnapErrors(err);
}
}
withLogging(()=> saveUserData(user));
function saveUserDataWithLogging(user){
try {
// 그냥 유저데이터를 저장하는 함수
saveUserDataNoLogging(user);
} catch(error){
logToSnapErrors(error);
}
}
function fetchProductWithLogging(productId){
try {
// 그냥 유저데이터를 저장하는 함수
fetchProductNoLogging(productId);
} catch(error){
logToSnapErrors(error);
}
}
function wrapLogging(callBackFunc){
// 함수자체를 return 함으로써 슈퍼파워 함수가 되었다.
return function(arg){
try{
callBackFunc(arg);
} catch(error){
logToSnapErrors(error);
}
}
}
const saveUserDataWithLogging = wrapLogging(saveUserDataNoLogging);
<aside> 💡 데이터 파싱??? : 데이터를 원하는 형태는 작업.
</aside>