6장 도입
- 데이터 타입(=타입): 값의 종류
- js의 모든 값은 데이터 타입을 가짐
- 7개의 데이터 타입 제공 - 원시 타입과 객체 타입으로 분류
6.1 숫자 타입
- js는 하나의 숫자 타입만 존재
- 배정밀도 64bit 부동소수점 형식을 따름
- 모든 수를 실수로 처리, 정수를 표현하기 위한 데이터 타입 존재X
- 정수로 표시된다해도 사실은 실수임 → 정수로 표시되는 수끼리 나누더라도 실수가 나올 수 있음
- 정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64bit 부동소수점 형식의 2진수로 저장
- js는 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공X → 모두 10진수로 해석
- 그 외 숫자 타입 가능한 표현 방법
- Infinity: 양의 무한대
- -Infinity: 음의 무한대
- NaN: 산술 연산 불가(not-a-number)
6.2 문자열 타입
- 텍스트 데이터를 내는 데 사용
- 0개 이상의 16bit 유니코드 문자(UTF-16)의 집합으로 전 세계 대부분의 문자를 표현할 수 있음
- 작은따옴표(일반적인 표기법), 큰따옴표, 백틱으로 텍스트를 감쌈 → 키워드나 식별자 같은 토큰과 구변하기 위해
- 문자열은 변경 불가능한 값
6.3 템플릿 리터럴
- 편리한 문자열 처리 기능 제공
- 런타임에 일반 문자열로 변환되어 처리됨
- 일반적인 따옴표 대신 백틱( )을 사용해 표현
멀티라인 문자열
- 일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않음
- 백슬러시(\)로 시작하는 이스케이프 시퀀스를 사용해야 함
- 개행 문자: 텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열
- 서로 다른 운영체제에서 작성한 텍스트 파일은 서로 개행 문자가 다르므로 인식하지 못함
- 템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되고 공백도 적용됨
표현식 삽입
- 문자열은 문자열 연산자 +를 사용해 연결할 수 있음
- 피연산자 중 하나 이상이 문자열인 경우 동작하고 그 외는 덧셈 연산자로 동작
- 템플릿 리터럴 내에서는 표현식 삽입을 통해 간단히 문자열 삽입 가능
- 표현식을 삽입하려면 ${ } 으로 표현식을 감쌈
- 표현식의 평가 결과가 문자열이 아니더라도 문자열로 타입이 강제 변환되어 삽입됨
var first = 'Ung-mo';
var last = 'Lee';
// ES6: 표현식 삽입
console.log(`My name is ${first} ${last}.`); // My name is Ung-mo Lee.
6.4 불리언 타입
- 불리언 타입의 값은 논리적 참, 거짓을 나타내는 true, false 뿐
6.5 undefined 타입
- var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화됨
- 개발자가 의도적으로 할당하기 위한 값이 아닌, js 엔진이 변수를 초기화할 때 사용하는 값
- 선언과 정의
- C언어에서 컴파일러에게 식별자의 존재만 알리는 것이 선언, 실제 컴파일러가 변수를 생성해서 식별자와 메모리 주소가 연결되면 정의
- js의 경우 변수를 선언하면 암묵적으로 정의가 이뤄져서 선언과 정의의 구분이 모호
- ECMAScript 사양에서는 변수는 ‘선언한다’라고 표현하고, 함수는 ‘정의한다’라고 표현
6.6 null 타입
- 변수에 값이 없다는 것을 의도적으로 명시(의도적 부재)할 때 사용
- 변수에 null을 할당 → 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다
var foo = 'Lee';
// 이전에 할당되어 있던 값에 대한 참조를 제거. foo 변수는 더 이상 'Lee'를 참조하지 않는다.
// 유용해 보이지는 않는다. 변수의 스코프를 좁게 만들어 변수 자체를 재빨리 소멸시키는 편이 낫다.
foo = null;
- 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함 ex) document.querySelector 메서드 조건에 부합하는 HTML 요소를 겁색할 수 없는 경우 에러대신 null 반환
6.7 심벌 타입
- 변경 불가능한 원시 타입의 값
- 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용
- 심벌 이외의 원시 값은 리터럴을 통해 생성하지만 심벌은 Symbol 함수를 호출해 생성
- 생성된 심벌 값은 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않는 유일무이한 값
// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key); // symbol
// 객체 생성
var obj = {};
// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다.
obj[key] = 'value';
console.log(obj[key]); // value
6.8 객체 타입
- js의 데이터 타입 - 원시 타입과 객체 타입으로 분류
- js는 객체 기반의 언어, js를 이루고 있는 거의 모든 것이 객체
6.9 데이터 타입의 필요성
데이터 타입에 의한 메모리 공간의 확보와 참조
- 값은 메모리에 저장하고 참조할 수 있어야 하고, 메모리에 값을 저장하려면 먼저 확보해야 할 메모리 공간의 크기(메모리 셀의 개수(byte 수))를 알고 결정해야 함
- js 엔진은 데이터 타입(값의 종류)에 따라 정해진 크기의 메모리 공간을 확보한다
var score = 100;
- 위 예제에서 js 엔진은 리터럴 100을 숫자 타입의 값으로 해석하고 이를 저장하기 위해 8byte의 메모리 공간을 확보한 뒤 2진수로 저장한다.
- 확보되는 메모리 공간의 크기는 js 엔진 제조사에 의해 다를 수 있음 ECMAScript에는 숫자 타입은 배정밀도 64bit 부동소수점 형식을 사용하다고 명시되어 있고, 이는 8byte로 숫자를 표현
- 컴파일러 또는 인터프리터는 심벌 테이블이라고 부르는 자료 구조를 통해 식별자를 키로 바인딩된 값의 메모리 주소, 데이터 타입, 스코프 등을 관리함
데이터 타입에 의한 값의 해석
- 모든 값은 데이터 타입을 가지며, 메모리에 2진수(bit의 나열)로 저장됨
- 메모리에 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있음 ex) 0100 0001 - 숫자로 해석하면 65, 문자로 해석하면 ‘A’
- 데이터 타입이 필요한 이유
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
6.10 동적 타이핑
동적 타입 언어와 정적 타입 언어
정적 타입 언어
- 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선어해야 함(명시적 타입 선언)
- 컴파일 시점에 타입 체크
- C, C++, Java 등
동적 타입 언어 - javascript
- 변수를 선언할 때 타입 선언 x
- var, let, const 키워드를 이용해 변수를 선언할 뿐
- 어떠한 데이터 타입의 값이라도 자유롭게 할당 가능
- typeof 연산자 : 연산자 뒤에 위치한 피연산자의 데이터 타입을 문자열로 반환(정확히는 변수에 할당된 값의 데이터 타입)
- js의 변수는 선언이 아닌 할당에 의해 타입이 결정(타입 추론)되며, 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있음
- 변수는 타입을 갖지 않지만 값은 타입을 갖는다
- 변수는 값에 묶여 있는 값에 대한 별명
동적 타입 언어와 변수
동적 타입 언어의 단점
- 복잡한 프로그램에서는 변화하는 변수 값 추적하기 어려울 수도 있음
- 변수는 값을 확인하기 전에는 타입을 확신할 수 없음
- 개발자 의도와 달리 js 엔진에 의해 암묵적으로 타입이 자동으로 변환됨
⇒ 유연성은 높지만 신뢰성은 떨어진다
변수를 사용할 때 주의할 사항
- 변수는 꼭 필요한 경우에 한해 제한적으로 사용
- 변수의 유효 범위(스코프)는 최대한 좁게 만들어 변수의 부작용 억제
- 전역 변수는 최대한 사용하지 않도록 함
- 변수보다는 상수를 사용해 값의 변경을 억제
- 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍
6장 도입
- 데이터 타입(=타입): 값의 종류
- js의 모든 값은 데이터 타입을 가짐
- 7개의 데이터 타입 제공 - 원시 타입과 객체 타입으로 분류
6.1 숫자 타입
- js는 하나의 숫자 타입만 존재
- 배정밀도 64bit 부동소수점 형식을 따름
- 모든 수를 실수로 처리, 정수를 표현하기 위한 데이터 타입 존재X
- 정수로 표시된다해도 사실은 실수임 → 정수로 표시되는 수끼리 나누더라도 실수가 나올 수 있음
- 정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64bit 부동소수점 형식의 2진수로 저장
- js는 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공X → 모두 10진수로 해석
- 그 외 숫자 타입 가능한 표현 방법
- Infinity: 양의 무한대
- -Infinity: 음의 무한대
- NaN: 산술 연산 불가(not-a-number)
6.2 문자열 타입
- 텍스트 데이터를 내는 데 사용
- 0개 이상의 16bit 유니코드 문자(UTF-16)의 집합으로 전 세계 대부분의 문자를 표현할 수 있음
- 작은따옴표(일반적인 표기법), 큰따옴표, 백틱으로 텍스트를 감쌈 → 키워드나 식별자 같은 토큰과 구변하기 위해
- 문자열은 변경 불가능한 값
6.3 템플릿 리터럴
- 편리한 문자열 처리 기능 제공
- 런타임에 일반 문자열로 변환되어 처리됨
- 일반적인 따옴표 대신 백틱( )을 사용해 표현
멀티라인 문자열
- 일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않음
- 백슬러시(\)로 시작하는 이스케이프 시퀀스를 사용해야 함
- 개행 문자: 텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열
- 서로 다른 운영체제에서 작성한 텍스트 파일은 서로 개행 문자가 다르므로 인식하지 못함
- 템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되고 공백도 적용됨
표현식 삽입
- 문자열은 문자열 연산자 +를 사용해 연결할 수 있음
- 피연산자 중 하나 이상이 문자열인 경우 동작하고 그 외는 덧셈 연산자로 동작
- 템플릿 리터럴 내에서는 표현식 삽입을 통해 간단히 문자열 삽입 가능
- 표현식을 삽입하려면 ${ } 으로 표현식을 감쌈
- 표현식의 평가 결과가 문자열이 아니더라도 문자열로 타입이 강제 변환되어 삽입됨
var first = 'Ung-mo';
var last = 'Lee';
// ES6: 표현식 삽입
console.log(`My name is ${first} ${last}.`); // My name is Ung-mo Lee.
6.4 불리언 타입
- 불리언 타입의 값은 논리적 참, 거짓을 나타내는 true, false 뿐
6.5 undefined 타입
- var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화됨
- 개발자가 의도적으로 할당하기 위한 값이 아닌, js 엔진이 변수를 초기화할 때 사용하는 값
- 선언과 정의
- C언어에서 컴파일러에게 식별자의 존재만 알리는 것이 선언, 실제 컴파일러가 변수를 생성해서 식별자와 메모리 주소가 연결되면 정의
- js의 경우 변수를 선언하면 암묵적으로 정의가 이뤄져서 선언과 정의의 구분이 모호
- ECMAScript 사양에서는 변수는 ‘선언한다’라고 표현하고, 함수는 ‘정의한다’라고 표현
6.6 null 타입
- 변수에 값이 없다는 것을 의도적으로 명시(의도적 부재)할 때 사용
- 변수에 null을 할당 → 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다
var foo = 'Lee';
// 이전에 할당되어 있던 값에 대한 참조를 제거. foo 변수는 더 이상 'Lee'를 참조하지 않는다.
// 유용해 보이지는 않는다. 변수의 스코프를 좁게 만들어 변수 자체를 재빨리 소멸시키는 편이 낫다.
foo = null;
- 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함 ex) document.querySelector 메서드 조건에 부합하는 HTML 요소를 겁색할 수 없는 경우 에러대신 null 반환
6.7 심벌 타입
- 변경 불가능한 원시 타입의 값
- 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용
- 심벌 이외의 원시 값은 리터럴을 통해 생성하지만 심벌은 Symbol 함수를 호출해 생성
- 생성된 심벌 값은 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않는 유일무이한 값
// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key); // symbol
// 객체 생성
var obj = {};
// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다.
obj[key] = 'value';
console.log(obj[key]); // value
6.8 객체 타입
- js의 데이터 타입 - 원시 타입과 객체 타입으로 분류
- js는 객체 기반의 언어, js를 이루고 있는 거의 모든 것이 객체
6.9 데이터 타입의 필요성
데이터 타입에 의한 메모리 공간의 확보와 참조
- 값은 메모리에 저장하고 참조할 수 있어야 하고, 메모리에 값을 저장하려면 먼저 확보해야 할 메모리 공간의 크기(메모리 셀의 개수(byte 수))를 알고 결정해야 함
- js 엔진은 데이터 타입(값의 종류)에 따라 정해진 크기의 메모리 공간을 확보한다
var score = 100;
- 위 예제에서 js 엔진은 리터럴 100을 숫자 타입의 값으로 해석하고 이를 저장하기 위해 8byte의 메모리 공간을 확보한 뒤 2진수로 저장한다.
- 확보되는 메모리 공간의 크기는 js 엔진 제조사에 의해 다를 수 있음 ECMAScript에는 숫자 타입은 배정밀도 64bit 부동소수점 형식을 사용하다고 명시되어 있고, 이는 8byte로 숫자를 표현
- 컴파일러 또는 인터프리터는 심벌 테이블이라고 부르는 자료 구조를 통해 식별자를 키로 바인딩된 값의 메모리 주소, 데이터 타입, 스코프 등을 관리함
데이터 타입에 의한 값의 해석
- 모든 값은 데이터 타입을 가지며, 메모리에 2진수(bit의 나열)로 저장됨
- 메모리에 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있음 ex) 0100 0001 - 숫자로 해석하면 65, 문자로 해석하면 ‘A’
- 데이터 타입이 필요한 이유
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
6.10 동적 타이핑
동적 타입 언어와 정적 타입 언어
정적 타입 언어
- 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선어해야 함(명시적 타입 선언)
- 컴파일 시점에 타입 체크
- C, C++, Java 등
동적 타입 언어 - javascript
- 변수를 선언할 때 타입 선언 x
- var, let, const 키워드를 이용해 변수를 선언할 뿐
- 어떠한 데이터 타입의 값이라도 자유롭게 할당 가능
- typeof 연산자 : 연산자 뒤에 위치한 피연산자의 데이터 타입을 문자열로 반환(정확히는 변수에 할당된 값의 데이터 타입)
- js의 변수는 선언이 아닌 할당에 의해 타입이 결정(타입 추론)되며, 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있음
- 변수는 타입을 갖지 않지만 값은 타입을 갖는다
- 변수는 값에 묶여 있는 값에 대한 별명
동적 타입 언어와 변수
동적 타입 언어의 단점
- 복잡한 프로그램에서는 변화하는 변수 값 추적하기 어려울 수도 있음
- 변수는 값을 확인하기 전에는 타입을 확신할 수 없음
- 개발자 의도와 달리 js 엔진에 의해 암묵적으로 타입이 자동으로 변환됨
⇒ 유연성은 높지만 신뢰성은 떨어진다
변수를 사용할 때 주의할 사항
- 변수는 꼭 필요한 경우에 한해 제한적으로 사용
- 변수의 유효 범위(스코프)는 최대한 좁게 만들어 변수의 부작용 억제
- 전역 변수는 최대한 사용하지 않도록 함
- 변수보다는 상수를 사용해 값의 변경을 억제
- 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍
6장 도입
- 데이터 타입(=타입): 값의 종류
- js의 모든 값은 데이터 타입을 가짐
- 7개의 데이터 타입 제공 - 원시 타입과 객체 타입으로 분류
6.1 숫자 타입
- js는 하나의 숫자 타입만 존재
- 배정밀도 64bit 부동소수점 형식을 따름
- 모든 수를 실수로 처리, 정수를 표현하기 위한 데이터 타입 존재X
- 정수로 표시된다해도 사실은 실수임 → 정수로 표시되는 수끼리 나누더라도 실수가 나올 수 있음
- 정수, 실수, 2진수, 8진수, 16진수 리터럴은 모두 메모리에 배정밀도 64bit 부동소수점 형식의 2진수로 저장
- js는 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공X → 모두 10진수로 해석
- 그 외 숫자 타입 가능한 표현 방법
- Infinity: 양의 무한대
- -Infinity: 음의 무한대
- NaN: 산술 연산 불가(not-a-number)
6.2 문자열 타입
- 텍스트 데이터를 내는 데 사용
- 0개 이상의 16bit 유니코드 문자(UTF-16)의 집합으로 전 세계 대부분의 문자를 표현할 수 있음
- 작은따옴표(일반적인 표기법), 큰따옴표, 백틱으로 텍스트를 감쌈 → 키워드나 식별자 같은 토큰과 구변하기 위해
- 문자열은 변경 불가능한 값
6.3 템플릿 리터럴
- 편리한 문자열 처리 기능 제공
- 런타임에 일반 문자열로 변환되어 처리됨
- 일반적인 따옴표 대신 백틱( )을 사용해 표현
멀티라인 문자열
- 일반 문자열 내에서는 줄바꿈(개행)이 허용되지 않음
- 백슬러시(\)로 시작하는 이스케이프 시퀀스를 사용해야 함
- 개행 문자: 텍스트의 한 줄이 끝남을 표시하는 문자 또는 문자열
- 서로 다른 운영체제에서 작성한 텍스트 파일은 서로 개행 문자가 다르므로 인식하지 못함
- 템플릿 리터럴 내에서는 이스케이프 시퀀스를 사용하지 않고도 줄바꿈이 허용되고 공백도 적용됨
표현식 삽입
- 문자열은 문자열 연산자 +를 사용해 연결할 수 있음
- 피연산자 중 하나 이상이 문자열인 경우 동작하고 그 외는 덧셈 연산자로 동작
- 템플릿 리터럴 내에서는 표현식 삽입을 통해 간단히 문자열 삽입 가능
- 표현식을 삽입하려면 ${ } 으로 표현식을 감쌈
- 표현식의 평가 결과가 문자열이 아니더라도 문자열로 타입이 강제 변환되어 삽입됨
var first = 'Ung-mo';
var last = 'Lee';
// ES6: 표현식 삽입
console.log(`My name is ${first} ${last}.`); // My name is Ung-mo Lee.
6.4 불리언 타입
- 불리언 타입의 값은 논리적 참, 거짓을 나타내는 true, false 뿐
6.5 undefined 타입
- var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화됨
- 개발자가 의도적으로 할당하기 위한 값이 아닌, js 엔진이 변수를 초기화할 때 사용하는 값
- 선언과 정의
- C언어에서 컴파일러에게 식별자의 존재만 알리는 것이 선언, 실제 컴파일러가 변수를 생성해서 식별자와 메모리 주소가 연결되면 정의
- js의 경우 변수를 선언하면 암묵적으로 정의가 이뤄져서 선언과 정의의 구분이 모호
- ECMAScript 사양에서는 변수는 ‘선언한다’라고 표현하고, 함수는 ‘정의한다’라고 표현
6.6 null 타입
- 변수에 값이 없다는 것을 의도적으로 명시(의도적 부재)할 때 사용
- 변수에 null을 할당 → 변수가 이전에 참조하던 값을 더 이상 참조하지 않겠다
var foo = 'Lee';
// 이전에 할당되어 있던 값에 대한 참조를 제거. foo 변수는 더 이상 'Lee'를 참조하지 않는다.
// 유용해 보이지는 않는다. 변수의 스코프를 좁게 만들어 변수 자체를 재빨리 소멸시키는 편이 낫다.
foo = null;
- 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함 ex) document.querySelector 메서드 조건에 부합하는 HTML 요소를 겁색할 수 없는 경우 에러대신 null 반환
6.7 심벌 타입
- 변경 불가능한 원시 타입의 값
- 주로 이름이 충돌할 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용
- 심벌 이외의 원시 값은 리터럴을 통해 생성하지만 심벌은 Symbol 함수를 호출해 생성
- 생성된 심벌 값은 외부에 노출되지 않으며, 다른 값과 절대 중복되지 않는 유일무이한 값
// 심벌 값 생성
var key = Symbol('key');
console.log(typeof key); // symbol
// 객체 생성
var obj = {};
// 이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용한다.
obj[key] = 'value';
console.log(obj[key]); // value
6.8 객체 타입
- js의 데이터 타입 - 원시 타입과 객체 타입으로 분류
- js는 객체 기반의 언어, js를 이루고 있는 거의 모든 것이 객체
6.9 데이터 타입의 필요성
데이터 타입에 의한 메모리 공간의 확보와 참조
- 값은 메모리에 저장하고 참조할 수 있어야 하고, 메모리에 값을 저장하려면 먼저 확보해야 할 메모리 공간의 크기(메모리 셀의 개수(byte 수))를 알고 결정해야 함
- js 엔진은 데이터 타입(값의 종류)에 따라 정해진 크기의 메모리 공간을 확보한다
var score = 100;
- 위 예제에서 js 엔진은 리터럴 100을 숫자 타입의 값으로 해석하고 이를 저장하기 위해 8byte의 메모리 공간을 확보한 뒤 2진수로 저장한다.
- 확보되는 메모리 공간의 크기는 js 엔진 제조사에 의해 다를 수 있음 ECMAScript에는 숫자 타입은 배정밀도 64bit 부동소수점 형식을 사용하다고 명시되어 있고, 이는 8byte로 숫자를 표현
- 컴파일러 또는 인터프리터는 심벌 테이블이라고 부르는 자료 구조를 통해 식별자를 키로 바인딩된 값의 메모리 주소, 데이터 타입, 스코프 등을 관리함
데이터 타입에 의한 값의 해석
- 모든 값은 데이터 타입을 가지며, 메모리에 2진수(bit의 나열)로 저장됨
- 메모리에 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있음 ex) 0100 0001 - 숫자로 해석하면 65, 문자로 해석하면 ‘A’
- 데이터 타입이 필요한 이유
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
6.10 동적 타이핑
동적 타입 언어와 정적 타입 언어
정적 타입 언어
- 변수를 선언할 때 변수에 할당할 수 있는 값의 종류, 즉 데이터 타입을 사전에 선어해야 함(명시적 타입 선언)
- 컴파일 시점에 타입 체크
- C, C++, Java 등
동적 타입 언어 - javascript
- 변수를 선언할 때 타입 선언 x
- var, let, const 키워드를 이용해 변수를 선언할 뿐
- 어떠한 데이터 타입의 값이라도 자유롭게 할당 가능
- typeof 연산자 : 연산자 뒤에 위치한 피연산자의 데이터 타입을 문자열로 반환(정확히는 변수에 할당된 값의 데이터 타입)
- js의 변수는 선언이 아닌 할당에 의해 타입이 결정(타입 추론)되며, 재할당에 의해 변수의 타입은 언제든지 동적으로 변할 수 있음
- 변수는 타입을 갖지 않지만 값은 타입을 갖는다
- 변수는 값에 묶여 있는 값에 대한 별명
동적 타입 언어와 변수
동적 타입 언어의 단점
- 복잡한 프로그램에서는 변화하는 변수 값 추적하기 어려울 수도 있음
- 변수는 값을 확인하기 전에는 타입을 확신할 수 없음
- 개발자 의도와 달리 js 엔진에 의해 암묵적으로 타입이 자동으로 변환됨
⇒ 유연성은 높지만 신뢰성은 떨어진다
변수를 사용할 때 주의할 사항
- 변수는 꼭 필요한 경우에 한해 제한적으로 사용
- 변수의 유효 범위(스코프)는 최대한 좁게 만들어 변수의 부작용 억제
- 전역 변수는 최대한 사용하지 않도록 함
- 변수보다는 상수를 사용해 값의 변경을 억제
- 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍
'JavaScript' 카테고리의 다른 글
[모던 자바스크립트 Deep Dive] 08장 - 제어문 (0) | 2022.12.19 |
---|---|
[모던 자바스크립트 Deep Dive] 07장 - 연산자 (0) | 2022.12.19 |
[모던 자바스크립트 Deep Dive] 05장 - 표현식과 문 (0) | 2022.12.19 |
[모던 자바스크립트 Deep Dive] 04장 - 변수 (0) | 2022.12.12 |
JavaScript | 자바스크립트 개발 환경과 실행 방법 (0) | 2022.12.12 |