[TIL #5] 231016_데이터, 얕은복사, 깊은복사

Bora.K | 권보라·2023년 10월 16일
0

TIL

목록 보기
5/51
post-thumbnail

오늘 한 일

  • [내배캠] Javascript 문법 3주차 강의
    • 기본형 데이터, 참조형 데이터, 얕은 복사, 깊은 복사

배운 것

메모리와 데이터


  • 비트 : 0과 1로 이루어진 메모리를 구성하기 위한 가장 작은 조각
  • 바이트 : 비트 8개를 합친 새로운 단위
  • 메모리 : 모든 데이터는 바이트 단위의 식별자인 메모리 주소값을 통해 구분

변수 선언과 데이터 할당

변수 선언과 데이터 할당은 풀어쓰는 것이 메모리 측면에서 더 효율적

데이터 타입


값의 저장 방식 / 불변성(데이터 영역 메모리) 여부에 따라 기본형 데이터와 참조형 데이터로 나눔

  • 변수와 상수

    • 변수 : 변수 영역 메모리를 변경할 수 있음
    • 상수 : 변수 영역 메모리를 변경할 수 없음
  • 불변하다 VS 불변하지 않다

    • 불변하다 : 데이터 영역 메모리를 변경할 수 없음
    • 불변하지 않다 : 데이터 영역 메모리를 변경할 수 있음

1. 기본형 데이터

Number, String, Boolean, null, undefined, Symbol
→ 불변(데이터 영역 메모리를 변경할 수 없음)하다.

2. 참조형 데이터

Array, Function, Date, RegExp, Map, WeakMap, Set, WeakSet
→ 객체의 변수 영역이 별도 존재, 가변성. (객체의 변수 영역은 변경 가능하므로)

☑️ 복사 이후 값 변경 시, 참조형 데이터는 객체 자체를 변경

//기본형 데이터
var a = 10;
var b = a;

//참조형 데이터
var obj1 = { c: 10, d: 'ddd' };
var obj2 = obj1;

b = 15;
obj2 = { c: 20, d: 'ddd'};

참조형 데이터의 가변성을 해결하기 위한 방법


1. 얕은 복사

바로 아래 단계의 값만 복사

2. 깊은 복사

내부의 모든 값을 하나하나 다 찾아서 복사 (중첩된 객체의 경우 깊은 복사 사용)
→ 재귀적 수행(recursive) : 함수나 알고리즘이 자기 자신을 호출하여 반복적으로 실행되는 것

오늘의 회고

참조형 데이터를 복사 후 수정할 때 참조형 데이터의 가변성 때문에 복사된 객체를 수정하면 기존 객체도 바뀌게 된다. 그래서 얕은 복사를 해야하고, 객체가 중첩된 경우에는 깊은 복사를 해야한다.

대충 개념은 이해를 하겠는데, 얕은 복사와 깊은 복사를 수행하는 과정이 도통 머리에 들어오지 않는다. 개념 정리도 어려울 만큼 ㅠㅠ 내일 다시 한 번 듣고 정리해 봐야겠다. 머리가 깨질 것 같...

내일 할 일

  • [내배캠] Javascript 문법 3주차 완강
    • 얕은 복사, 깊은 복사 다시 듣기
    • record와 호이스팅, this 함수
  • [내배캠] Javascript 문법 4주차
    • 콜백함수
profile
Frontend Engineers

0개의 댓글