Data type - Primitive Type 과 Reference Type

Doyoon Lee·2020년 7월 26일
0

Javascript

목록 보기
17/23

Data type 은 크게 두가지로 나뉜다.

Primitive Type (원시타입)

MDN 공식문서에서 설명하고 있는 primitive type

In JavaScript, a primitive (primitive value, primitive data type) is data that is not an object and has no methods. There are 6 primitive data types: string, number, bigint, boolean, undefined, and symbol. There also is null, which is seemingly primitive, but indeed is a special case for every Object: and any structured type is derived from null by the Prototype Chain.

primitive data type은 데이터 중에서 객체가 아니고 메소드도 가지고 있지 않은 데이터를 말한다.

단순히 데이터 안에 어떤 값이 있는 구조의 데이터이다. 변경 불가능한 데이터 타입이다.

6가지의 primitive type

  • Symbol
  • String
  • Number
  • Boolean
  • Undefined

Primitive type 처럼 보이는것

  • Null

실제로는 object로부터 파생되는 특별한 경우이다.

Reference Type 참조타입

그 원시타입을 가르키는(말그대로 참조해서 보여주는) 구조의 데이터.

  • Object, Array 등

원시타입을 그냥 박스라고 생각하고,
참조타입을 끈이 연결되어있는 박스라고 해보자.
(편의상 밑에서는 박스 B라고 부를것이다.)

Data 와 Memory 라는 개념을 상자와 방이라고 이해해보자.


undefined

예를들어 let myBox; 이런식으로 변수를 잘못 지정해서 변수 myBox 라는 빈 박스가 생겨버렸다.

그 빈 박스를 호출했을 때 undefined 가 나오는 것이다. (메모리상 공간은 있지만 정의되지 않고 자리만 차지하고 있다.? )

이렇게 되어버린 빈 박스가 많아질수록 방을 사용하기에 불편해진다. 작은 프로그램 = 작은 방 이라고 생각할 수 있는데, 이런식으로 필요없는 빈 박스들이 많아져서 불러오기가 오래걸리는 프로그램이 되는 것이다.

null

끈이 연결되어있는 박스 B를 만들었다. 누군가 박스 B의 박스를 불태워서 박스B가 사라져있다.

나도 모르는새에 박스가 없어져 있는데 그걸 모르고 호출을 했을때,

박스 B의 화살표만 남아 있는 상태에서 엥? null이야. 하며 null 값이 나오는것같다.



Javascript 의 6가지 Datatype

  • undefined
  • null
  • boolean (true/false)
  • 숫자
  • 문자열
  • 객체 (object)

💡객체가 데이터 타입이었다...!

typeof Operator (연산자)

typeof 연산자를 사용하면, 그 값 또는 변수가 무슨 데이터 타입인지 알 수 있다.

typeof 연산자를 사용하면 다음 문자열 중 하나를 반환한다.

  • "undefined": 정의되지 않은 변수
  • "boolean"
  • "string"
  • "number"
  • "object": 함수를 제외한 객체 또는 "object"
  • "function"

Operator (연산자)이기 때문에 다른 연산자들( 예를들면 + && ) 같은 문법으로 쓴다. . dot operator 도 없이, () 괄호도 없이 사용이 가능하다.

기본문법

typeOf myArray;

사용 예시

let msg = "message";
console.log(typeof msg);
console.log(typeof 100);

아까 배열을 만든 다음에 typeof를 사용해봤는데 "object"라고 나왔다.

💡 사실 배열은 확장된 객체이기 때문이다.



undefined

undefined라는 값은 var, let, const를 사용해서 변수를 정의할 때,

초기화 하지 않았다면 변수에는 undefined가 할당됩니다.

let msg;
console.log(msg === undefined); //true

msg는 선언만 하고, 초기화 하지 않았습니다.

null

null 타입은 데이터 타입 중 하나입니다.

그런데 typeof로 확인해보면 "object"라고 나왔다.

null은 말 그대로 아무것도 아닌 빈 객체를 가리키고 있어서 object라고 나오는 것이다.

Boolean 값 알아보기 (다른 데이터값을 Boolean 으로 변환하기)

비교연산자를 사용해서 비교하면 boolean 값이 나온다.

let msg;
console.log(msg === undefined); // true 


다른 데이터 값들이 Boolean 으로 변환되는 경우

true로 변환되는 값

  • 문자열: 비어 있지 않은 모든 문자열
  • 숫자: 0이 아닌 모든 숫자
  • 객체: 모든 객체 ({}, [] 모두 포함)

false로 변환되는 값

  • 문자열: "" (빈문자열)
  • 숫자: 0, NaN
  • 객체: null
  • undefined

NaN : Not a Number 의 약자

연산 과정에서 잘못된 입력을 받았음을 나타내는 기호이다.

이 true 와 false 값은 if 문에서 아주 중요하게 쓰이는데, 아래 예시를 보자.

e.g.1

let sam = 3;
if (sam === 3) {  //sam === 3 이 true이면
  // 실행된다.
}

e.g.2

let msg = "message";
if (msg) { //msg 가 true 이기 때문에
  // 실행된다.
}

예시 1 은 일반적인 if 문의 구조이다. sam 이 3인지 확인하고 3인 것이 true 이기 때문에 if 내부를 실행할것이다.

그런데, 예시 2도 if 내부를 실행한다. 왜?

위에서 설명되었듯이 true 로 변환되는 값에 string 이 포함된다.

if (msg) 는 if (true) 가 되는 것이다. if문은 조건문이 true 면 실행하므로 실행된다.

또다른 예시를 보자.

e.g.3

let number = 0;
if (number) {
  // 실행 안됨
}

이 예시에서 number 가 0 으로 정의되어 있으므로 number 의 값은 0 이다. 즉 false. 실행되지 않는다.

0개의 댓글