본문 바로가기
Front-end/Javascript

[Javascript] 자바스크립트 데이터 타입 및 주의해야할 사항

by 발담그는블로그 2021. 8. 3.

데이터 타입

* primitive: 더 이상 작아질 수 없는 한 가지 단위 (single item)

* object: single item을 묶어서 한 박스로 관리할 수 있게 해준다. 오브젝트는 메모리에 탑재될 때, reference 형태로 저장된다. 

const ellie1 = { name: 'ellie' };
const ellie2 = { name: 'ellie' };
const ellie3 = ellie1;

console.log(ellie1 == ellie2); 	// 다른 레퍼런스에 저장되어 있기 때문에 false
console.log(ellie1 === ellie2);	// 똑같은 타입이던 아니던 레퍼런스 값이 다르기 때문에 false
console.log(ellie1 === ellie3); // true

* function: 자바스크립트에서는 function도 데이터 타입 언어 중에 하나이다. 즉, first class function이 지원이 된다. 이 말인 즉슨 function도 다른 데이터 타입처럼 할당이 가능하고 함수의 파라미터 인자도 가능하고 retunr 값이 될 수도 있다. 

primitive number
string
boolean
null
undefiend
symbol
object box container
function first-class function

 

let vs Const

* let: ES6에서 추가된 변수 타입이다. var 대신에 let을 쓰는 것이 좋다. 읽고 쓰는 것이 가능하다.

* Const: 읽기만 가능하다. 선언하고 값을 할당한 이후론 바꿀 수 없다.

 

var를 쓰면 안되는 2가지 이유

let에서는 다른 언어와 비슷하게 좀 더 엄격하게 변수들을 관리할 수 있다. 하지만 var의 경우 보다 훨씬 유연하기 때문에 쓰는 것이 위험하다.

- hoisting: 어디 선언하는 상관없이 항상 변수를 끌어올려 최상단에 선언한다. 선언하기 전에 값을 할당할 수 있기 때문에 쓰면 안된다.

- block scope이 존재하지 않는다: 원래대로라면 블럭({})을 이용해서 변수를 선언하면, let의 경우 블럭 밖에서는 보이지 않는다. 하지만 var의 경우 블럭 안에서 선언한다고 하더라도 아무곳에서나 보일 수 있다. 이럴 경우 꼬이기 쉽기 때문에 쓰지 않는 것이 좋다.

 

immutable 데이터 타입을 사용해야 하는 이유

- 보안: 작성한 값을 해커들이 다른 값으로 변경하는 경우가 있을 수 있다.

- thread safety: 어플리케이션이 실행되면, 한 가지의 프로세스가 할당이 되고 프로세스 안에서는 다양한 쓰레드가 동시에 돌아가면서 어플리케이션을 좀 더 빠르게 실행할 수 있도록 도와준다. 이 때, 다양한 쓰레드들이 동시에 변수에 접근해서 값을 변경할 수 있어서 위험하다. 

 

출처: 유튜브 드림코딩 by 엘리

반응형