데이터 타입과 값

2014. 10. 1. 18:02 나홀로스터디/JS 완벽가이드


3장 데이터 타입과 값

이 포스팅은 "자바스크립트 완벽 가이드(인사이트, 송인철,이동기,이유원,황인석 옮김)"에서 발췌 요약한 것입니다.
 
3.1 숫자
3.2 문자열
3.3 불리언 값
3.4 함수
3.5 객체
3.6 배열
3.7 null
3.8 undefined
3.9 Date 객체
3.10 정규표현식
3.11 Error 객체
3.12 타입변환요약
3.13 기본데이터 타입 래퍼 객체
3.14 객체에서 기본 타입으로 변환
3.15 값에 의한 vs. 참조에 의한


프로그램 언어로 표현할 수 있고 조작할수 있는 값의 종류를 데이터 타입이라고 하며 프로그램 언어의 기본은 그 언어가 지원하는 데이터 타입의 종류다.
자바스크립트는 세 가지 기본 데이터 타입인 숫자(number), 문자열(string), 불리언(boolean)과 단일값을 갖는 단순데이터 타입인 null과 undefined 가 있고 객체(object)라고 불리는 복합 데이터 타입을 지원한다.

자바스크립트에서 객체는 이름 붙은 값들의 순서 없는 모임을 나타내거나 번호가 붙은 순서 있는 값들의 모임인 배열을 나타내기도 하는데 객체와 배열은 근본적으로는 동일한 데이터 타입이지만 다른 방식으로 사용된다.

자바스크립트는 함수(function) 라고 불리는 특별한 객체를 지원하는데 함수는 특정 동작을 수행하기 위해 호출될
수 있다.



3.1 숫자
자바스크립트는 정수 값과 실수 값을 구별하지 않고 모든 숫자가 64비트 실수 형식을 사용하여 표현한다.
숫자 리터럴 앞에 마이너스(-)를 붙이면 음수를 만들수 있지만 (-)가 붙은 단항 부정 연산자는 숫자 리터럴 문법에 속하지 않는다. 


3.1.1 정수 리터럴
자바스크립트에서 10 진수 정수는 숫자 시퀀스(연속된) 형태로 작성된다.

3.1.2 16진수와 8진수
16진수 리터럴은 '0x''0X' 로 시작하고 16진수 숫자들을 입력한다.(0~9, 10~15)
8진수 리터럴은 숫자 0으로 시작되고 0부터 7까지 숫자 시퀀스가 따르는 형태다

3.1.3 부동소수점 리터럴
지수 표기법을 사용하여 부동소수점 리터럴을 표현할 수 있다.

3.1.4 숫자 조작
자바스크립트 언어에서는 기본 산술 연산자(+,-,*,/) 외에 코어 자바스크립트에서 제공하는 수의 수리 함수를 사용해 복잡한 연산을 수행할수 있고, 함수의 사용 편의를 위해 모두 Math라는 단일 객체의 프로퍼티도 들어있다.

   sine_of_x = Math.sin(x); 


3.1.5 숫자 변환
자바스크립트는 숫자를 문자열 형식으로 변환하거나 문자열을 숫자로 변환할 수 있다.

3.1.6 특수한 숫자 값
자바스크립트에서는 부동 소수점 값으로 표현 가능한 가장 큰 수보다 더 큰 값인 무한대를 나타내는 Infinity가 있다.
수리 연산이 정의되지 않은 결과를 산출하거나 에러를 발생시킬 경우 특수한 값인 NaN이 출력 되는데 어떤 숫자와도 동일하지 않는 값을 비교하기 위해 isNaN() 이라는 특별한 함수를 사용한다.




3.2  문자열(string)
문자열은 Unicode 문자나 숫자, 문장부호들의 시퀀스로 텍스트를 표현하는 자바스크립트 데이터 타입으로 작은 따옴표(' ') 혹은 큰 따옴표 쌍(" ")으로 문자열 리터럴을 포함시킬수 있다.

3.2.1 문자열 리터럴

문자열 리터럴은 한줄을 넘지 말아야 하고 줄바꿈 문자를 포함시키고 싶아면 문자열 리터럴 내에 Unicode를 사용할수 있다.

3.2.2 문자열 리터럴 내 이스케이프 시퀀스
역슬래시(\) 문자는 뒤에 나오는 문자와 결합될 경우 생략부호를 나타낼수 있다. 

   'You\'re right, it can\'t be a quote' 

3.2.3
문자열 조작
자바스크립트의 기본적인 조작은 문자열을 이어 붙이는 것이고 문자열의 길이를 알고 싶다면 length 프로퍼티를 사용하면 된다.

