모던 자바스크립트 6장

박준이·2025년 8월 20일
0

JS

목록 보기
6/6

데이터 타입

데이터 타입은 값의 종류를 말한다.
자바스크립트의 모든 값은 데이터 타입을 가진다.

자스는 7개의 타입이 있다.

원시 타입과, 객체 타입으로 분류할 수 있다.


원시 타입 :

  • 숫자 타입 : 숫자. 정수와 실수 구분 없이 하나의 숫자 타입만 존재
  • 문자열 타입 : 문자열
  • 불리언 타입 : 논리적 참과 거짓 (true or false)
  • undefined 타입 : var 키워드로 선언된 변수에 암묵적으로 할당되는 값
  • null 타입 : 값이 없다는 것을 의도적으로 명시할 때 사용하는 값
  • 심벌 타입 : ES6에서 추가된 7번째 타입

객체 타입 :

  • 객체,함수,배열 등

숫자 타입

자스를 그렇게 썼는데 첨 알았다.
자스에서 숫자는 하나의 숫자 타입만 있다.
정수 실수 구분 안한다. 배정밀도 64비트 부동소수점 형식의 2진수로 저장된다.

자스는 2진수 8진수 16진수를 표현하기 위한 데이터 타입을 제공하지 않기 때문에 이들을 참조하면 모두 10진수로 해석되는 상남자 언어다.

당연하게도 숫자는 다 실수니 1.0이나 1이나 똑같다. ===으로 비교해도 true임 ㅇㅇ

Infinity나 -Infinity도 존재한다.

그리고 NaN도있다.
많이 보긴 했는데, 이게 산술 연산 불가 라는 뜻이다.
자스는 대소문자를 구분하니 nan,Nan,NAN 이렇게 적으면 안된다.
얘네들은 값이 아니라 식별자로 들어간다.
식별자면 뭐야? 변수 이름 같은거잖슴 ? 그니까 그러면 안되는거야.


문자열 타입

문자열은 0개 이상의 16비트 유니코드 문자 (UTF-16)의 집합으로 전 세계 대부분의 문자를 표현할 수 있다.

문자열은 작음 따옴표 (''), 큰따옴표(""), 백틱 (``)으로 텍스트를 감싼다.

C는 문자열 타입을 제공하지 않고 문자의 배열로 문자열을 표현하죠 ㅇㅇ?
자바는 문자열을 객체로 표현한대요 ㅇㅇ
근데 자스의 문자열은 원시 타입이고 변경 불가능한 값이래요... ㄷㄷ...
이건 뒤에서 더 자세하게 배운다네용 ~


템플릿 리터럴

ES6부터 생겼다.
멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 제공한다.

일반 문자열 내에서는 줄바꿈 등의 공백을 표현하려면 \ 이걸로 시작하는 이스케이프 시퀀스를 써야하잖아요?

근데 템플릿 리터럴 쓰면 걍 표현 하면 됩니다.

표현식 삽입도 되죠

${} 뭐 이렇게 하는거 ㅇㅇ 아시잖아요 ㅇㅇ?

표현식의 평가 결과가 문자열이 아니어도 문자열로 타입이 강제 변환되어 삽입 된답니다.


불리언 타입

true fase.


undefined 타입

undefined.

var 키워드로 선언한 변수에 초기화 되는 거죠.

결국 언디파인드가 뜻 하는 건 선언 이후 값이 할당된 적이 없는 초기화되지않은 변수라는 것이잖아요.

근데 개발자가 의도적으로 변수에 값을 넣으면 원래 언디파인드의 취지와 어긋나고 혼란을 야기하니 이럴 땐 null을 할당하는 것이 좋답니다.


null 타입

null.

오 근데 null은 변수에 값이 없다는 것으로 의도적으로 명시 할 때 사용 한다는데, 이는 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미하기 때문에, 자스 엔진은 이 공간에 대해서 가바지 콜렉션을 수행한다네요.ㄷㄷ

근데 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 한답니다.

HTML 요소를 검색해 반환하는 document.querySelector 메서드가 조건에 부합하는 요소가 없으면 null을 에러 대신 반환합니다.


심벌 타입

이건 좀 신기하던데, 뒤에서 자세하게 나오고 여기서는 그냥 ES6에서 추가된 7번째 타입으로 원시 타입인데, 다른 값과 중복 되지 않는 유일무이한 값이랍니다. 얘는 Symbol 함수를 호출해 생성합니다. 이 값은 외부에 노출되지 않으며 다른 값과 절대 중복되지 않는 유일무이한 값이에요.


객체 타입

이것도 나중에 알아보고,
자스를 이루고 있는 거의 모든 것이 객체라는 것이 중요하다네요.
지금까지 본 6개 말곤 다 객체라네요 ㄷㄷ


데이터 타입의 필요성

왜 필요할까?

데이터 타입에 의한 메모리 공간의 확보와 참조

  • 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
  • 값을 참조할 때 한 번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
  • 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해

근데 그럼 앞에서 변수에 값을 재할당 할 때, 같은 메모리 주소에서 값을 수정하는 것이 아닌, 다른 메모리 주소에 값을 새로 집어 넣는 게 뭔가 납득이 가는 거 같기도 하다. 뒤에서 더 알아보자.


동적 타이핑

자스의 모든 값은 데이터 타입을 가진다. 그럼 변수는?

C나 자바 같은 정적 타입 언어는 변수를 선언할 때 데이터 타입을 사전에 선언 해야 한다.
이를 명시적 타입 선언이라 한다.

근데 자스는 그렇지 않죠. var,let,const 같은 키워드로 변수를 선언하고 타입에 상관없이 값을 자유롭게 넣을 수 있죠.

자스의 변수는 선언이 아닌 할당에 의해 타입이 결정(타입 추론)된다. 그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다. 이러한 특징을 동적 타이핑이라 한다.
그리고 동적 타입 언어라 한다.

근데 결국 트레이드 오프는 존재하고 은탄환은 존재하지 않으니,
장단이 있죠.

그래서, 안정적인 프로그램을 만들기 위해서는,

  • 변수의 무분별한 남발은 금물.
  • 변수의 유효 범위 (스코프)를 줄이기.
  • 전역 변수를 최대한 사용하지 않기.
  • 변수보다는 상수.
  • 네이밍을 잘하자.

코드는 동작하는 것만이 존재 목적은 아니다. 코드는 개발자를 위한 문서이기도 하다. 따라서 사람이 이해할 수 있는 코드, 즉 가독성이 좋은 코드가 좋은 코드다.

컴퓨터가 이해하는 코드는 어떤 바보도 쓸 수 있다. 하지만 훌륭한 프로그래머는 사람이 이해할 수 있는 코드를 쓴다. - 마틴 파울러 <<리팩토링>>의 저자

ㄷㄷ슨

profile
코딩하는 준'이'

0개의 댓글