Skip to content

2. 타입(Type)


1. 키워드

  • 원시 타입(Primitive Type)과 객체 타입(Object Type)
  • 묵시적 타입 변환(Implicit Type Conversion)과 명시적 타입 변환(Explicit Type Conversion)
  • 변수(Variable)


2. 기본 타입

  • 타입이란 프로그램에서 다룰 수 있는 값의 종류를 의미한다.
  • 자바스크립트에서는 여러 가지 형태의 타입을 미리 정의하여 제공하고 있으며, 이것을 기본 타입이라고 한다.
  • 자바스크립트의 기본 타입은 크게 원시 타입과 객체 타입으로 구분할 수 있다.


  • 원시 타입은 다음과 같다.


1] 숫자(Number)

2] 문자열(String)

3] 불리언(Boolean)

4] 심볼(Symbol): ECMAScript 6부터 제공됨

5] undefined


  • 객체 타입은 다음과 같다.


6] 객체(Object)


var num = 10; // 숫자
var myName = "홍길동"; // 문자열
var str; // undefined


1) 숫자

  • 자바스크립트는 다른 언어와는 달리 정수와 실수를 따로 구분하지 않고, 모든 수를 실수 하나로만 표현한다.
  • 또한, 매우 큰 수나 매우 작은 수를 표현할 경우에는 e 표기법을 사용할 수 있다.


var firstNum = 10; // 소수점을 사용하지 않은 표현
var secondNum = 10.0; // 소수점을 사용한 표현
var thirdNum = 10e6; // 10000000
var fourthNum = 10e-6; // 0.00001


2) 문자열

  • 자바스크립트에서 문자열은 ""(큰따옴표)나 ''(작은따옴표)로 둘러싸인 문자의 집합을 의미한다.
  • ""''로 둘러싸인 문자열에만 포함될 수 있으며, ''""로 둘러싸인 문자열에만 포함될 수 있다.


var firstStr = "이것도 문자열입니다."; // 큰따옴표를 사용한 문자열
var secondStr = "이것도 문자열입니다."; // 작은따옴표를 사용한 문자열
// 작은따옴표는 큰따옴표로 둘러싸인 문자열에만 포함될 수 있음.
var thirdStr = "나의 이름은 '홍길동'이야.";
// 큰따옴표는 작은따옴표로 둘러싸인 문자열에만 포함될 수 있음.
var fourthStr = '나의 이름은 "홍길동"이야.';


  • 자바스크립트에서 숫자와 문자열을 더할 수도 있다.
  • 이럴 경우에 자바스크립트는 숫자를 문자열로 자동 변환하여, 두 문자열을 연결하는 연산을 수행한다.


var num = 10;
var str = "JavaScript";
document.getElementById("result").innerHTML = num + str;
// 10JavaScript


3) 불리언

  • 불리언 값은 참과 거짓을 표현한다.


  • 자바스크립트에서 불리언 값은 예약어인 truefalse를 사용하여 나타낼 수 있다.


var firstNum = 10;
var secondNum = 11;
document.getElementById("result").innerHTML = firstNum == secondNum;
// false


4) 심볼

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


var sym = Symbol("javascript"); // symbol 타입
var symObj = Object(sym); // object 타입


5) typeof 연산자

  • typeof 연산자는 피연산자의 타입을 반환하는 피연산자가 단 하나뿐인 연산자이다.


typeof 10; // number 타입
typeof "문자열"; // string 타입
typeof true; // boolean 타입
typeof undefined; // undefined 타입
typeof null; // object 타입


6) nullundefined

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


var num; // 초기화하지 않았으므로 undefined 값을 반환함.
var str = null; // object 타입의 null 값
typeof secondNum; // 정의되지 않은 변수에 접근하면 undefined 값을 반환함.


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


null == undefined; // true
null === undefined; // false


7) 객체

  • 자바스크립트의 기본 타입은 객체이다.
  • 객체란 실생활에서 우리가 인식할 수 있는 사물로 이해할 수 있다.
  • 객체는 여러 프로퍼티나 메서드를 같은 이름으로 묶어놓은 일종의 집합체이다.


var dog = { name: "해피", age: 3 }; // 객체의 생성
// 객체의 프로퍼티 참조
document.getElementById("result").innerHTML =
  "강아지의 이름은 " + dog.name + "이고, 나이는 " + dog.age + "살 입니다.";