3.2.4 숫자를 문자열로 변환하기
숫자는 필요할 때 문자열로 자동으로 변환된다.
숫자를 문자열로 변환하려면 String() 함수를 사용하고 숫자를 문자열로 변환하는 다른 기법으로 toString() 메서드를 사용할 수 있다.

var string_value = String(number);
string_value = number.toString();


3.2.5 문자열을 숫자로 변환하기
문자열을 숫자로 명시적으로 변환하려면 Number() 생성자를 함수처럼 호출하는 것으로 10진수만 변환할수 있고 정수만 변환하는 parseInt()와 정수와 부동소수점 숫자를 모두 변환하는 parseFloat()가 있다.  지정된 문자열을 숫자로 변환하지 못할 경우 NaN을 반환한다.




3.3 불리언 값

불리언 값은 무엇이 참인지 거짓인지를 표현하는 것으로 truefalse 두 개의 값만을 가질 수 있다.

3.3.1 불리언 타입 변환
불리언 값이 숫자 문맥에서 사용되면 true 는 숫자 1로 false는 숫자 0으로 변환되고 문자 문맥에서 사용되면 "true" 또는 "false"로 변환된다.
명시적 타입 변환을 하는 방법은 Boolean() 함수를 사용하는 것과 불리언 NOT 연산자를 두번 사용하는 방법이 있다.

var x_as_boolean = Boolean(x);
var x_as_boolean = !!x; 

 

 


3.4 함수(function)

함수는 자바스크립트 프로그램에 정의되어 있거나 자바스크립트 구현에 미리 정의되어 있는 실행가능한 코드로 계산 대상인 값들을 지정하는 전달인자(arguments)나 매개변수(parameter) 를 넘겨 받을수 있으며 계산 결과 값을 반환할 수도 있다.

function square(x){ // 함수 이름은 square 이다. 전달인자 x 하나를 받는다.
  return x * x; // 이 함수는 전달인자를 제곱한 값을 반환한다.
}

함수는 단지 정의하고 호출할수 있는 것이지 데이터 타입은 아니다. 그러나 자바스크립트에서 함수는 숫자나 문자열처럼 데이터 값이므로 다른 값처럼 객체 프로퍼티에 할당될 수 있다.
함수가 어떤 객체의 프로퍼티로 할당되면 그 객체의 메서드라고 부른다.

3.4.1 함수 리터럴
자바스크립트는 함수를 정의하는 함수 리터럴 function 키워드, 함수이름(생략가능), 괄호로 둘러쌓인 함수 전달인자 목록, 중괄호로 구성된다.

함수 정의와 함수 리터럴 간에 큰 차이는 함수 리터럴은 자바스크립트 표현식 내에 나타날 수 있다는 점이다.

function square(x) { return x * x; }
var square = funcion(x) { return x * x;}   




3.5 객체(object)
객체는 이름붙은 값들의 모음으로 보통 이 이름붙은 값들을 객체의 프로퍼티라고 부른다.
객체의 프로퍼티를 참조하려면 객체 이름을 쓰고 이어서 마침표와 프로퍼티 이름을 적어주면 된다.

프로퍼티는 배열이나 함수, 객체를 포함한 어떤 타입의 값이라도 담을 수 있고, 함수가 객체 프로퍼티로 저장될 경우 그 함수를 메서드라고 부른다. 객체 메서드를 호출할때는 객체로부터 함수 값을 호출하기 위해 . 을 사용하고 함수를 호출하기 위해 () 를 사용한다.

연관배열로 사용되는 경우 객체 프로퍼티에 접근할때는 대괄호를 사용한다.

image["width"] 


3.5.1 객체 생성
객체는 특수한 생성자 함수를 호출하여 생성할수 있다.

var o = new objoct(); var now =   new Date(); var pattern = new RegExp("\\sjava\\s", "i");


3.5.2 객체 리터럴
자바스크립트는 객체를 생성하고 프로퍼티를 지정하는 객체 리터럴(객체 초기자라고도 불린다) 문법을 제공한다.

3.5.3 객체 변환

객체가 문자열 문맥에서 사용되면 toStrint() 메서드가 호출되고 반환하는 문자열이 사용된다.  객체가 숫자 문맥에서 사용되면 객체의 valueOf() 메서드를 호출하고 그 값을 반환한다.


 

3.6 배열(array)
배열은 객체처럼 데이터 값들의 모음으로 객체 내에 포함되는 각 데이터 값에는 이름이 있는 반면 배열의 각 데이터 값에는 번호, 즉 인덱스(index) 가 있다.

