• 자바스크립트의 모든 값은 데이터 타입을 갖는다.

  • 7개의 데이터 타입은 원시 타입객체 타입으로 분류할 수 있다.

    구분데이터 타입설명
    원시타입숫자숫자, 정수와 실수 구분 없이 하나의 숫자 타입만 존재
    문자열문자열
    불리언논리적 참(true)와 거짓(false)
    undefnedvar키워드로 선언된 변수에 암묵적으로 할당되는 값
    null값이 없다는 것을 의도적으로 명시할 때 사용하는 값
    symbolES6에서 추가된 7번째 타입
    객체타입객체, 함수, 배열 등
  • 숫자타입의 값 1과 문자열 타입의 값 ‘1’은 비슷해 보이지만 전혀 다른 값이다.
    확보해야 할 메모리 공간의 크기도 다르고 저장되는 2진수도 다르며,
    해석하는 방식도 다르다.


👩🏻‍💻 6.1 숫자타입

  • 자바스크립트는 하나의 숫자 타입만 존재한다.
    ECMAScript 사양에 따르면 숫자 타입의 값은
    배정밀도 64비트 부동소수점방식을 따른다.

  • 모든 수를 실수로 처리하며,
    정수만 표현하기 위한 데이터 타입이 별도로 존재하지 않는다.
    이는 정수로 표시된다해도 사실은 실수라는 것을 의미한다.
    따라서 정수로 표시되는 수끼리 나누더라도 실수가 나올 수 있다.

//숫자 타입은 모두 실수로 처리된다.
console.log(1 === 1.0); // ture
console.log(4 / 2); // 2
console.log(3 / 2); // 1.5
  • 숫자 타입은 추가적으로 세 가지 특별한 값도 표현할 수 있다.
console.log( 10 / 0 ); // Infinity : 양의 무한대
console.log( 10 / -0 ); // -Infinity : 음의 무한대
console.log( 1 * 'String'); // NaN : 산술 연산 불가(not - a number)

/*자바스크립트는 대소문자를 구별하므로, 주의하여 작성하여야 한다.*/

👩🏻‍💻 6.2 문자열타입

  • 문자열 타입은 텍스트 데이터를 나타내는 데 사용한다.

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

  • 가장 일반적인 표기법은 작은따옴표를 사용하는 것이다.

string = '작은 따옴표로 감싼 문자열 내의 "큰따옴표"는 문자열로 인식된다.';
string = "큰 따옴표로 감싼 문자열 내의 '작은따옴표'는 문자열로 인식된다.";
  • 따옴표로 감싸는 이유는 키워드나 식별자 같은 토큰과 구분하기 위해서다.

  • 감싸지 않으면 키워드나 식별자로 인식하게 되어 레퍼런스 오류를 낼 수 있다.

  • 그리고 만약 문자열을 감싸지 않는다면 스페이스와 같은 공백문자도 포함시킬 수 없다.


👩🏻‍💻 6.3 템플릿 리터럴

  • ES6부터 템플릿 리터럴 이라고 하는 새로운 문자열 표기법이 도입되었다.

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

  • 일반 문자열과 비슷해보이지만 백틱(``)을 사용하여 표현한다.

    6.3.1 멀티라인 문자열

    • 일반 문자열 내에서는 줄바꿈이 허용되지 않아 공백을 표현하려면
      백슬래시()로 시작하는 이스케이프 시퀀스를 사용해야한다.

      이스케이프 시퀀스의미
      \0Null
      \b백스페이스
      \f폼피드 : 프린터로 출력할 경우 다음페이지의 시작 지점으로 이동한다.
      \n개행LF : 다음 행으로 이동
      \r개행CR : 커서를 처음으로 이동
      \t탭(수평)
      \v탭(수직)
      \uXXXX유니코드
      \’작은따옴표
      \”큰따옴표
      \백슬래시

🧙🏻‍♂️ 일반 문자열과 달리 템플릿 리터럴 내에서는 이스케이프 시퀀시를
사용하지 않고도 줄바꿈이 허용되며, 모든 공백도 있는 그대로 적용된다.

