깊은 복사 JSON.parse(JSON.stringify(array))
JSON.parse(JSON.stringify(word_map))
### 코드의 작동 원리
1. **`JSON.stringify(word_map)`**: 먼저 `word_map` 객체를 JSON 문자열로 변환합니다. 이 과정에서 객체의 구조는 보존되지만, 모든 것이 문자열 형태로 변환됩니다. 이 변환 과정에서 함수, `undefined`, 심볼과 같은 JSON으로 표현할 수 없는 값들은 무시되거나 삭제됩니다.
2. **`JSON.parse(...)`**: 그 다음, `JSON.stringify`로 생성된 문자열을 다시 객체로 변환합니다. `JSON.parse` 메서드는 JSON 문자열을 받아 해당 문자열을 기반으로 새로운 JavaScript 객체를 생성합니다.
### 코드 사용 시 고려할 점
- **함수, `undefined`, 심볼 무시**: 이 방법은 객체 내의 함수, `undefined`, 심볼 값 등 JSON에서 지원하지 않는 값을 복사하지 않습니다. 따라서 이러한 값들은 결과 객체에 포함되지 않습니다.
- **원형(Prototype) 정보 누락**: 복사된 객체는 원본 객체의 프로토타입 체인을 상속받지 않습니다. 즉, 원본 객체가 특정 클래스의 인스턴스였다면, 복사된 객체는 단순한 리터럴 객체가 되며 해당 클래스의 메서드나 속성을 가지지 않습니다.
- **성능 고려**: 대용량 객체를 다룰 때 이 방법은 성능 저하를 일으킬 수 있습니다. 객체를 문자열로 변환하고 다시 객체로 파싱하는 과정은 비용이 많이 드는 연산입니다.
- **순환 참조 문제**: 객체 내부에 순환 참조가 있는 경우(`obj.a = obj`와 같이 자기 자신을 참조하는 경우), `JSON.stringify`는 에러를 발생시킵니다. 이는 JSON 형식이 순환 참조를 지원하지 않기 때문입니다.
이러한 이유로, 이 방법은 단순한 객체를 깊은 복사할 필요가 있을 때 유용할 수 있지만, 모든 상황에 적합한 것은 아닙니다. 객체의 구조가 복잡하거나, 특정 타입의 값을 포함하고 있거나, 성능이 중요한 경우 다른 깊은 복사 방법을 고려하는 것이 좋습니다.
댓글
댓글 쓰기