06. 데이터 타입

윤호성·2022년 4월 4일

2022.04.04.월요일

06. 데이터 타입

데이터 타입은 7개의 데이터 타입이 있다.
원시타입 : 숫자, 문자열, 불리언, undefined, null, 심벌
객체 타입

6.1 숫자 타입

  1. 자바 스크립트는 하나의 숫자 타입만 존재한다.
  2. 참조하면 10진수로만 해석된다.
  3. 특수한 값으로는 Infinity, -Infinity, NaN(Not-a-Number) 3개 있다.

6.2 문자열 타입

  1. '',"", ''(백틱)으로 텍스트를 감싸 사용할 수 있다.
  2. 변경 불가능한 값이다.

6.3 탬플릿 리터럴

템플릿 리터럴이란? 새로운 문자열 표기법으로 멀티라인 문자열, 표현식 삽입, 태그드 템플릿 등 편리한 문자열 처리 기능을 제공한다.

  1. 멀티라인 문자열
    일반적인 문자열은 줄바꿈을 인정하지 않는다. 하지만 멀티라인 문자열에 서는 줄바꿈을 인정하여 다음과 같이 사용할 수 있다.

    var template = `<ul>
    		<li><a href="#">Home</a></li>
    	</ul>`;
       
    console.log(template);
  2. 표현식 삽입
    템플릿 리터럴 내에 표현식 삽입을 할 수 있다.

    var first = 'Ung-mo'; 
    var last = 'Lee'; 
    
    console.log(`My name is `+first + ' ' + last + '.'); 
  3. 태그드 템플릿
    ${}를 사용함으로써 가독성을 더 높인다. 이때 표현식의 평가 결과가 문자 열이 아니더라도 문자열로 타입이 강제로 변환되어 삽입된다.

    var first = 'Ung-mo'; 
    var last = 'Lee'; 
    
    console.log(`My name is ${first} ${last}.`);   

6.4 불리언 타입

참, 거짓을 나타내는 논리 값.

6.5 undefined 타입

  1. undefined 타입의 값은 undefined가 유일하다.
  2. var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화된다.
  3. 개발자가 의도적으로 넣는 값이 아니기에 undefined 대신에 null로 초기화하는 것을 추천한다.

6.6 null 타입

  1. null 타입의 값은 null이 유일하다.
  2. 대소문자를 구분하기에 null, Null, NULL 다 다른 것으로 인식한다.
  3. 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미가 있다.
  4. null 이후 해당 메모리 공간은 가비지 콜렉션에 의해 사라진다.
  5. 함수가 유효한 값을 반환할 수 없는 경우에 null을 반환하기도 한다.

6.7 심벌 타입

  1. ES6에 추가된 타입으로 변경 불가능한 원시 타입의 값이다.
  2. 다른 값과 중복되지 않는 유일무이한 값이다.

6.8 객체 타입

자바스크립트를 이루고 있는 거의 모든 것들이 객체이다.

6.9 데이터 타입의 필요성

  1. 데이터 타입에 의한 메모리 공간의 확보와 참조
  2. 데이터 타입에 의한 값의 해석

6.10 동적 타이핑

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

데이터의 선언 시에 타입이 결정되면 정적 타입언어, 데이터의 할당 시에 타입이 결정되면 동적 타입언어이다.

  1. 정적 타입 언어 : C, C++, Java, Kotlin, Go etc...
  2. 동적 타입 언어 : JavaScript, Python, PHP, Ruby etc...

6.10.2   동적 타입 언어와 변수

※ 동적 타입 언어는 유연성은 높지만 신뢰성이 떨어진다. 이 신뢰성을 유지하기 위한 주의사항은 다음과 같다.

  1. 변수는 꼭 필요한 경에 한해 제한적으로 사용한다.
  2. 변수의 스코프는 최대한 좁게 만든다.
  3. 전역 변수는 최대한 사용하지 않도록 한다.
  4. 상수를 사용해 값의 변경을 억제한다.
  5. 네이밍을 통해 존재 이유를 쉽게 파악하게 한다.

※ 가독성이 높은 코드가 좋은 코드다.

profile
프론트엔드 개발자

0개의 댓글