var template = `<ul>
  <li><a href="#">Home</a></li>
</ul>`;

console.log(template);

//출력결과//
<ul>
  <li><a href="#">Home</a></li>
</ul>;

6.3.2 표현식 삽입

var first = 'Hyo Jin';
var last = 'Jang';

//문자열 연결
console.log('My name is ' + first + ' ' + last + '.');
//템플릿리터럴사용
console.log(`My name is ${first} ${last}.`);
//My name is Hyo Jin Jang.
  • 문자열은 문자열연산자 + 를 사용해 연결할 수 있다.

🧙🏻‍♂️템플릿 리터럴 내에서는 표현식 삽입을 통해
간단히 문자열을 삽입해
가독성 좋고 간편하게 문자열을 조합할 수 있다.

표현식을 나타낼 때에는 ${}를 사용하면 됩니다.


👩🏻‍💻 6.4 불리언 타입

불리언 타입의 값은 참 , 거짓을 나타내는 true 와 false 뿐이다.


👩🏻‍💻 6.5 undefined 타입

  • undefined 타입의 값은 undefined 가 유일하다.

  • var로 선언한 변수는 암묵적으로 undefined로 초기화된다.

  • 따라서 변수를 선언한 이후 값을 할당하지 않은 변수를 참조하면
    undefined가 반환된다.

  • 개발자가 의도적으로 할당한 것이 아닌,
    자바스크립트 엔진이 변수를 초기화할 때 사용하는 값이라고 볼 수 있다.


👩🏻‍💻 6.6 null 타입

  • null 타입의 값은 null 이 유일한다. 대소문자에 유의해야한다.

  • 프로그래밍에서 null은 변수에 값이 없다는 것을 의도적 명시할 때 사용한다.

  • 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이다.
    이는 이전에 할당되어 있던 값에 대한 참조를 명시적으로 제거하는 것을 의미하며,
    자바스크립트 엔진은 누구도 참조하지 않는 메모리 공간에 대해 가비지 콜렉션을 수행할 것이다.

var foo = 'Lee';

foo = null;

👩🏻‍💻 6.7 Symbol 타입

  • ES6에서 추가된 7번째 타입으로, 변경 불가능한 원시타입의 값이다.
  • 다른 값과 중복되지 않는 유일무이한 값이다.
  • 심볼 타입은 객체의 프로퍼티 키를 고유하게 설정함으로써
    프로퍼티 키의 충돌을 방지하기 위해 사용한다.
  • 심벌 이외의 원시 값은 리터럴을 통해 생성하지만
    심벌은 Symbol 함수를 호출해 생성한다.
  • 생성된 심벌값은 외부에 노출되지 않는다.
    const mySymbol = Symbol();
    console.log(mySymbol); // Symbol()
  • Symbol 함수에는 선택적으로 문자열을 인수로 전달할 수 있는데,
    이 문자열은 생성된 심벌 값에 대한 설명으로 디버깅 용도로만 사용된다.
  • 심벌 값에 대한 설명이 같더라도 생성된 심벌 값은 유일무이한 값이다.
  • Symbol 함수를 호출하면 매번 새로운 심볼이 생성된다.
    const sym1 = Symbol('mySymbol');
    const sym2 = Symbol('mySymbol');
    
    console.log(sym1 === sym1); // true
    console.log(sym1 === sym2); // false
  • new 생성자를 이용할 수 없습니다.
    const sym = new Symbol(); // Uncaught TypeError: Symbol is not a constructor

👩🏻‍💻 6.8 객체 타입

자바스크립트는 객체 기반의 언어이며,
자바스크립트를 이루고 있는 거의 모든 것이 객체이다.


👩🏻‍💻 6.9 데이터 타입의 필요성

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

  • 값은 메모리에 저장하고 참조할 수 있어야 한다.

  • 값을 저장하려면 먼저 확보해야 할 메모리 공간의 크기를 결정해야 한다.

  • 자바스크립트 엔진은 변수에 할당되는 값의 데이터 타입에 따라
    확보해야 할 메모리 공간의 크기가 결정된다.

  • 컴퓨터에서 한 번에 읽어들여야 할 공간의 크기를 알기 위해서
    데이터 타입을 알고 있어야 한다.

  • 각 데이터 타입마다 정해져있는 메모리 공간의 크기가 있으므로,
    그에 맞는 공간을 한 번에 읽어올 수 있는 것이기 때문이다.

