[F-Lab 모각코 챌린지 - 41일차] - Custom Deep Copy 코드 개선

Big One·2023년 6월 20일
0

F-Lab

목록 보기
14/69

저번에 deepCopy를 모든 컬렉션들까지 카피가 이루어지도록 만들어았다.
이 때 작성한 코드는 else if 와 중첩 if 가 있어 depth가 깊어져 가독성이 떨어지고 유지보수가 어려운 코드였다.
Guard Clause 를 키워드를 제시해주셨고 적용해보고, 좀 더 가독성 있고 안정적인 코드로 만들기위해 일일히 [object Object] 이런식으로 빼두었던 것들을 다른 방식으로 고쳐보라는 피드백을 받았다.
앞으로 이 코드를 계속 개선해 나아가면서 나만의 코드습관을 만들고 왜 이 코드를 적었는지 생각하는 과정이 될 것 같다.

개선 전 코드

const customCopy = function (target) {
  let result = {};
    if (Object(target).toString() === objectTag || Object(target).toString() === arrayTag) {
      for (let key in target) {
        result[key] = customCopy(target[key]);
      }
    } else if (Object(target).toString() === regexpTag) {
      return new RegExp(target);
    } else if (Object(target).toString() === setTag) {
      return new Set(target);
    } else if (Object(target).toString() === mapTag) {
      return new Map(target);
    } else {
      result = target;
    }
  return result;
};

첫 번째 개선코드

const customCopy = (target) => {
  let result = {};
  if(target === null) return;
  if(Object(target).toString() === objectTag || Object(target).toString() === arrayTag) {
    for (let key in target) {
      result[key] = customCopy(target[key]);
    }
  }
  if (Object(target).toString() === regexpTag) return new RegExp(target);
  if (Object(target).toString() === setTag) return new Set(target);
  if (Object(target).toString() === mapTag) return new Map(target);
  result = target;
  return result;
}

두 번째 개선코드

const typeGroup = [Map, Set, WeakMap, WeakSet, Function, RegExp];

const copy = (target) => {
  let result = {};
  if(target.constructor === Object || target.constructor === Array){
    for(let key in target){
      result[key] = copy(target[key]);
    }
  }
  const typeIndex = typeGroup.indexOf(target.constructor);
  console.log(typeIndex);
  if(typeIndex < 0) return new typeGroup[typeIndex](target);

  result = target;
  return result;
}

음 .. 2번째 개선코드에는 문제점이 있는데 생성자 함수가 실행이 안된다는 점이다.. 음 ,.. 생성자함수를 실행할 때는 뭔가의 조건이 또 있는 것 같다 ㅠ 이건 알아봐야 할 것 같은데 이런 방식으로 간추리는게 가능하다면 정말 간편한 코드가 될 것 같다.

일단 첫 번쨰 개선코드만으로도 이전 코드와 다르게 한 눈에 보기 쉬워졌다.
이렇게 해도 문제점은 없지만.. 일일히 생성타입마다 비교를 해야하는지 ... 비슷한 ? 코드들이 자꾸 반복되어 줄이고 싶다..

profile
이번생은 개발자

0개의 댓글