3. 타입 변환(Type Conversion)

  • 자바스크립트는 타입 검사가 매우 유연한 언어이다.
  • 자바스크립트의 변수는 타입이 정해져 있지 않으며, 같은 변수에 다른 타입의 값을 다시 대입할 수도 있다.


var num = 20; // Number 타입의 20
num = "이십"; // String 타입의 "이십"
// 한 변수에 여러 번 대입할 수는 있지만, 변수의 재선언은 할 수 없음.
var num;


1) 묵시적 타입 변환

  • 자바스크립트는 특정 타입의 값을 기대하는 곳에 다른 타입의 값이 오면, 자동으로 타입을 변환하여 사용한다.
  • 즉, 문자열 값이 오길 기대하는 곳에 숫자가 오더라도 자바스크립트는 알아서 숫자를 문자열로 변환하여 사용한다.


10 + "문자열"; // 문자열 연결을 위해 숫자 10이 문자열로 변환됨.
"3" * "5"; // 곱셈 연산을 위해 두 문자열이 모두 숫자로 변환됨.
1 - "문자열"; // NaN


  • 위의 세 번째 예제에서 뺄셈 연산을 위해 문자열이 숫자로 변환되어야 하나, 해당 문자열은 두 번째 예제의 문자열과는 달리 숫자로 변환될 수 없는 문자열이다.
  • 따라서 의미에 맞게 자동으로 타입을 변환할 수 없으므로, 자바스크립트는 NaN 값을 반환한다.


Note

  • NaN은 Not a Number의 축약형으로, 정의되지 않은 값이나 표현할 수 없는 값이라는 의미를 가진다.
  • 이러한 NaNNumber 타입의 값으로 00으로 나누거나, 숫자로 변환될 수 없는 피연산자로 산술 연산을 시도하는 경우에 반환되는 읽기 전용 값이다.


2) 명시적 타입 변환

  • 자바스크립트에서는 묵시적 타입 변환을 많이 사용하지만, 명시적으로 타입을 변환할 방법도 제공한다.
  • 명시적 타입 변환을 위해 자바스크립트가 제공하는 전역 함수는 다음과 같다.


1] Number()

2] String()

3] Boolean()

4] Object()

5] parseInt()

6] parseFloat()


Number("10"); // 숫자 10
String(true); // 문자열 "true"
Boolean(0); // 불리언 false
Object(3); // new Number(3)와 동일한 결과로 숫자 3


(1) 숫자를 문자열로 변환

  • 숫자를 문자열로 변환하는 가장 간단한 방법은 String() 함수를 사용하는 것이다.
  • 또한, nullundefined를 제외한 모든 타입의 값이 가지고 있는 toString() 메서드를 사용할 수도 있다.


  • 숫자(Number) 객체는 숫자를 문자열로 변환하는 다음과 같은 메서드를 별도로 제공한다.


메서드 설명
toExponential() 정수 부분은 1자리, 소수 부분은 입력받은 수만큼 e 표기법을 사용하여 숫자를 문자열로 변환함.
toFixed() 소수 부분을 입력받은 수만큼 사용하여 숫자를 문자열로 변환함.
toPrecision() 입력받은 수만큼 유효 자릿수를 사용하여 숫자를 문자열로 변환함.


  • 메서드란 객체의 프로퍼티 값으로 함수를 가지는 프로퍼티를 의미한다.


(2) 불리언 값을 문자열로 변환

  • 불리언 값을 문자열로 변환하는 방법에는 String() 함수와 toString() 메서드를 사용하는 방법이 있다.


String(true); // 문자열 "true"
false.toString(); // 문자열 "false"


(3) 날짜를 문자열이나 숫자로 변환

  • 날짜를 문자열로 변환하는 방법에는 String() 함수와 toString() 메서드를 사용하는 방법이 있다.
  • 자바스크립트에서 날짜(Date) 객체는 문자열과 숫자로 모두 변환할 수 있는 유일한 타입이다.


  • 날짜(Date) 객체는 날짜를 숫자로 변환하는 다음과 같은 메서드를 별도로 제공한다.


