본문 바로가기
자바스크립트

[JavaScript공부 - 6] Data types(데이터 타입)

by 곰돌찌 2019. 1. 24.

자바스크립트에서 변수는 어떤 데이터를 담고 있음. 하나의 변수는 어떤 상황에서는 String이 될 수 있고 또 다른 상황에서는 number가 될 수 있음.


1
2
let message = "hello";
message = 123456;
cs

이와 같이 한 변수가 String이나 number가 될 수 있는 특성을 가진 프로그래밍 언어를 "dynamically typed(동적 타입 지정)"이라고 함. 동적 타입 지정은 데이터 타입은 있지만 변수가 데이터 타입 중에 하나에 종속되지 않는 특성을 이야기 함.


자바스크립트에는 7가지 기본 데이터 타입이 있음. 이번 포스팅과 다음 포스팅에서 이에 대해 설명할 예정!



A number



1
2
let n = 123;
= 12.345;
cs


위와 같이 number 타입은 정수와 소수 모두를 가리킴. number 타입과 같은 경우에는 곱하기(*), 나누기(/), 더하기(+), 빼기(-) 등과 같은 연산자로 연산이 가능함. 


게다가 Infinity나 -Infinity, NaN과 같은 특이한 숫자 값도 number타입에 속함.


* Infinity

   Infinity는 수학에서 무한대(∞)를 나타냄. Inifinty는 어떠한 숫자 보다 더 큰 값을 가지고 있음.

   

   Infinity의 값은 0으로 나눌 때 나타남.

 

1
alert(1 / 0); //Infinity
cs

  또는 Inifinity라고 쓰면 그 값이 Inifinity로 될 수 있음.


1
alert(Infinity); //Infinity
cs


 * NaN

    NaN은 계산의 오류를 나타냄. NaN이 나타나는 경우는 수학 연산을 잘 못했거나, 값을 알 수 없는 경우에 나타남.


1
alert("not a number" / 2); //NaN
cs

  NaN은 연산 중에서 어떠한 값이 NaN일 경우에는 다른 연산이 뒤에 있어도 결국은 NaN이 결과 값으로 나타남

1
alert("not a number" / 2 + 5); //NaN
cs


   그래서 NaN이 수학 연산 안에 있다면, NaN이라는 값이 전체의 결과에 영향을 미칠 수 있음!



# 수학 연산이 안전한 자바스크립트!


자바스크립트에서 수학 연산을 하는 것은 안전함. 0으로 나누는 것이나 숫자가 숫자가 아닌 String을 숫자처럼 사용하는 것 등 어떤 것이든 가능함.


스크립트는 수학 연산에서 에러가 났을 때 치명적인 에러로 간주하고 프로그램이 죽는 것과 같은 일은 일어나지 않음. 최악의 상황이라고 해봤자 NaN을 출력하는 것 뿐임!


특수한 숫자 값은 공식적으로  number 타입에 속함. 물론 엄밀히 말하면 숫자는 아닐 수 있음.


number에 대해서는 다른 챕터에서 더 다루기로 하겠음..



A String(문자열)



자바스크립트에서 String은 따옴표로 둘러 싸여있어야 함.


1
2
3
let str = "Hello";
let str2 = 'Single quotes are ok too';
let phrase = `can embed ${str}`;
cs

위에 보는 바와 같이 자바스크립트에서 따옴표(인용구)는 세 가지 종류가 있음.

1. 쌍따옴표 : "Hello"
2. 홑따옴표 : 'Hello'
3. 백틱(Backticks) : `Hello`


쌍따옴표와 홑따옴표는 단순한 따옴표라 자바스크립트에서 두 개의 동작에 차이가 없음.


백틱 같은 경우에는 확장된 기능을 가지고 있는 따옴표임. 백틱은 ${....}에 변수를 넣으면 String에 해당 변수를 포함시켜 String 값을 만들 수 있음.


1
2
3
4
5
6
7
let name = "John";
 
//embed a variable
alert(`Hello, ${name}!`); //Hello, John!
 
//embed an expression
alert(`the result is ${1 + 2}`); //the result is 3
cs


${ ... } 안 표현의 결과가 String의 일부분이 됨. 백틱에서 ${ ... } 안에 어떤 것이든 넣을 수 있음! 위에서처럼  name과 같은 변수나 1 + 2와 같은 수학 표현이나 더 복잡한 표현식들을 넣을 수 있음.


