Deep Dive 06장 데이터 타입

@hanminss·2021년 11월 11일
0

Deep Dive

목록 보기
3/16
post-thumbnail

모던 자바스크립트 deep dive

06장 데이터타입

데이터타입 : 값의 종류 js의 모든 값은 데이터 타입을 갖는다.
원시타입 : 숫자, 문자열, 불리언, undefined, null, 심벌 등
객체타입 : 객체, 함수, 배열 등

1. 숫자 타입

  • 정수, 실수, 음수 모두 숫자타입이다.
  • 숫자타입의 값은 배정밀도 64비트 부동소수점 형식을 따른다. 따라서 모든 수를 실수로 표현한다. 정수만을 표현하는 타입은 없다.
console.log(2 === 2.0); //true
  • 2진수, 8진수, 16진수도 모두 숫자 타입.

  • 엔진은 저장은 모두 2진수로, 참조하면 모두 10진수로 해석해버린다.

  • 무한대, 음의 무한대, NaN(not a number) 의 특별한 세 값도 표현한다.

2. 문자열 타입

  • 문자열은 quote, double quotes, backtick(es6)으로 텍스트를 감싸고 가장 일반적인 표기법은 quote('') 이다.
  • 자바스크립트의 문자열은 변경 불가능한 값 이다.(?) -- 11장에 배움

3. 템플릿 리터럴

  • 템플릿 리터럴은 es6부터 도입된 새로운 문자열 표기법
  • 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 제공한다.
  • 템플릿 리터럴은 backtick(``)을 사용한다.
  • 멀티라인 문자열
    • 템플릿 리터럴 내에서는 줄바꿈이 허용되면 모든 공백이 적용된다.
    • es6 전에는 멀티라인을 표현하려면 escape sequence 중 \n을 사용해야 했다.
  • 표현식 삽입
    • 이전에는 문자열을 +로 연결할 수 있었다.
    • es6 이후 템플릿 리터럴로 쉽게 할 수 있다.
var a = '안녕';
var b = '하세요';
console.log('여러분 '+a+b); // 여러분 안녕하세요
console.log(`여러분 ${a+b}`) // 여러분 안녕하세요

4. 불리언 타입

  • 참과 거짓을 나타내는 true, false 값

5. undefined 타입

  • undefined 타입은 undefined 값이 유일하다.
  • var로 선언한 변수는 호이스팅에 의해 undefined로 초기화한다.
  • undefined를 개발자가 의도적으로 할당하는 것은 본래 취지와 어긋하고 혼란을 줄수 있기에 하지 않는게 좋다.

6. null 타입

  • null 타입의 값은 null 값이 유일하다.
  • 변수에 값이 없다는 것을 의도적으로 명시할 때 사용한다.
  • 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더이상 참조하지 않겠다는 의미이다.
  • 엔진은 이 메모리의 가비지 컬렉션을 수행한다.

7. 심벌 타입

  • es6에서 추가된 7번째 타입이다.
  • 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티(객체 안에 들어있는 키와 벨류의 집합) 키를 만들기 위해 사용한다.
  • 아직 잘 모르겠다 33장에서 배워야겠다.

8. 데이터 타입의 필요성

  • 데이터 타입에 의한 메모리 공간의 확보와 참조
    • 데이터 타입에 따라 확보해야할 메모리 공간의 크기가 결정되기 때문에 메모리를 효율적을 사용하기 위하여 데이터 타입이 큰 역활을 한다.
    • 자바스크립트는 모든 숫자타입을 배정밀도 64비트 부동 소수점으로 표현하기 때문에 8바이트로 숫자를 표현한다.
    • 따라서 숫자타입의 크기는 8바이트
    • 엔진은 타입을 읽어 무슨타입인지 파악하고 해당 주소의 메모리에서 타입 크기만큼의 단위로 메모리를 읽는다.
    • 읽어드린 메모리를 어떤 타입으로 해석할지를 결정하기 위해 데이터 타입이 사용된다.

9. 동적 타이핑

  • c, java 같은 정적타입 언어는 변수를 선언할 때, 데이터 타입을 선언해야 한다. 이를 명시적 타입 선언 이라고 한다.

  • 자바스크립트는 동적 타입 언어이다. 따라서 변수를 선언할 때 var, let, const키워드를 사용해 선언만 할 뿐이다.

  • 정적 타입 언어는 변수 선언 후 타입을 바꿀 수 없지만 Js는 변수에 할당되는 값에 따라서 타입도 계속 변화한다.

  • 자바스크립트의 변수는 선언이 아닌 할당에 의해 데이터 타입이 결정된다.(type inference)

  • 재할당에 의해 변수의 타입이 동적으로 변화한다. 이러한 특징을 동적 타이핑이라 한다.

  • 타입은 변수가 가지는 것이 아닌 값이 가지는 것이다.

  • 동적 타입언어의 장점은 편리하다는 것이다. 하지만 단점도 존재한다.

  • 복잡한 프로그램에서는 변화하는 변수의 값을 추적하기 어려울 수 있다.

  • 값을 직접 확인하기 전에는 타입임을 확신할 수 없다.

  • 개발자의 의도와 다르게 암묵적으로 타입이 변경될 수 있다.

  • 동적 타입언어의 장단점의 결론: 유연성은 높아지지만 신뢰성이 떨어진다.

  • 동적 타입 변수 사용시 주의점

    • 변수는 꼭 필요한곳에만 사용하기
    • 스코프를 좁게 만들기(13장)
    • 전역변수 사용 자제하기
    • 변수보다는 상수 사용하기
    • 네이밍을 규칙에 맞게 한다.

0개의 댓글