PoiemaWeb - 데이터 타입과 변수

3598 단어 JavaScriptJavaScript

데이터 타입과 변수

프로그래밍은 변수를 통해 값을 저장하고 참조하며 연산자로 값을 연산, 평가하고 조건문과 반복문에의한 흐름제어로 데이터의 흐름을 제어하고 함수로 재사용이 가능한 구문의 집합을 만들며 객체, 배열 등으로 자료를 구조화 하는 것이다. 변수는 값의 위치(주소)를 기억하는 저장소이다. 값의 위치한 값이 위치하고 있는 메모리 상의 주소(address)를 의미한다. 즉, 변수란 값이 위치하고 있는 메모리 주소(memory address)에 접근하기위해 사람이 이해할 수 있는 언어로 명명한 식별자(identifier)이다.

메모리에 값을 저장하기 위해서는 먼저 메모리 공간을 확보해야할 메모리 크기(byte)를 알아야한다.

  • byte : 컴퓨터의 기억장치의 크기를 나타내는 단위로 자주 쓰이며, 많은 플그래밍 언어에서 정수형에 속하는 자료형이기도 하다. 1byte는 8bit와 같다.

이는 값의 종류에따라 확보해야할 메모리의 크기가 다르기 때문이다. 이때 값의 종류 즉 데이터의 종류를 데이터 타입(Data type)이라고 한다.

자바스크립트는 동적 타입(Dynamic/ weak type)언어이다 변수의 타입지정(Type annotation)없이 값이 할당되는 과정에서 자동으로 변수의 타입이 결정(타입추론, Type inference)된다. 즉, 변수는 고정된 타입이 없다. 따라서 같은 변수에 여러 타입의 값을 자유롭게 할당할 수 있다.

1.1 원시타입(Primitive Data Type)

원시타입의 값은 변경불가한 값(Immutable value)이며 pass-by-value(값에 의한 전달)이다.

1.1.1 number

자바스크립트는 정수만을 위한 타입이 없고 모든 수를 실수 처리한다. 따라서 정수로 표현되는 수끼리 나누더라도 실수가 나올 수 있다.

1.1.2 string

문자열(string)타입은 텍스트 데이터를 나타내는데 사용한다. 문자열은 0개이상의 16bit유니코드 문자(UTF-16)들의 집합으로 대부분의 전세계의 문자를 표현할 수 있다. 문자열은 작은따옴표(’ ‘)또는 큰따옴표(” “)안에 텍스트를 넣어 생성한다. 가장 일반적인 표기법은 작은 따옴표를 사용하는 것이다.

C와 같은 언어와 다르게, 자바스크립트의 문자열은 원시타입이며 변경불가능(immutable)하다, 이것은 한번 생성되면 그 문자열을 변경할 수 없다는 것을 의미한다.

var str = 'Hello';
str = 'World';

첫번째 구문이 실행되면 메모리에 문자열 ‘Hello’가 생성되고 식별자 str은 메모리에 생성된 문자열 ‘Hello’의 메모리 주소를 가리킨다. 그리고 두번째 구문이 실행되면 이전에 생성된 문자열 ‘Hello’를 수정하는게 아니라 새로문 문자열 ‘World’를 메모리에 생성하고 식별자 str은 이것을 가리킨다. 이때 문자열 ‘Hello’와 ‘World’는 모두 메모리에 존재하고 있다. 변수 str은 문자열 ‘Hello’를 가리키고 있다가 문자열 ‘World’를 가리키도록 변경되었을 뿐이다.

문자열은 배열처럼 인덱스를 통해 접근할 수 있다. 이와 같은 특성을 갖는 데이터를 유사배열이라고 한다.

1.1.3 boolean

불리언(boolean)타입의 값은 논리적 참, 거짓을 나타내는 true와 false뿐이다. 비어있는 문자열과 null, undefined, 숫자 0은 false로 간주된다.

1.1.4 undefined

undefined 타입의 값은 undefined 가 유일하다. 선언 이 후 값을 할당하지 않은 변수는 undefined 값을 가진다. 즉 선언은 되었지만 값을 할당하지 않은 변수에 접근하거나 존재하지 않는 객체 프로퍼티에 접근할 경우 undefined가 반환된다. 이는 변수선언에 의해 확보된 메모리 공간을 처음 할당이 이루어질 때 까지 빈 상태(대부분 비어있지 않고 쓰레기값(Garbage value)이 들어있다.)로 내버려두지 않고 자바스크립트 엔진이 undefined로 초기화하기 때문이다. 변수의 값이 없다고 표시하고 싶을 때는 undefined가 아니라 unll을 할당해야한다.

1.1.5 null

null 타입의 값은 null이 유일하다. 자바스크립트는 대소문자를 구별하므로 null은 Null,NULL등과 다르다.

프로그래밍 언어에서 null은 의도적으로 변수에 값이 없다는 것을 명시할 때 사용한다. 이는 변수가 기억하는 메모리 어드레스의 참조 정보를 제거하는 것을 의미하며 자바스크립트 엔진은 누구도 참조하지 않는 메모리 영역에 대해 가비지 컬렉션을 수행할 것이다.

null타입을 확인할 때에는 typeof가 아닌 일치연산자(===)를 사용해야한다. ⇒typeof null을 하면 object가 반환값으로 나오는데 이는 자바스크립트의 설계상의 오류이다.

1.1.6 Symbol

심볼(Symbol)은 ES6에서 새롭게 추가된 7번째 타입으로 변경 불가능한 원시타입의 값이다.

1.2 객체타입

객체는 데이터와 그 데이터에 관련된 동작(절차, 방법, 기능)을 모두 포함할 수 있는 개념적 존재이다. 달리말해 이름과 값을 가지는 데이터를 의미하는 프로퍼티(Property)와 동작을 의미하는 메소드(method)를 포함할 수 있는 독립적 주체이다. 객체는 pass-by-reference(참조에 의한 전달)방식으로 전달된다.

2. 변수

변수는 var,let,const 키워드를 사용하여 선언하고 할당 연산자를 사용해 값을 할당한다. 그리고 식별자인 변수명을 사용해 변수에 저장된 값을 참조한다. 값을 할당하지않은 즉, 선언만 되어있는 변수는 undefined로 초기값을 갖는다. 선언하지 않은 변수에 접근하면 Reference Error가 발생한다.

2.1 동적 타이핑(Dynamic Typing)

자바스크립트는 동적타입(Dynamic / weak type)언어이다. 이것은 변수의 타입지정없이 값이 할당되는 과정에서 값의 타입에 의해 자동으로 타입이 결정(Type inference)될 것이라는 뜻이다. 이를 동적 타이핑이라고 한다.

좋은 웹페이지 즐겨찾기