6.9.2 데이터 타입에 의한 값의 해석

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


👩🏻‍💻 6.10 동적 타이핑

6.10.1 동적 타입 언어와 정적 타입 언어

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

  • 정적타입언어는 변수의 타입을 변경할 수 없으며, 타입에 맞는 값만 할당 할 수 있다.

  • 정적타입 언어는 컴파일 시점에 타입체크를 수행한다.

자바스크립트의 모든 값은 데이터 타입을 갖는다고 했는데,
그렇다면 변수는 데이터 타입을 가질까 ?

  • 변수는 타입을 갖지않는다. 하지만 값은 타입을 갖는다.
  • 따라서 현재 변수에 할당되어 있는 값에 의해 변수의 타입이
    동적으로 결정된다고 표현하는 것이 적절하다.
  • 자바스크립트는 정적 타입 언어와 다르게 변수를 선언할 때 타입을 선언하지 않는다.
    다만 var,let,const를 사용해 변수를 선언할 뿐이다.

  • 어떠한 데이터 타입의 값이라도 자유롭게 할당할 수 있다.

  • 자바스크립트의 변수는 선언이 아닌 할당에 의해 타입이 결정된다.
    그리고 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있다.
    이러한 특징을 동적 타이핑이라 하며, 자바스크립트를 동적 타입언어라 한다.

6.10.2 동적 타입 언어와 변수

  • 동적 타입 언어는 변수에 어떤 데이터 타입의 값이라도 자유롭게 할당할 수 있다.

    언제든지 변경될 수 있기 때문에 변화하는 변수 값을 추적하기 어려울 수 있다.

    뿐만 아니라 값의 변경에 의해 타입도 언제든지 변경될 수 있기 때문에

    값을 확인하기 전에는 타입을 확신한 수 없다.

  • 동적 타입 언어는 유연성은 높지만 신뢰성은 떨어진다.

변수 사용 시 주의사항

  • 변수는 필요한 경우에 한해 제한적으로 사용한다.

  • 변수값은 재할당에 의해 언제든지 변경될 수 있다.
    이로 인해, 동적타입 언어인 자바스크립트는 타입을 잘못 예측해
    오류가 발생할 가능성이 크다.

  • 변수의 개수가 많으면 많을수록 오류가 발생할 확률도 높아진다.
    따라서 변수의 무분별한 남발은 금물이며,
    필요한 만큼 최소한으로 유지하도록 주의해야 한다.

  • 변수의 유효범위(스코프)는 최대한 좁게 만들어 변수의 부작용을 억제해야 한다.
    변수의 범위가 넓을수록 오류가 발생할 확률이 높아진다.

  • 전역 변수는 최대한 사용하지 않도록 한다.
    전역변수는 의도치않게 값이 변경될 가능성이 높고
    다른 코드에 영향을 줄 가능성도 높다.

따라서 전역변수는 프로그램의 복잡성을 증가시키고
처리흐름을 추적하기 어렵게 만들고 ,
오류가 발생할 경우 오류의 원인을 특정하기 어렵게 만든다.

  • 변수보다는 상수를 사용해 값의 변경을 억제한다.

  • 변수 이름은 목적이나 의미를 파악할 수 있도록 네이밍한다.
    변수 뿐 아니라 모든 식별자는 존재 이유를 파악할 수 있는
    적절한 이름으로 지어야 한다.


😆 새로 알게됐거나 느낀 점 !

  • 숫자 타입은 실수만을 표현한다.
  • 심벌 타입이 무엇인지는 알았는데, 언제 사용하게 될까 ?!
  • 데이터 타입이 메모리 공간의 크기를 알기 위해 중요하다는 것을 알게되었다 !
    그래서 요즘 타입스크립트가 유독 많이 쓰이는 것일까 ?
    메모리 관리를 위해서 !?
profile
프론트엔드를 희망하고 있습니다.

0개의 댓글