22.11.29 데이터타입

Gon·2022년 11월 29일
0

Javascript

목록 보기
2/8
post-thumbnail

1. 데이터타입의 종류

  • 기본형
    • Number
    • String
    • Boolean
    • null
    • undefined
    • symbol
  • 참조형
    • Object
      • Array
      • Function
      • Date
      • RegExp
      • Map, WeakMap
      • Set, WeakSet
  • 기본형과 참조형의 구분 기준
  1. 복제의 방식
    1) 기본형: 값이 담긴 주소값을 바로 복제
    2) 참조형: 값이 담긴 주소값들로 이루어진 묶음을 가리키는 주소값을 복제
  2. 불변의 여부

2. 변수 선언과 데이터 할당

변수 선언

변수란 변경 가능한 데이터가 담길 수 있는 공간

데이터 할당

/** 풀어 쓴 변수 할당 방식 */
var testValue;
testValue = 'test value!';
/** 붙여 쓴 변수 할당 방식 */
var testValue2 = 'second test value!';

주소를 검색해서 문자열을 할당할 때 해당 위치에 문자열을 저장하고,
그 주소를 변수 영역에 저장하는 식으로 이루어짐.

  • 값을 바로 변수에 대입하지 않는 이유(=무조건 새로 만드는 이유)
  1. 자유로운 데이터 변환
    1) 이미 입력한 문자열이 길어진다면?
  2. 메모리의 효율적 관리
    1) 똑같은 데이터를 여러번 저장해야 한다면?

3. 기본형 데이터와 참조형 데이터

기본형 데이터

  • 불변값과 불변성(feat. 가비지컬렉팅)
    • 데이터 영역의 메모리가 바뀌는 것이 아니라
      새로운 데이터 영역에 새로운 데이터를 저장하고 변수 영역에서 주소값을 바꿔주는 것
    • 가비지컬렉팅
      데이터 영역에서 사용되고 있다가 더이상 사용되지 않는 데이터 영역을 수거,
      수거된 공간은 빈 공간이 됨.

참조형 데이터

  • 가변값과 가변성
    기본적인 성질이 가변값인 경우가 많지만
    설정에 따라 변경 불가능한 경우도 있고 불변값으로 활용하는 방안도 있다.

기본형 데이터의 변수 할당 과정과 차이점

객체의 변수(프로퍼티) 영역의 별도 존재 여부

4. 불변 객체

  • 가변 객체
let obj1 = { c: 10, d: "ddd" }
let obj2 = obj1
obj2.c = 20
console.log(obj1.c) //20 출력 obj2를 바꿨는데 1도 바뀜
  • 불변 객체
let obj1 = { c: 10, d: "ddd" }
let obj2 = { c: 20, d: "ddd" }
obj2.c = 30
console.log(obj1.c) // 10 출력 주소가 다르기 때문에 값을 바꾸어도 obj1 에게 영향이 없다.

값으로 전달받은 객체에 변경을 가하더라도 원본 객체는 변하지 않아야 하는 경우에 불변 객체가 필요함.

얕은복사와 깊은복사

  • 얕은 복사(Shallow Copy)
    객체를 복사할 때 위의 예제처럼 원래 값과 복사된 값이 같은 참조를 가리키고 있는 것을 말한다.
    객체 안에 객체가 있을 경우 한 개의 객체라도 원본 객체를 참조하고 있다면 이를 얕은 복사라고 합니다.
  1. 객체를 복사할 때, 해당 객체만 복사하여 새 객체를 생성합니다.
  2. 복사된 객체의 인스턴스 변수는 원본 객체의 인스턴스 변수와 같은 메모리 주소를 참조하며 해당 메모리 주소의 값이 변경회면 다른 객체의 변수 값 역시 동일하게 변경됩니다.
  • 깊은 복사(Deep Copy)
    깊은 복사된 객체는 객체안에 객체가 있을 경우에도 원본과의 참조가 완전히 끊어진 객체를 말합니다.
  1. 객체를 복사할 때 해당 객체와 인스턴스 변수까지 복사합니다.
  2. 데이터 참조가 아닌 객체의 형태를 그대로 복사함으로써 한 객체가 변경되어도 다른 객체의 데이터에는 영향을 주지 않습니다.

5. undefined와 null에 대해서

undefined

  1. 사용자 지정
  2. 자바스크립트 엔진에서 자동 부여
    1) 변수에 값이 지정되지 않은 경우, 데이터 영역의 메모리 주소를 지정하지 않은 식별자에 접근할 때
    2) .이나 []로 접근하려 할 때, 해당 데이터가 존재하지 않는 경우
    3) return 문이 없거나 호출되지 않는 함수의 실행 결과

null

‘없다’를 명시적으로 표현할 때 사용

0개의 댓글