객체는 참조형이기때문에 항상 참조를 신경써야 한다
const source = {
    user: { // depth : 1
        info: { // depth : 2
            age:30,
            name:'jeon'
            updated_at: 1623238587468
        },
    },
};
얕은복사 (shallow copy) : 1depth 까지만 분리, 그 뒤로는 원본 참조
깊은복사 (deep copy) : depth 상관없이 원본과 완벽히 분리
✔ 얕은복사 : ... 스프레드 연산자 , Object.assign({}, source)
const newSource = JSON.parse(JSON.stringify(source))
제일 간단한 방법이지만 객체의 사이즈가 크면 성능이슈가 발생함!
const newSource = _.cloneDeep(source)
간단한 방법2 , 성능좋고 호환성도 좋음!
function deepCopyObject(obj){
    const clone = {};
    for (const key in obj){
        if(typeof obj[key] == "object" && obj[key] != null){
            clone[key] = deepCopyObject(obj[key]);
        } else {
            clone[key] = obj[key];
        }
    }
    return clone;
}
재귀함수 컨셉을 개념으로 , 추상적으로만 알고있었는데
이렇게 실 예제를 통해 재귀함수 활용 케이스를 보니 신기했다.
const DefaultStyle = {
    color: '#fff',
    contColor: '#999',
    fontSize:14,
    fontWeight: 200,
};
function createParagraph(config){
    config = {...DefaultStyle, ...config};
}
createParagraph({fontSize:12});
김민태의 프론트엔드 아카데미 : 제 1강 JavaScript & TypeScript Essential
https://ko.javascript.info/object-copy