자바스크립트를 배워보자 5일차 - 데이터 타입

0

Javascript

목록 보기
5/30

1. 데이터 타입

ES6는 7개의 데이터 타입을 제공한다.

데이터 타입은 크게 두 가지로 분류할 수 있는데 '원시 타입' 과 '객체 타입' 이다.

  • 원시 타입

    1. 숫자 타입 : 숫자, 정수, 실수를 구분없이 숫자 타입만이 존재
    2. 문자열 타입 : 문자열
    3. boolean 타입 : 참, 거짓
    4. undefined 타입 : var, let 키워드로 선언된 변수에 암묵적으로 할당되는 값
    5. null 타입 : 값이 없다는 것을 의도적으로 명시할 때 사용
    6. symbol 타입 : ex6에서 추가 된 타입
  • 객체 타입

    1. 객체 , 함수, 배열 등

2. 숫자 타입

재밌게도 js에서는 정수, 실수를 구분하지 않는다.
오직 숫자 타입만 있으며, 숫자 타입은 64비트 부동소수점 형식을 따른다.
즉, 정수도 실수와 같이 취급된다는 것이다.

또한, 10진수로만 계산을 하기 때문에 변수에 16진수 8진수 2진수를 넣어도 결과는 10진수로 나온다.

var hex = 0b1000001;
var octal = 0o101;
var hex = 0x41;

console.log(octal) //65
console.log(octal) //65
console.log(hex) //65

또한, 숫자 타입은 모두 실수로 계산되기 때문에 다음의 문장도 성립한다.

console.log(1 === 1.0) //true

추가적으로 숫자타입은 세 가지 특별한 값도 표현가능하다.

1. Infinity : 양의 무한대  
2. -Infinity : 음의 무한대  
3. NaN(not a number) : 산술 연산불가  

다음의 예시를 살펴보면 된다.

console.log(10 / 0) // Infinity
console.log(10 / -0) // -Infinity
console.log( 1 * 'String') // NaN

참고로 자바스크립트는 대소문자를 구분하므로 다음과 같이 NaN 값을 주면 에러가 발생한다.

var x = nan;

3. 문자열 타입

문자열 타입은 텍스트를 데이터로 나타내는 데 사용한다. 문자열은 0 개 이상의 16비트 유니코드 문자의 집합으로 전 세계 대부분의 문자를 표현 가능하다.

  • 문자열 표현 방법은 다음과 같다.
var string;
string = '문자열';
string = "문자열";
string = `문자열`; // 벡틱 이라부르며 키보드 숫자 1 왼쪽에 있는 표시이다.

c언어처럼 문자열이 char[] 배열로 이루어진 것이 아닌 java처럼 문자열 그 자체로 존재한다고 보면 된다.
즉 immutable하다는 것이다 (변경 불가능) 이는 추후에 다시 배워보도록 하자

  • 템플릿 리터럴 (벡틱 ` 을 사용한다.)
    ES6부터 템플릿 리터럴이라고 하는 새로운 문자열 표기법이 도입되었다.
    템플릿 리터럴은 런타임에 일반 문자열로 변환되어 사용된다. 이를 이용한 여러 사용법들이 존재하는데 다음과 같다.

    1. 멀티 라인 문자열
      일반적으로 문자열은 개행이 허용되지 않는다.
      따라서 일반 문자열에서 개행을 하려면 개행문자(\n)을 삽입해야 한다.

      var template = '<ul>\n<li><a href="#">Home</a></li>\n</ul>;'

      그러나 템플릿 리터럴 내에서는 개행문자를 사용하지 않고도 줄바꿈이 허용되며 모든 공백도 있는 그대로 적용된다.

      var template = 
      `<ul>
          <li><a href="#">Home</a></li>
      </ul>`;
    2. 표현식 삽입
      문자열 삽입이 가능한데, ${} 안에 식을 넣거나, 변수를 넣으면 코드가 작동한 다음 문자열로 치환되어 결과가 나오게 된다.

      var first = "undo";
      console.log(`this function is ${first} ${1 + 2}`)

4. boolean 타입

true, false 뿐이다.

5. undefined 타입

재밌게도 undefined는 타입도 값도 undefined이다.

이는 자바스크립트 엔진에서 선언되었지만 초기화되지 않은 변수에 자동으로 넣어주는 값이다. 즉, 사용자(개발자)가 직접 사용하거나, 넣는 값은 아니다.

var foo;
console.log(foo); // undefined

만약, 개발자가 직접 아무런 값도 없다는 것을 알려주고 싶다면 undefined가 아니라 null을 넣어주는 것이 좋다. undefined는 정의되지 않음, 즉 초기화되지 않았다는 것을 의미하지 값이 없다는 것을 의미하는 것은 아니다.

6. null 타입

null타입은 null값이 유일하다. 대소문자를 구별하므로 null은 Null, NULL과는 전혀다르다.
null 타입은 개발자가 의도적으로 명시(의도적 부재)를 할 때 사용한다. 변수에 null을 할당하는 것은 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다는 의미이다.
자바스크립트 엔진은 이전의 참조한 값에 대하여 가비지 콜렉션을 수행하여 제거할 것이다.

이 밖에도 값을 찾을 때 해당 값이 없다는 것을 의미할 때도 사용한다.

7. 심벌 타입

심벌은 es6에서 추가된 7번째 타입으로 변경 불가능한 immutable타입이다.
심벌 값은 다른 값과 중복되지 않는 유일무이한 값이다. 따라서 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용한다.

심벌은 오직 Symbol() 함수를 호출해 생성한다. 이 때 생성된 심벌 값은 외부에 노출되지 않으며 절대로 중복되지 않는 유일무이한 값이다.

var key = Symbol('key')
console.log(typeof key) // symbol

var obj = {}

obj[key] = 'value'
console.log(obj[key]) // value

8. 객체 타입

원시 값과 객체 타입에 대한 비교는 이후에 살펴보기로 하고 기본적인 객체에 대해서 알아보자

중요한 것은 자바스크립트는 객체 기반의 언어이며 자바스크립트를 이루고 있는 거의 모든 것들이 객체라는 것이다.

9. 동적 타입 언어

정적 타입 언어인 C, Java와는 달리, python , Js는 동적 타입 언어이다.
즉, 변수에 타입이 결정되어 있는 것이 아닌, 핟당되는 값에 의해 타입이 정해지며, 값이 타입을 갖게 되는 것이다. 변수는 값에 의해 타입이 결정되므로 '타입 추론'이라고도 한다.

0개의 댓글