이런게 가능한건 백틱만이니 주의할 것!!! 다른 따옴표들은 이런 기능을 할 수 없음!


1
alert("the result is ${1 + 2}"); // the result is ${1 + 2}
cs

이에 대한 자세한 이야기는 String을 더 자세히 다루는 포스팅에서 하겠음.

# JavaScript에는 character 타입이 없습니다!

어떤 언어에는 한 문자를 표현하는 "character" 타입이 있음. 예를 들어, C나 Java에는 char라는 데이터 타입이 존재함.

자바스크립트에는 이런 character타입이 없음. 즉, 자바스크립트에는 String타입만 있고 한 문자나 여러 단어의 조합들이 다 String타입에 포함되어 있음


A boolean (논리 타입)



boolean 타입은 true와 false 두 개의 값을 가짐.


boolean 타입은 일반적으로  yes와 no의 의미를 저장하는데 사용함. true는 yes, false는 no의 의미를 갖고 있음.


예를 들어서,.


1
2
let nameFieldChecked = true// yes, name field is checked
let ageFieldChecked = false// no, age field is not checked
cs

Boolean 값은 또 비교의 결과로도 사용됨!

1
2
3
let isGreater = 4 > 1;
 
alert(isGreater); //true
cs


"null" 값


null 값은 위에 소개된 타입들 어디에서 속하지 않음! 오직 null 값만 포함된 위의 타입들과는 분리된 타입으로 생각하면됨.


1
let age = null;
cs

자바스크립트에서 null은 "존재하지 않는 것을 지칭"하거나 다른 프로그래밍 언어와 같이 "null 포인터"를 의미함.
null은 "없음", "비어 있음", "알지 못하는 값"을 가리킴.
위의 코드에서 보는 바와 같이 age는 어떠한 이유에서 그 값을 알지 못하거나 그 값이 비어있음을 의미함.


"undefined" 값


null과 비슷하게 undefined도 어떠한 데이터 타입에도 속하지 않는 값을 의미함.


undefined의 의미는 "값이 아직 할당되지 않음"을 의미함.


만약 변수가 선언이 되었는데 그 변수에 값을 할당 하지 않는 경우에는 값이 undefined로 나타남.


1
2
let x;
alert(x); //undefined
cs

실제로 값을 undefined로 넣을 수도 있음.

1
2
3
let x = 123;
= undefined;
alert(x); //undefined
cs



객체(Object)과 심볼(Symbol)



object타입은 특별함. 다른 String이나 number와 같은 타입들은 "원시(primitive)" 타입이라고 하는데, 이는 원시 타입들은 하나의 값만 속해있기 때문임. 즉, 하나의 변수에 두 개 이상의 값을 할당받을 수 없음. 반면에, object타입은 데이터의 집합이나 더 복잡한 객체를 저장할 때 사용됨. 원시 타입을 더 포스팅한 뒤에 object에 대해 더 자세히 다룰 예정임.


symbol타입은 객체의 유일한(고유) 식별자를 생성할 때 사용됨. 



typeof 연산자



typeof 연산자는 인자(argument)의 타입을 리턴함. 다른 타입의 값을 다르게 처리하거나 현재의 변수가 어떤 타입인지 확인하고 싶을 때 사용됨. 이 typeof 연산자는 두 가지 형태의 구문이 있음


1. 연산자 : typeof x

2. 함수 : typeof(x)


즉, 위의 종류로 보다시피 괄호로 묶이거나 안묶고 사용이 가능함. 결국 결과는 동일함.


typeof x를 호출하면 string타입으로 해당 타입의 이름이 리턴됨.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
typeof undefined // "undefined"
 
typeof 0 // "number"
 
typeof true // "boolean"
 
typeof "foo" // "string"
 
typeof Symbol("id"// "symbol"
 
typeof Math // "object"  (1)
 
typeof null // "object"  (2)
 
typeof alert // "function"  (3)
cs

마지막 Math와 null과 alert를 typeof에 넣었을 때에 대해 더 알아보자.

1. Math는 수학 연산을 제공하는 기존에 내장되어있는 객체를 가리킴.

2. typeof null의 결과로 object타입이 나왔는데. 이는 공식적으로 typeof의 에러임. 물론 null은 object가 아님. null은 어떠한 타입에도 속하지 않는 undefined와 같이 독립된 타입으로 보고 있음. 따라서 자바스크립트의 에러임!

3. typeof alert의 결과로 function이 나왔는데, 이는 alert는 자바스크립트의 함수이기 때문!


댓글