메서드 설명
getDate() 날짜 중 일자를 숫자로 반환함. (1 ~ 31)
getDay() 날짜 중 요일을 숫자로 반환함. (일요일: 0 ~ 토요일: 6)
getFullYear() 날짜 중 연도를 4자리 숫자로 반환함. (yyyy년)
getMonth() 날짜 중 월을 숫자로 반환함. (1월: 0 ~ 12월: 11)
getTime() 1970년 1월 1일부터 현재까지의 시간을 밀리초(millisecond) 단위의 숫자로 반환함.
getHours() 시간 중 시를 숫자로 반환함. (0 ~ 23)
getMinutes() 시간 중 분을 숫자로 반환함. (0 ~ 59)
getSeconds() 시간 중 초를 숫자로 반환함. (0 ~ 59)
getMilliseconds() 시간 중 초를 밀리초(millisecond) 단위의 숫자로 반환함. (0 ~ 999)


String(Date()); // Mon May 16 2016 19:35:25 GMT+0900
Date().toString(); // Mon May 16 2016 19:35:25 GMT+0900
var date = new Date(); // Date 객체 생성
date.getFullYear(); // 2016
date.getTime(); // 1463394925632 -> 1970년 1월 1일부터 현재까지의 시간을 밀리초 단위의 숫자로 반환함.


(4) 문자열을 숫자로 변환

  • 문자열을 숫자로 변환하는 가장 간단한 방법은 Number() 함수를 사용하는 것이다.


  • 자바스크립트는 문자열을 숫자로 변환해 주는 두 개의 전역 함수를 별도로 제공한다.


함수 설명
parseInt() 문자열을 파싱하여 특정 진법의 정수를 반환함.
parseFloat() 문자열을 파싱하여 부동 소수점 수를 반환함.


(5) 불리언 값을 숫자로 변환

  • 불리언 값을 숫자로 변환하는 방법에는 Number() 함수를 방법이 있다.


Number(true); // 숫자 1
Number(false); // 숫자 0


4. 변수

1) 변수의 선언과 초기화

  • 변수란 데이터를 저장할 수 있는 메모리 공간을 의미하며, 그 값이 변경될 수 있다.
  • 자바스크립트에서는 var 키워드를 사용하여 변수를 선언한다.


  • 자바스크립트에서는 선언되지 않은 변수를 사용하려고 하거나 접근하려고 하면 오류가 발생한다.
  • 단, 선언되지 않은 변수를 초기화할 경우에는 자동으로 선언을 먼저 한 후 초기화를 진행한다.


var month; // month라는 이름의 변수 선언
date = 25; // date라는 이름의 변수를 묵시적으로 선언


  • 선언된 변수는 나중에 초기화할 수도 있고, 선언과 동시에 초기화할 수도 있다.


var month; // 변수의 선언
var date = 25; // 변수의 선언과 동시에 초기화
month = 12; // 변수의 초기화


  • ,(쉼표) 연산자를 이용하여 여러 변수를 동시에 선언하거나 초기화할 수도 있다.


var month, date; // 여러 변수를 한 번에 선언
var hours = 7,
  minutes = 15; // 여러 변수를 선언과 동시에 초기화
(month = 10), (date = 5); // 여러 변수를 한 번에 초기화


2) 변수의 타입과 초깃값

  • 자바스크립트의 변수는 타입이 정해져 있지 않으며, 같은 변수에 다른 타입의 값을 다시 대입할 수도 있다.
  • 이렇게 한 변수에 다른 타입의 값을 여러 번 대입할 수는 있지만, 한 번 선언된 변수를 재선언할 수는 없다.


var num = 10; // 변수의 선언과 함께 초기화
num = [10, 20, 30]; // 배열 대입
var num; // 이 재선언문은 무시됨.


  • 배열(Array)이란 여러 값들로 이루어진 하나의 집합을 의미한다.


  • 자바스크립트에서 선언만 되고 초기화하지 않은 변수는 undefined 값을 가진다.


var num; //undefined
num = 10; // 10


3) 변수의 이름

  • 자바스크립트에서 변수는 이름을 가지고 식별하므로, 변수의 이름은 식별자(Identifier)이다.
  • 변수의 이름은 영문자(대소문자), 숫자, _(언더스코어) 또는 $(달러)로만 구성된다.
  • 또한, 숫자와의 구분을 빠르게 하려고 숫자로는 시작할 수 없다.
  • 이러한 변수의 이름은 대소문자를 구분하며, 자바스크립트에서 예약된 키워드는 이름으로 사용할 수 없다.

References