Data Types

김윤진·2022년 7월 1일
1

JavaScript

목록 보기
9/10

자바스크립트의 데이터 타입은 두가지가 있다. 그리고 컴퓨터는 이 두 데이터 타입을 다르게 처리한다.

Primitive Data Types(원시 데이터 유형)

  • Numbers
  • String
  • Boolean
  • Null
  • Undefined
  • Symbols

string이 method가 있는 것에 대해 의문을 품을 수 있다.

// method가 있는다는 것은
// string 
'hong'.toLowerCase()
'hong'.split()

// number
parseInt(10)
parseFloat(100)

// 이 차이인 것이다. 함수의 인자로 data type을 넣어준는 것과
// data type에 체이닝을 할 수 있는 것

자바스크립트는 primitive string을 string object로 변환한다. 그래서 string object method를 쓸 수 있는 것이다.

그렇다면 자바스크립트에서는 primitive data types를 어떻게 처리하느냐?

primitive data type을 선언할 때 stack에 쌓이게 된다. stack은 간단한 데이터 구조로 컴퓨터가 데이터를 빠르게 검색하고 저장할 수 있는 수단이다.

stack에 primitive data type은 프로그램에서 우리가 사용하는 변수명으로 식별할 수 있다.

numOne이라는 변수를 선언하고 50을 할당하고 numTwo 라는 변수를 선언하고 50을 할당한다.

그렇다면 stack에는 어떤 일이 발생할까? 컴퓨터는 numOne 변수를 위한 공간을 만들고 stack에 값을 할당한다. 그리고 numTwo 변수를 만들면 컴퓨터는 다시 공간을 만든다. 50을 저장한다.두 변수에 같은 값을 할당하더라도 문제는 없다.

Reference Data Types(참조 데이터 유형)

  • Objects
  • Functions
  • Collections
  • Arrays
  • DatesOther types of objects

Reference Data Types는 primitive data types과 달리 본질적으로 동적이다. 즉 Reference Data Types는 고정된 크기를 가지고 있지 않다.

objects와 같이 Reference Data type은 메소드를 가지고 있다.

Primitive과 Reference Data Types 차이?

이 두 타입의 차이는 컴퓨터가 reference data type을 저장할 때이다.

reference data type 변수를 만들고 값을 할당할 때 컴픁터는 directly하게 저장하지 않는다. (primitive types도 마찬가지이다.) 해당 변수가 할당한 포인터는 메모리에서 해당 데이터 유형의 위치를 가리키는 포인터이다.

Stack과 Heap, 두 데이터 구조가 있다.

객체를 선언하는 것을 예로 들었을 때, 객체 자체가 Heap에 저장된다. 그리고 pointer는 stack에 저장된다. pointer는 객체의 변수 이름으로 식별되어 해당 객체를 가리킨다.

object1 이라는 변수를 선언하고 객체를 할당하고 object2 라는 변수를 만들고 변수 object1 을 할당한다. 그렇다면 다른 객체가 Heap에 생성된다는 것인가? 그것은 아니다.

객체가 Heap에 이미 있으므로 변수 object1object2 는 모두 동일한 객체를 가리킨다.

우리가 변수 object1 을 변경할 때 차이가 생긴다. 변수 object1 을 변경하면 두 변수 모두에 영향이 간다. 왜냐하면 Heap에서 동일한 객체를 가리키고 있기 때문이다. 그리고 한 변수를 변경하면 다른 변수가 영향을 받는다.

let object1 = {
  name:'Hong',
  age:32
};
let object2 = object1;

object1.age = 24;

console.log(object2); // { name: 'Hong', age: 24 }

참조 데이터 타입과 원시 데이터 타입의 차이점을 아는 것은 null pointer reference와 같은 에러가 발생했을 때 왜 일어났는지 알 수 있는 것이 중요하다.

0개의 댓글