[JavaScript] 핵심 개념과 주요 문법

따봉도치 개발자·2023년 3월 2일
0

원시자료형과 참조자료형

<원시자료형의 특징>
1.변수에 할당하면 메모리에 값 자체가 저장
2.다른 변수에 할당하면 값 자체가 복사되어 전달
3.변경 불가능한 값 즉, 읽기전용
ex) number, string, null, undefined
<참조자료형의 특징>
1.변수를 할당하면 메모리에 메모리 주소가 저장
2.다른 변수를 할당하면 주소값 자체가 복사
3.변경이 가능한 값
ex) array, object, function

얕은 복사와 깊은 복사

  1. 얕은 복사 : slice(), Object.assign(), spread syntax 등의 방법으로 참조 자료형을 복사하면, 중첩된 구조 중 한 단계까지만 복사합니다. 이것을 얕은 복사(shallow copy)
  2. 깊은 복사 :조 자료형 내부에 중첩되어 있는 모든 참조 자료형을 복사하는 것은 깊은 복사(deep copy)라고 합니다. 그러나 JavaScript 내부적으로는 깊은 복사를 수행할 수 있는 방법이 없습니다. 단, JavaScript의 다른 문법을 응용하면 깊은 복사와 같은 결과물을 만들어 낼 수 있습니다.
    JSON.stringify()와 JSON.parse() 활용!

*깊은 복사의 예외)
대표적인 예로 중첩된 참조 자료형 중에 함수가 포함되어 있을 경우 위 방법을 사용하면 함수가 null로 바뀌게 됩니다. 따라서 이 방법 또한 완전한 깊은 복사 방법이라고 보기 어렵다.

요약

  1. 배열의 경우 slice() 메서드 또는 spread syntax 등의 방법으로 복사할 수 있다.
  2. 객체의 경우 Object.assign() 또는 spread syntax 등의 방법으로 복사할 수 있다.
  3. 위 방법으로 참조 자료형을 복사할 경우, 중첩된 구조 중 한 단계까지만 복사된다. (얕은 복사)
  4. JavaScript 내부적으로는 중첩된 구조 전체를 복사하는 깊은 복사를 구현할 수 없다. 단, 다른 문법을 응용하여 같은 결과물을 만들 수 있다.
  5. 대표적인 JSON.stringify()와 JSON.parse()를 사용하는 방법이 있지만, 예외의 케이스가 존재한다. (참조 자료형 내부에 함수가 있는 경우)
  6. 완전한 깊은 복사를 반드시 해야 하는 경우, node.js 환경에서 외부 라이브러리인 lodash, 또는 ramda를 사용하면 된다
profile
Explain Like I'm 5

1개의 댓글

comment-user-thumbnail
2023년 3월 2일

좋은 글이에요 ~~^^

답글 달기