JavaScript | 데이터타입(DataType)

hoho·2022년 8월 11일
0

JavaScript

목록 보기
1/4

데이터 타입? WHAT? WHY?

'데이터 타입' == 'DATA TYPE' == '값의 종류'

*: 메모리에 저장하고 참조 할 수 있어야 한다.

  • 저장 : 메모리 공간의 크기 -> 값의 종류에 따라 정해진 크기의 메모리 공간을 확보 할 수 있다.
  • 참조 : 메모리 공간의 주소 찾기 -> 한 번에 읽어 들여야 할 메모리 셀의 크기를 알 수 있다.
  • 해석 : 값은 2진수로 저장 -> 값의 종류에 따라 해석이 달라 질 수 있다.

JavaScript의 타입

원시 타입 : 언어의 최고 로우레벨에서 직접 표현되는 불변 데이터를 말한다.

  • Number 타입
  • BigInt 타입
  • String 타입
  • Boolean 타입
  • Undefined 타입
  • Null 타입
  • Symbol 타입

객체 타입 : 식별자로 참조할 수 있는 메모리 상의 값을 말한다.

  • 객체, 함수, 배열

Number 타입

JavaScript에서는 하나의 숫자 타입만 존재하여 모든 수를 실수로 처리한다.
*C나 자바의 경우 int, long, float, double 등이 존재한다.

배정밀도 64비트 부동소수점 형식을 따라 -(2^53-1) ~ (2^53-1) 수를 말한다.

*64비트 부동소수점 형식?
컴퓨터가 실수를 표현하는 방법으로 부표처럼 앞뒤로 이동한다는 뜻이다.
여기서 배정도 64비트는 부호 1bit + 지수부 11bit + 가수부 52bit 로 이루어진다.
따라서 지수부에 따라 아주 작은 수와 아주 큰 수를 표현 할 수 있다는 장점이 있지만
정밀도가 떨어진다는 단점도 있다.

console.log(0.1+0.2===0.3) // false

정수로 표시된다 해도 사실은 실수이다.
따라서 정수/정수가 실수가 나올 수 있다.

세개의 상징적인 값을 가진다.
+Infinity , -Infinity, NaN(Not a Number)

두 가지 방식으로 표현할 수 있는 유일한 값
0은 -0 과 +0으로 모두 표현 가능하다.

console.log(+0===-0) // true

BigInt 타입

임의 정밀도로 정수를 나타낼 수 잇는 값이다.
Number의 안전 한계를 넘어서는 큰 정수도 저장하고 연산할 수 있다.
정수 끝에 n을 추가하거나 생성자를 호출해 생성할 수 있다.
BigInt는 Number와 혼합해 연산 할 수 없다.

const x= 2n ** 53n
console.log(2n*6) // TypeError

String 타입

텍스트 데이터를 나타낸다.
0개 이상의 16비트 유니코드 (UTF-16)의 집합으로 전 세계 대부분의 문자를 표현할 수 있다.
작은따옴표(''), 큰따옴표(""), 백틱(``)으로 텍스트를 감싼다.
문자열은 생성 후 바꾸지 못한다. (문자열 불변성)
원본 문자열을 사용해 새로운 문자열 생성 가능하다.

vs 템플릿 리터럴

텝플릿 리터럴은 ES6부터 도입된 새로운 문자열 표기법으로 백틱(``)을 사용한다.
런타임에 일반 문자열로 변환되어 처리된다.

멀티라인 문자열
일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않는다.
따라서 줄바꿈 등의 공백을 표현하려면 이스케이프 시퀀스를 사용해야 한다.

//일반 문자열
var str = '<ul>\n\t<li><a href="#">hoem</a></li>\n</ul>;

//템플릿 리터럴
var template=`<ul>
	<li><a href="#">home</a></li>
</ul>`;

이스케이프 시퀀스

표현식 삽입
ES5:문자열 연결
문자열은 문자열 연산자+를 사용해 연결할 수 있다.
+연산자는 피연사자 중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다.
*이 외에는 덧셈 연사자
ES6: 표현식 삽입
${}으로 표현식을 감싼다. 표현식의 평가 결과가 문자열이 아니어도 강제로 문자열 타입으로 변환되어 삽입된다.

var first='hojeong';
var last='jeon'

//문자열 연결
console.log('My name is' + first +' '+ last +'.');
//표현식 삽입
console.log(`My name is ${first} ${last}.`);
//문자열 강제 변환
console.log(`1+2=${1+2}1); // 1+2=3

Undefined 타입

'정의되지 않은'이라는 뜻이며 undefined 타입의 값은 undefined가 유일하다.
var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화된다.
즉 변수를 선언한 이후 값을 할당하지 않은 변수를 참조하면 undefined가 반환된다.

var foo
console.log(foo) // undefined

*개발자가 의도적으로 변수에 undefined를 할당하면 본래 취지와 어긋나기 때문에 변수에 값이 없다는 것을 명시하고 싶을 때 null을 할당한다.

Null 타입

값이 없다는 것을 명시한다.
null 타입의 값은 null이 유일하다.
*자바스크립트는 대소문자를 구분하므로 NULL,Null과는 다르다.

null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이다.

document.querySelector 메서드는 조건에 부합하는 HTML 요소를 검색할 수 없는 경우 에러 대신 null을 반환한다.

Symbol 타입

고유하고 변경 불가능한 원시 값이다.
ES6에 추가된 타입이다.
주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용할 수 있다.
심벌은 Symbol 함수를 호출해서 생성한다.
이때 생성된 심벌값은 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않은 유일무이한 값이다.

*어떤 프로그래밍 언어들에서 '아톰'이라고 부르기도 한다.

var key= Symbol('key')

var obj={};

obj[key]='value'

Boolean 타입

논리 요소를 나타낸다.
truefalse 두 가지의 값을 가질 수 있다.
*자바스크립트는 대소문자를 구분하기에 True,False와 다르다.

객체 타입

자바스크립트는 객체 기반의 언어이다.
자바스크립트를 이루고 있는 거의 모든 것이 객체다.
속성의 컬렉션으로 볼 수 잇다.
객체 리터럴 구문을 사용하여 제한적으로 속성을 초기화 할 수 있고 추가, 제거할 수 있다.

동적 타이핑

변수 선언 시 타입을 지정하지 않는다.
*var, let, const 키워드를 사용해 변수 선언한다.
어떠한 데이터 타입의 값이라도 자유롭게 할당가능하다.
선언이 아닌 할당에 의해 타입이 결정된다. (타입 추론)
재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.

var foo;
console.log(typeof foo); // undefined

foo=3;
console.log(typeof foo); // number

foo='hi';
console.log(typeof foo) // string

foo= function (){};
console.log(typeof foo) // function

*C나 자바 같은 정적 타입 언어는 변수를 선언할 때 데이터 타입을 사전에 선언해야하며 타입을 변경 할 수 없다.

따라서 높은 유연성이라는 장점이 있지만 신뢰성이 낮다는 단점이 있다.

profile
개발이 즐거운 hoho 집사

0개의 댓글