질문: 얕은 복사와 깊은 복사의 차이를 정확히 설명해 주세요.
또 왜 이러한 차이가 발생하는지 설명해주세요.
둘의 차이
- 원시 타입의 값은 변경 불가능한 값이다. 객체(참조)타입의 값은 변경 가능한 값이다.
- 예측 불가능한 것을 줄이고 신뢰성을 높이고자 똑같은 주소에 값을 재할당하는것이 아니라, 새로운 공간에 새로운 값을 저장해 주소만 옮기는 것이다. 그러면 나중에 그 이전값이 필요하더라도 다시 주소만 옮기면 된다.
- 객체의 값은 원시 값처럼 바로 메모리 공간에 값을 넣는것이 아니라 메모리 공간에는 참조값(다른 주소값)을 넣고, 한 단계 더 들어가 값을 넣는다.
- 객체도 예기치 못한 변경이 발생하지 않도록 바로 값을 담는것이 아니라 메모리 공간 주소를 담는다. 물론 비용이 조금 더 든다는 단점이 있지만 한 단계 더 거쳐 실제 객체에 접근함으로써 명확하고 신뢰성이 확보되기때문이다.
- 원시 값을 변수에 할당하면 변수(확보된 메모리 공간)에는 실제 값이 저장된다. 객체를 변수에 할당하면 변수에는 참조값이 저장된다.
- 원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달된다. pass by value
- 객체는 pass by reference
https://tang-co.tistory.com/141
객체는 많은 프로퍼티를 가질 수 있기 때문에 수정 때 마다 새 메모리셀을 할당하면 메모리 낭비가 극심하다.
그렇게 신뢰성을 어느정도 포기하고 직접 수정을 보장한다.
원시 값
변경 불가능한 값
원시 값은 변경불가능한 값이다. (읽기 전용)
변수: 확보한 메모리 공간 자체,메모리공간 식별 이름
값 : 변수에 저장된 데이터 : 표현식의 결과
변경 불가능하다는 것은 변수가 아닌 값에 대한 진술이다.
변수는 재할당을 통해 변경 가능하다.
상수는 재할당조차 안된다.