3.6.1 배열 생성

배열은 Array() 생성자 함수로 생성할 수 있는데 Array(n) 생성자에 정수 하나만 넘겨주면 그 숫자는 배열의 크기로 사용된다.

3.6.2 배열 리터럴
배열 리터럴(혹은 배열 초기자)은 대괄호로 둘러싸인 쉽표로 구분된 값들의 목록이다.

var a = [ 1.2, "javascript", true, { x : 1, y : 3}]; 




3.7 null
null은 객체타입의 특수한 값, 어떤 객체도 나타내지 않는 값으로 취급되며 불리언 문맥에서 사용되면 false로 변환되고 숫자 문맥에서는 0으로 문자열 문맥에서는 "null"로 변환된다.



3.8 undefined
undefined는 선언은 되었지만 값이 할당된 적이 없는 변수에 접근하거나 존재하지 않는 객체 프로퍼티에 접근할 경우 반환되는 값이다.

null과 undefined 값은 서로 구별되는 값이지만 동등 연산자 == 는 둘을 같은 것으로 간주한다.



3.9 Date 객체
Date객체는 new 연산자와 Date() 생성자로 생성할 수 있다.



3.10 정규 표현식
자바스크립트의 정규 표현식은 RegExp 객체로 표현되며 RegExp() 생성자로 생성할수 있다.



3.11 Error 객체
자바스크립트 인터프리터는 런타임 에러가 발생하면 클래스들 중 하나에 해당하는 객체를 던진다.



3.13 기본 데이터 타입 래퍼 객체
자바스크립트에는 세 가지 핵심 기본 데이터 타입 각각에  대응되는 클래스가 정의되어 있어 숫자, 문자열, 불리언 데이터 타입을 지원할 뿐 아니라 Number, String, Boolean 클래스도 지원하고 이 클래스들은 기본 데이터 타입을 둘러싼 래퍼들이다.
래퍼는 기본 데이터 타입 값과 동일한 값을 담고 있지만 데이터 조작을 위한 프로퍼티와 메서드도 가지고 있다.



3.14 객체에서 기본 타입으로 변환
null 이 아닌 객체가 불리언 문맥에서 사용되면 true 로 변환한다.
대부분의 객체는 Object 의 기본 value() 메서드를 상속 받으며 객체 그 자체를 반환하는데 기본 데이터 타입 값을 반환하지 않기 때문에 자바스크립트는 다음으로 toString() 메서드를 호출하고 반환되는 문자열을 숫자로 변환하므로써 객체를 숫자로 변환하려고 시도한다.



3.15 값에 의한 vs 참조에 의한
자바스크립트는 데이터 값을 조작할수 있는데 값을 복사하여 새로운 변수에 할당할 수 있고 함수나 메서드의 전달인자로 넘겨줄수 있다. 또한 두 값이 동일한지 알아보기 위해 한 값과 다른 값을 비교할 수 있다.

값에 의해 데이터를 조작할 때 중요한 것은 데이터 값인데 값 할당 시에는 실제 값이 복사되며 복사본은 변수, 객체 프로퍼티, 배열 원소에 저장되어 원본과 완전히 별개로 저장되는 독립적인 값으로 데이터를 값에 의해  함수에 전달하면 데이터 복사본이 전달된다.
참조에 의한 조작은 값에 대한 실제 복사본이 오직 하나만 존재하는 것으로 값이 참조에 의해 조작될 때 변수는 직접 값을 담지 않고 값에 대한 참조를 담을 뿐이다.



3.15.1 기본타입과 참조타입
자바스크립트에서 숫자와 불리언 타입은 정해진 갯수의 작은 바이트로 구성되어 자바스크립트 인터프리터가 저수준 오퍼레이션을 통해 손쉽게 조작이 가능한 기본 타입이다.
반면 객체와 특수한 종류인 배열, 함수는 임의 개수의 프로퍼티나 원소를 포함할 수 있으므로 값에 의해 조작하면 복사나 비교작업에 메모리를 비효율적으로 많이 사용해야하기 때문에 참조타입이다.

 

 

'나홀로스터디 > JS 완벽가이드' 카테고리의 다른 글

문장  (0) 2014.10.16
표현식과 연산자  (0) 2014.10.13
변수  (0) 2014.10.07
어휘구조  (0) 2014.09.24
자바스크립트 소개  (0) 2014.09.23
Copyright © HuckleberryM All Rights Reserved | JB All In One Designed by CMSFactory.NET