본문 바로가기

Javascript

값 - 타입 시스템, 원시 값, 참조 타입, undefined & null, 타입 변환_Javascript

타입 시스템

 

타입(data type)이란 프로그램에서 다룰 수 있는 값의 종류를 의미

자바스크립트에서는 여러 가지 형태의 타입을 미리 정의하여 제공하고 있으며, 이것을 기본 타입이라고 한다.

 

자바스크립트 언어는 동적 언어다. 그리고 느슨한 언어이기에 프로그래밍이 실행되는 과정에서 순간에 파악되는 부분들이 많다. 예를 들어 사용자가 문자 언어로 사용을 했는데 컴퓨터는 문자 언어를 숫자 언어로 실행되거나 사용자가 숫자 언어로 사용을 했는데 문자 언어로 실행되는 경우를 말한다. 그래서 자바스크립트에서는 타입을 잘 써야 한다.

 

자바스크립트는 두 가지로 타입이 나뉘는데 하나는 원시(Primitive) 값이고 또 다른 하나는 참조(객체 Reference) 타입이다.

 

원시값 (primitive type) 은 기본 데이터 유형으로 undefined, Boolean, Number, String, Symbol이 있다.

 

undefined

 

 undefined란 null과는 달리 '타입'이 정해지지 않은 것을 의미하고 자바스크립트에서 undefined는 초기화되지 않은 변수나 존재하지 않는 값에 접근할 때 반환한다.

 

불리언(boolean)

 

참(true)과 거짓(false)을 표현, 자바스크립트에서 불리언 값은 예약어인 true와 false를 사용하여 나타낸다.

 

숫자(number)

 

자바스크립트는 다른 언어와는 달리 정수와 실수를 따로 구분하지 않고, 모든 수를 실수 하나로만 표현한다.

 

문자열(string)

 

큰따옴표("")나 작은따옴표('')로 감싸 만든 문자 집합을 의미한다. 큰따옴표는 작은따옴표로 둘러싸인 문자열에 포함될 수 있고 또한 작은 따옴표는 큰 따옴표로 둘러싸인 문자열에 포함될 수 있다.

 

심볼(symbol)

 

 ECMAScript 6부터 새롭게 추가된 타입으로 유일하고 변경할 수 없는 타입으로, 객체의 프로퍼티를 위한 식별자로 사용할 수 있다.

 

참조(객체 Reference) 타입

 

객체를 생성하는 방법에는 리터럴 표기(literal notation)를 이용한 방법, 생성자 함수(constructor function)를 이용한 방법, Object.create() 메소드를 이용한 방법이 있다.

 

리터럴 표기를 이용한 객체 생성

 

var 객체이름 = {

    프로퍼티1이름 : 프로퍼티1의값,

    프로퍼티2이름 : 프로퍼티2의값,

    ...

};

 

각 각의 프로퍼티는 이름과 값으로 콜론(;)으로 연결하고, 쉼표(,)를 사용해서 다른 프로퍼티와 구분한다.

 

생성자를 이용한 객체의 생성

 

new 연산자를 사용하여 객체를 생성하고 초기화할 수 있다. 이때 사용되는 메소드를 생성자(constructor)라고 하며, 이 메소드는 새롭게 생성되는 객체를 초기화하는 역할을 하고  원시 타입을 위한 생성자를 미리 정의하여 제공한다.

 

Object.create() 메소드를 이용한 객체의 생성

 

Object.create() 메소드를 이용하여 객체를 생성할 수도 있다. 지정된 프로토타입(prototype) 객체와 프로퍼티를 가지고 새로운 객체를 만들어 주며 이 메소드를 이용하면 사용자가 프로토타입 객체를 직접 명시할 수 있으므로, 상당히 유용하게 사용된다. 

 

undefined & null

 

자바스크립트에서 null이란 object 타입이며, 아직 '값'이 정해지지 않은 것을 의미하고 null과는 달리 '타입'이 정해지지 않은 것을 의미한다. 따라서 자바스크립트에서 undefined는 초기화되지 않은 변수나 존재하지 않는 값에 접근할 때 반환된다.

 

주의!!

null과 undefined는 동등 연산자(==)와 일치 연산자(===)로 비교할 때 그 결괏값이 다르므로 주의
null과 undefined는 타입을 제외하면 같은 의미지만, 타입이 다르므로 일치하지 않다.

 

묵시적 타입 변환(implicit type conversion)

 

특정 타입의 값을 기대하는 곳에 다른 타입의 값이 오면, 자동으로 타입을 변환하여 사용한다. 즉, 문자열 값에 숫자가 오더라도 숫자를 문자열로 변환하여 사용한다.

 

명시적 타입 변환(explicit type conversion)

 

묵시적 타입 변환을 많이 사용하지만, 명시적으로 타입을 변환할 방법도 제공한다. 명시적 타입 변환을 위해 자바스크립트가 제공하는 전역 함수에는 Number(), String(), Boolean(), Object(), parseInt(), parseFloat()가 있다.

 

* 참고 : 제로베이스, " 객체 타입", TCP, 2021.12.19 접속, http://www.tcpschool.com/javascript/js_datatype_typeConversion