6장 데이터 타입

    📂6장 데이터 타입⏳👩‍💻💻

    • 모든 값은 데이터 타입을 가짐.
    • ES6에선 7개의 데이터 타입을 제공, 원시 타입과 객체 타입으로 나뉨

    데이터 타입의 필요성

    1. 데이터 타입에 의한 메모리 공간의 확보와 참조
    • 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정됨.
    var score = 100

    💻 자바스크립트엔진 저장할때

    • 리터럴 100을 숫자 타입의 값으로 해석
    • 숫자 타입은 8바이트로 설명하기 때문에 8바이트의 메모리 공간 확보
    • 100을 2진수로 변환 후 저장.

    💻 자바스크립트엔진 참조할때

    • score 변수를 숫자 타입으로 인식
    • 숫자 타입은 8바이트 단위로 저장
    • score 변수를 참조하면 8바이트 단위로 메모리 공간에 저장된 값(2진수)을 숫자타입으로 읽음.
    1. 데이터 타입에 의한 값의 해석
    • 위 자바스크립트 엔진이 참조할때 메모리 공간에서 읽은 2진수를 해석한다.
    • 데이터 타입에 따라 숫자, 문자열 등등으로 2진수를 해석함.

    원시 타입

    숫자 타입

    • 숫자 타입의 배정밀도 64비트 부동소주점 형식을 따름.
    • var binary = 0b0100001; // 2진수 var octal = 0o101; // 8진수 var hex = 0x41; // 16진수` console.log(binary) // 65 console.log(octal) // 65 console.log(hex) // 65 console.log(binary == octal) // true console.log(octal == hex) // true
    • 모든 수는 실수로 처리하며, 정수 처리를 위한 타입이 별도로 존재하지 않음
    console.log(1 === 1.0) // true
    console.log(4 / 2) // 2
    console.log(3 / 2) // 1.5
    • cf) C나 자바는 정수나 실수를 구분하고 다양한 숫자타입이 있음

    숫자타입 - infinity, -infinity, NaN

    • infinity : 양의 무한대
    • -infinity : 음의 무한대
    • NaN : 산술 연산 불가, 대소문자 표기 주의

    문자열 타입

    • 0~16비트 유니코드 문자(UTF-16)
    • 변경 불가능한 값 => 11장 이어 설명 예정

    템플릿 리터럴

    • ES6부터 도입
    • 런타임에 일반 문자열로 변환되어 처리

    멀티라인 문자열

    백틱을 이용하여 줄바꿈을 허용하고 모든 공백도 적용함.

    const result = `축하합니다.
    당첨번호 : 5번 
    당첨금액 : 5천만원`
    console.log(result)  
    /\*  
    축하합니다.  
    당첨번호 : 5번  
    당첨금액 : 5천만원  
    \*/

    표현식 삽입

      • 연산자를 사용해 연결함.
    • 백틱 `과 ${}에 표현식을 감싸서 나타냄. 
    • const first = "choi" const name = "yujin" console.log("My name is "+first+ " " + name+".") // My name is choi yujin. console.log(My name is ${first} ${name}.)// My name is choi yujin.

    불리언 타입

    • 참은 true
    • 거짓은 false
      8장 조건문에서 이어 설명

    undefined 타입

    • 자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값
      => 만약 변수를 참조했을 때 undefined가 반환된다면, 참조한 변수가 선언 이후 값이 할당된 적이 없는 초기화 되지 않은 변수임.

    null 타입

    • 변수에 값이 없다는 것을 의도적으로 명시 (undefined X)
    • 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다라는 의미
    • 💻자바스크립트 엔진은 누구도 참조하지 않는 메모리 공간에 가비지 콜렉션을 수행
    • 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함.

    심벌 타입

    • 값이 외부에 노출되지 않으며 중복되지 않는 값
    • 객체의 유일한 프로퍼티 키를 만들기 위해 사용
    • Symbol 함수를 호출해 생성
      var Key = Symbol('key'); 
      console.log(typeOf key); // Symbol
      var obj = {}
      obj[key] = 'value'
      console.log(obj[key]); // value

    객체 타입

    • 자바스크립트를 이루고 있는 거의 모든 것이 객체.동적 타이핑
    • 정적 타입
      • C나 자바에서 쓰임
      • 변수 선언 시 데이터 타입을 미리 선언 => 명시적 선언
    • 동적 타입
      • 자바스크립트
      • 테이터 타입 값을 자유롭게 할당 가능
      • 값을 할당하는 시점에 변수의 타입이 동적으로 결정, 제할당에 의해 타입을 언제든지 변경 가능 => 동적 타이핑
      • 변수는 선언이 아닌 할당에 의해 데이터 타입이 결정 => 타입 추론

    동적 타이핑의 단점

    • 복잡한 프로그램에서 변화하는 변수 값을 추적하기 어려우.
    • 값을 확인하기 전까지 타입을 확신할 수 없음
    • 유연성이 높지만 신뢰성이 떨어짐.

    동적 타이핑 주의 사항

    1. 변수는 제한적으로 사용하자
    2. 변수의 유효 범위는 최대한 좁게 만들자.
    3. 전역 변수는 최대한 사용하지 않는다.
    4. 변수 보다는 상수를 이용해 값을 변경을 억제하자
    5. 변수 이름은 가독성있게 정하자.

     

     

    앞서 배운 데이터타입 검사가 궁금하다면 아래 글을 참고하세요

    2022.12.07 - [개발언어] - 데이터 타입 검사 ( 원시타입과 객체타입에 따른)

     

    데이터 타입 검사 ( 원시타입과 객체타입에 따른)

    typeOf primitive와 reference의 차이 자바스크립트는 동적인 타입임으로 타입 검사가 어렵다. 잘 찾아서 검사를 하자. primitive console.log(typeof '문자열') //string console.log(typeof true) //boolean console.log(typeof 123

    menduck.tistory.com


    [모던 자바스크립트 Deep Dive, ⌜이웅모 ⌟, 위키북스, 20210103]를 읽고 정리한 글입니다.

    '개발언어 > [JS] deep-dive 정리' 카테고리의 다른 글

    [9장] 단축 평가 - 논리 연산자를 사용한 단축 평가  (0) 2022.12.12
    [9장] 타입 변환  (0) 2022.12.12
    8장 제어문  (2) 2022.12.10
    5장 표현식과 문  (0) 2022.12.03
    4장 변수  (0) 2022.12.02

    댓글