Gio_J
Gio's dev archive
Gio_J
전체 방문자
오늘
어제
  • 분류 전체보기 (20)
    • PS (10)
      • BOJ (8)
      • Programmers (2)
    • CS (0)
      • Operating System (0)
      • Network (0)
      • Data Base (0)
    • Data Structure (0)
    • Algorithm (0)
    • JavaScript (9)
      • DeepDive (9)
    • React (0)
    • Tools (1)

블로그 메뉴

  • 홈
  • GitHub
  • solved
  • 태그
  • 방명록

공지사항

인기 글

태그

  • programmers
  • javascript
  • JS
  • PS
  • c++
  • vscode
  • Visual Studio Code
  • DeepDive
  • boj

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Gio_J

Gio's dev archive

JavaScript/DeepDive

[JavaScript] 데이터 타입

2022. 7. 7. 11:11

 

이 글은 자바스크립트를 저 나름대로 공부하고 작성하는 글로

잘못된 내용이 존재할 수 있습니다. 잘못된 내용을 발견하면 언제든 지적 부탁드립니다.

 

데이터 타입

컴퓨터는 근본적으로 0과 1로 이루어진 데이터를 처리한다.

하지만 실제로 모니터에 출력되어 우리의 눈에 보이는 것은 0과 1이 아닌 문자, 숫자, 그림, 사진 등 다양한 모습으로 변환되어 나타난다. 

적절한 모습 형태로 컴퓨터가 데이터를 해석하기 위해 필요한 것이 데이터 타입이다.

자바스크립트에는 데이터 타입을 원시타입과 객체타입으로 나눌 수 있는데,

원시 타입으로는 숫자(number), 문자열(string), 불리언(boolean), undefined 타입, null 타입, 심벌(Symbol) 6가지로

나뉘고 이 외의 모든 것은 객체타입으로 처리된다.

이러한 데이터 타입으로 자바스크립트는 변수에 값이 할당될 때나, 특정 타입의 값을 읽어들이거나 할때 얼만큼의 할당해야 할지, 읽어야 할지를 결정하게 된다. 

 

 

단순히 이를 구현한다고 생각하면 메모리에 첫번째 바이트는 읽어야 하는 메모리의 양 두번째 바이트 변수 정보등 이런 형식으로 값과 정보를 함께 저장하면 되지 않을까하는 생각을 할 수 있는데 자바스크립트는 메모리에 값만 저장되어 있다. 

그렇다면, 어떻게 이를 적절히 해석할 수 있을까? 

 

자바스크립트에서 이를 구현하기 위해 컴파일러 또는 인터프리터에 심벌 테이블이라는 자료구조가 존재하고,

이에 식별자를 키로 메모리주소, 데이터 타입, 스코프 등이 바인딩되어 저장되어 관리된다. 이를 통해 적절한 결과값을 얻을 수 있다

 

 

숫자 타입(number)

 

정적타입 언어의 경우 굉장히 숫자타입에 굉장히 다양한 타입이 존재한다.

하지만 자바스크립트는 딱 하나로 64bit 부동소수점 방식을 이용한다.

부동소수점은 근본적으로 실수 값이므로 숫자 타입을 처리할 때 정적 타입 언어와 달리 실수 값이 나올 수 있다.

또한  Infinity -Infinity NaN 또한 숫자 타입으로 취급한다.

 

문자열(string) 타입

 

자바스크립트에서 문자열은 텍스트를 나타내는 데이터 타입으로 ' ' , " " 또는 ` ` 으로 텍스트를 감싸 나타내는데,

텍스트내의 각각의 글자는  유니코드 문자로 저장된다.

 

문자열을 감싸는 것중에서 `` 백틱은 템플릿 리터럴이라 불리며, 특별한 기능을 가지는데

기본적으로 문자열은 여러라인을 동시에 가지지 못하고 문자열 안에 변수 값을 표현하기 위해서는 기타 작업들을

거쳐야하는 불편함이 존재한다. 하지만 템플릿 리터럴은 기본적으로 멀티라인을 지원하고 내부에 ${expression} 형태로

표현식을 삽입해 변수나 값등을 문자열로 표현할 수 있게끔 기능을 제공한다. 

const a = 3;
const str = 'a : ' + a  
console.log(str) // a + 3

const str2 = `a : ${a}` // a + 3

 

불리언(boolean) 타입

 

불리언 타입은 true / false 두가지 값만 존재하는 타입으로,

다른 모든 타입은 불리언 타입으로 변경될 수 있다는 특징이 있다.

Falsy(false로 평가되는 값)와 Truthy(true로 평가되는 값)으로 구분되는데,

숫자 타입의 경우 (0, NaN) 이 Falsy한 값이고 그 외의 값들은 Truthy로 평가된다. 

이를 가장 간단히 알아보는 방법은 not 연산자인 !를 두번 사용하는 것이다.

console.log(!!0) // false
console.log(!!1) // true
console.log(!!NaN) // false

 

undefined 타입

 

기본적인 의미처럼 정의되지 않았다는 것을 나타내는 데이터 타입으로 var 로 선언되 변수가 초기화되지 않았을 경우

기본적으로 undefined가 할당된다. undefined는 값이 없다는 것을 의미하는 데이터 타입이 아니므로 값이 임의로 할당하는 방식을 사용하는 것은 바람직하지 않다. 값이 없음을 나타내고 싶을 경우에는 null 타입을 이용한다.

 

null 타입

null 타입은 값이 없다는 것을 나타내는 명시적으로 나타내는 타입으로 falsy 값으로 평가된다.

 

심벌(Symbol) 타입

 

심벌 타입은 변경 불가능한 값이고 다른 값과 중복되지 않는 특징을 가지고 있는 값이다.

따라서, 주로 이름이 충돌할 위험이 없도록 객체의 유일한 키 값을 만드는데 사용된다.

또 다른 특징으로는 다른 원시타입의 경우 리터럴을 통해 생성하지만 심벌은 함수 호출을 통해 생성한다는 특징이 있다.

 

 

'JavaScript > DeepDive' 카테고리의 다른 글

[JavaScript] 타입변환과 단축평가  (0) 2022.07.14
[JavaScript] 원시타입과 객체타입의 차이  (0) 2022.07.13
[JavaScript] 제어문  (0) 2022.07.07
[JavaScript] 표현식과 연산자  (0) 2022.07.07
[JavaScript] 변수  (0) 2022.07.07
    'JavaScript/DeepDive' 카테고리의 다른 글
    • [JavaScript] 원시타입과 객체타입의 차이
    • [JavaScript] 제어문
    • [JavaScript] 표현식과 연산자
    • [JavaScript] 변수
    Gio_J
    Gio_J
    dev archive

    티스토리툴바