-> 객체를 복사할 때 원본 객체와 복사된 객체가 같은 메모리 주소를 참조하는 방식.
즉, 객체의 속성 값 자체를 복사하는 것이 아니라 속성값이 저장된 메모리 주소를 복사 하는 것
-> 객체를 복사할 때 원본 객체와 복사된 객체가 서로 다른 메모리 주소를 가진 새로운 객체를 생성하는 방식 입니다. 즉, 객체의 값뿐만 아니라 속성 값이 참조하는 객체까지 재귀적으로 복사하여 완전히 독립적인 새로운 객체를 만드는 것.

얕은 복사
1. 기본 데이터 타입 (숫자, 문자열, boolean)
2. 변경 가능성이 없는 객체
3. 성능이 중요한 경우
ex) Object.assign() , Spread syntax(...) , for...in loop
깊은 복사
1. 객체 내에 다른객체를 참조하는 경우
2. 변경 시 영향을 격리해야 하는 경우
3. 데이터 무결성이 중요한 경우
ex) JSON.parse (JSON.stringify()) , Lodash _.clonDeep()