자바스크립트에서 원시 타입, 객체 타입으로 분류할 수 있따.
원시 타입은 불변하는 값으로 숫자, 문자열, 불리언, undefined, null, symbol
이 있다.
숫자타입은 정수, 실수, 음수, n진수, Infinity, NaN이 있다.
문자열은 ''
, ""
,빽틱
으로 감싼 텍스트를 의미한다.
빽틱
을 사용하여 문자열, 표현식 등을 삽입한 문자열을 의미한다.
console.log(`1 + 2 = ${first}`)
이런 것들이 있다.
true, false를 나타낸다.
var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화한다. 즉 자바스크립트 엔진이 할당하기 전 undefined로 초기화를 한다.
또한 존재하지 않는 속성이나 값들을 리턴받지 못할 때에도 자바스크립트 엔진이 내부적으로 undefined를 반환한다.
즉 undefined는 자바스크립트 엔진이 내부적으로 사용하는 것으로, 개발자가 undefined를 할당하는 것은 좋지 않다.
null은 정확히 null을 써야한다.
그리고 null은 변수에 값이 없다는 것을 의미한다.
즉 개발자가 의도적으로 값을 참조하지 않겠다하면 undefined가 아닌 null을 할당한다.
그러면 가비지 컬렉터가 내부적으로 해당 메모리 공간을 제거할 것이다.
심벌은 다른 값과 중복되지 않는 유일무이한 값이다.
따라서 객체 프로퍼티 키로 주요 사용하는데, 프로퍼티 키로 심벌 타입을 사용하여 충돌할 위험이 없는 키값으로 만들기 위해 사용한다.
또한 이때 생성된 심벌값은 JSON이나 for문에 노출되지 않는다.
메모리에 값을 저장하려면 먼저 확보해야 할 메모리 공간의 크기를 결정해야 한다.
즉, 몇 바이트의 공간을 사용해야 낭비와 손실 없이 값을 저장할 수 있는지 알아야 한다.
var score = 100;
위 코드가 실행되면 컴퓨터는 숫자 100을 저장하기 위해 메모리 공간을 확보한 다음, 숫자 100을 2진수로 메모리 공간에 저장한다.
이때 자바스크립트는 숫자타입의 값을 저장하기 위해 8바이트 메모리 공간을 확보한다.
그리고 값을 참조할 때에는 식별자 score
를 통해 메모리 주소를 찾아간다.(메모리 공간 선두 주소), 그리고 숫자 타입이 8바이트 이므로 8바이트 단위로 읽어온다.
그리고 읽어 온 값은 2진수이다. 그래서 숫자타입으로 바꿔주는 역할을 한다.
자바스크립트는 int, char
등 타입 체크를 하지 않습니다. 기존 정적 타입 언어는 변수 선언 시점에 변수 타입이 결정된다.
반면 동적 타입 언어는 변수 선언이 아닌 변수 할당에 의해 결정된다.
여기서 생기는 문제가 있을 수 있다.
면접 예상 질문
undefined와 null 차이가 무엇이나요
자바스크립트 엔진이 내부적으로 초기화 되지 않거나 할당되지 않는 값을 접근할 때 undefined을 사용합니다.
반면 null은 개발자가 참조를 의도적으로 제거하고 싶을 때 사용합니다.
그리고 차이점으로 JSON은 undefined를 지원하지 않습니다. 또한 null의 typeof는 object이므로 타입체크할 때 조심히 사용해야 하는 문제가 있습니다.왜 명확히 구분해야 할까요?
첫 번째로 유지보수가 어렵습니다. 의도적으로 값이 없는지, 실제로 초기화 되지 않았는지 구분하기 어려워집니다.
또한 서버와의 통신에서도 JSON을 사용할 때 null은 변환이 되지만 undefined는 변환이 되지 않아 유지보수가 어려워집니다.데이터 타입 역할
먼저 데이터를 저장하기 위해 메모리 공간의 크기를 결정할 때 사용됩니다. 숫자는 8바이트, 불리안은 1바이트 등으로 크기를 결정합니다.
그리고 데이터를 참조할 때, 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해 사용합니다.
마지막으로 읽어 들인 2진수를 숫자인지, 문자인지 어떻게 해석할지 결정하기 위해 사용합니다.