나 이것도 몰랐네..

자바스크립트 3 - 데이터 타입 및 복사 본문

언어/자바스크립트

자바스크립트 3 - 데이터 타입 및 복사

SuhyeokRoh 2024. 3. 29. 00:03

데이터 타입

자바스크립트의 데이터 타입은 원시 타입(Primary Type) 참조 타입(Reference Type)으로 분류됨

1. 원시 타입(Primary Type)

  • Object를 제외한 모든 데이터 타입은 언어 최하위 수준에서 직접 표현되는 불변값(immutable value, 값 변경 불가능)
    • 변경 불가능한 값은 변수가 아닌 원시 값을 의미
  • 원시 값을 변수에 할당하면 변수(확보된 메모리 공간)에는 실제 값이 저장됨
    • 변수의 값을 재할당 시, 새로운 메모리 공간을 확보하고 재할당한 원시 값을 저장 후, 변수가 새롭게 재할당된 원시 값을 가리키도록 변경
  • 원시 값을 갖는 변수를 다른 변수에 할당하면 원본의 원시 값이 복사되어 전달
  • Type 종류 : Null, Undefined, Boolean, Number, String, BigInt, Symbol

2. 참조 타입(Reference Type)

  • Array, Object, function 타입이 해당
  • 객체는 변경 가능한 값(mutable value)
  • 객체를 변수에 할당하면 변수(확보된 메모리 공간)에는 참조 값이 저장됨
    • 참조 값 - 생성된 객체가 저장된 메모리 공간의 주소
    • 객체를 할당한 변수는 재할당 없이 객체를 직접 변경할 수 있음
  • 객체를 가리키는 변수를 다른 변수에 할당하면 원본의 참조 값이 복사되어 전달
  • 원시 값과는 다르게 여러 개의 식별자가 하나의 객체를 공유할 수 있음
  • 함수(function)는 선언식과 표현식으로 작성 가능
    •  
    • 선언식으로 정의한 함수는 호이스팅이 발생함
    • 표현식으로 정의한 함수는 정의 전에 호출 시 에러 발생 - 변수로 평가되어 변수의 scope 규칙을 따름

얕은 복사(shallow copy)와 깊은 복사(deep copy)

얕은 복사

  • 복사본의 속성이 복사본이 만들어진 원본 객체와 같은 참조를 공유하는 복사
  • 원본이나 복사본을 변경할 때, 다른 객체가 변경될 수 있음

깊은 복사

  • 복사본의 속성이 복사본이 만들어진 원본 객체와 같은 참조를 공유하지 않는 복사
  • 원본이나 복사본을 변경할 때, 다른 객체가 변경되지 않음을 보장
  • 얕은 복사와 깊은 복사로 생성된 객체는 원본과는 다른 객체
    • 얕은 복사는 객체에 중첩되어 있는 객체의 경우 참조 값을 복사
    • 깊은 복사는 객체에 중첩되어 있는 객체까지 모두 복사해서 원시 값처럼 완전한 복사본을 생성 
  • 원시 값을 할당한 변수를 다른 변수에 할당하는 것은 깊은 복사, 객체를 할당한 변수를 다른 변수에 단순히 할당하는 것은 얕은 복사에 해당

'언어 > 자바스크립트' 카테고리의 다른 글

자바스크립트 5 - 이벤트  (0) 2024.04.15
자바스크립트 4 - 스코프와 클로저  (0) 2024.03.29
자바스크립트 2 - 변수  (0) 2024.03.29
자바스크립트 1 - 동기/비동기  (0) 2024.03.28
자바스크립트란?  (0) 2024.03.20