본문으로 바로가기

자바스크립터의 데이터 타입

category JavaScript/기초 2020. 9. 27. 02:03

데이터 타입

자바스크립터의 데이터 타입은 총 8가지이다.

  1. Boolean : true 혹은 false 자료형

  2. null : 어떤 값이 의도적으로 비어있음을 표현하는 자료형, 객체

      var tNull = null; //  
      console.log(typeof a); // object
  3. undefined : 값을 명시적으로 않으면 undefined 자료형.

      var tUndefined; //  
      console.log(typeof a); // undefined
  4. Number : 정수 또는 소수점 자료형.

  5. BigInt : Number보다 큰 정수를 표현할 수 있는 자료형.

      var tBigInt1 = 9007199254740991n;  
      var tBigInt2 = BigInt(9007199254740991);  
      var tBigInt3 = BigInt("0x1fffffffffffff");
  6. String : 문자, 문자열을 나타내는 자료형.

  7. Symbol : 모든 값이 고유한 자료형.

      var tSymbol = Symbol(111);  
      console.log(a === 111); // false;  
      console.log(Symbol("String") === Symbol("String")); // false
  8. Object : 데이터와 함수의 집합.

      var tObject = {
             number : 1,
             string : "string",
          boolean : false,
          null : null
      }

이렇게 8가지의 데이터들은 크게 원시 타입(Primitive Type)*참조 타입(Reference Type) *두 가지로 나뉘는데

1번부터 7번까지의 데이터들은 원시 타입이고 8번인 object만 참조 타입이다

원시 타입과 참조 타입의 큰 차이점은 데이터 값의 할당 방식인데

이 두 타입들의 할당 방식이 어떻게 다른지 알아보도록 하자

원시 타입(Primitive Type)

우선 원시 타입은 변수에 데이터 값을 그대로 할당한다

var primitive;

위와 같이 primitive를 선언하면

변수primitve
주소*1000
주소...10001001
데이터...- 

변수 a에 (데이터 값이 비어있는)주소가 할당되고

  primitive = 10;

로 primitive변수를 초기화 해주게 되면 비어있던 주소가 1000인 메모리에 10이 할당되어 primitive변수가 10의 값을 가지게 된다

주소...10001001
데이터...10-

참조 타입(Reference Type)

참조 타입은 데이터 값을 바로 할당하는 게 아니라 데이터가 담겨있는 주소를 할당한다

  var refer1 = {
      data1:10,
      data2:100,
      data3:1000,
  }

refer1 객체를 선언하고 초기화하면

변수refer1
주소*1001

refer1에게 주소가 하나 할당되고

아까 원시 타입 처럼 주소에 찾아가서 데이터를 넣으려고 봤는데

data1,2,3으로 데이터가 3개나 된다.. 한 주소에 넣을 수 있는 데이터 크기는 정해져있기 때문에 다 넣을 수는 없기 때문에

주소 하나에 값을 하나씩 넣어줘야하는데 이때 3개의 데이터를 할당시킬 3개의 주소가 필요하고

3개의 주소를 가르킬 주소가 또 필요하다..

주소...100110021003...2000200120022003
데이터...-   
aa

---

여기에 데이터를 넣고

주소...100110021003...2000200120022003
데이터...-   {
data1 : *2001
data2: *2002
data3: *2003
}
101001000

데이터들의 주소값을 가지고 있는 주소를 refer1의 주소가 가르키게 하면

주소...100110021003...2000200120022003
데이터...*2000   {
data1 : *2001
data2: *2002
data3: *2003
}
101001000

와 같은 형태가 된다

이 상태에서

  var refer2 = refer1;

refer2를 초기화 하고 refer1으로 초기화 하면 위의 과정을 되풀이할까?

아니다.

매우 대충 만든 메모리 그래프로 표현하자면

변수refer1refer2
주소*1001*1002

우선 refer2가 초기화 되었으니 refer2가 주소값을 할당받게 되고

주소...100110021003...2000200120022003
데이터...*2000*2000  {
data1 : *2001
data2: *2002
data3: *2003
}
101001000

refer2의 주소값은 refer1과 똑같이 2000을 가르키게 된다

refer1과 refer2가 똑같은 객체를 가르키고 있게 되는 것

그렇기 때문에

  refer2.data2 = 0;

위의 명령문을 실행하게 된다면

주소...100110021003...2000200120022003
데이터...*2000*2000  {
data1 : *2001
data2: *2002
data3: *2003
}
1001000

와같이 둘이 같이 참조하고 있는 주소값의 데이터가 똑같이 바뀌게 되어

  console.log(refer1.data2 === refer2.data2); // true (0===0);

으로 같은 값이 나오는 것이다.

'JavaScript > 기초' 카테고리의 다른 글

호출 스택, 이벤트 루프  (0) 2020.10.02
생성자 함수  (0) 2020.10.01
this binding  (0) 2020.09.30
실행 컨텍스트와 스코프  (0) 2020.09.28
호이스팅  (0) 2020.09.28