언어/JavaScript
[자바스크립트 딥다이브] 5장 표현식과 문, 6장 데이터 타입
홍시_코딩기록
2024. 3. 29. 00:48
5장 표현식과 문
1. 값
- 표현식이 평가되어 생성된 결과
- 평가: 식을 해석해서 값을 생성하거나 참조하는 것을 의미
10 + 20 //30
//10 + 20 은 평가되어 숫자 값 30을 생성
2. 리터럴
- 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법
//숫자 리터럴 3
3
- 리터럴은 문자(숫자, 알바벳, 한글 등) 또는 기호(’’, “”, // 등) 로 표기한 코드
- 코드가 실행되는 시점인 런타임에 리터럴을 평가해 값을 생성 즉, 리터럴은 값을 생성하기 위해 미리 약속된 표기법
- 숫자 리터럴 3을 코드에 기술하면 자바스크립트 엔진은 이를 평가해 숫자 값 3을 생성한다.
3. 표현식
- 표현식은 값으로 평가될 수 있는 문. 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조
- 리터럴은 값으로 평가되서 리터럴도 표현식임.
//표현식 예
var score = 100;
var score = 50 + 50;
score; //100
- 표현식은 리터럴, 식별자, 연산자, 함수 호출 등의 조합으로 이뤄질 수 있다.
- 값으로 평가될 수 있는 문은 모두 표현식.
4. 문
- 문은 프로그램을 구성하는 기본 단위이자 최소 실행 단위
- 문은 여러 토큰으로 구성된다. 토큰이란 문법적인 의미를 가지며 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소
5. 세미콜론과 세미콜론 자동삽입 기능
- 문을 끝낼 때는 세미콜론을 붙여야 하지만 코드 블록 ( { … } )뒤에는 붙이지 않음.
6. 표현식인 문과 표현식이 아닌 문
//변수 선언문은 값으로 평가될 수 없으므로 표현식이 아님
var x;
// 표현식이면서 완전한 문
x = 1 + 2;
- 표현식인 문 : 값으로 평가될 수 있는 문
- 표현식X 문 : 값으로 평가될 수 없는 문
- 구별하는 가장 간단한 방법 : 변수에 할당해보기
//표현식이 아닌 문은 값처럼 사용할 수 없음.
var foo = var x;
6장 데이터 타입
구분 데이터 타입 설명
원시타입 | 숫자 타입 | 숫자, 정수와 실수 구분없이 하나의 숫자 타입만 존재 |
문자열 타입 | 문자열 | |
불리언 타입 | 참과 거짓 (true, false) | |
undefined 타입 | var 키워드로 선언된 변수에 암묵적으로 할당되는 값 | |
null 타입 | 값이 없다는 것을 의도적으로 명시할 때 사용하는 값 | |
심벌symbol 타입 | es6에서 추가된 7번째 타입 | |
객체타입 | 객체, 함수, 배열 등 |
1. 숫자 타입
- 자바스크립트는 하나의 숫자 타입만 존재함.
// 모두 숫자 타입
var integer = 10;
var double = 10.12;
var negative = -20;
var binary = 0b01000001; //2진수
console.log(binary) //65
console.log(1 === 1.0); // true 사실 숫자 타입은 모두 실수로 처리됨 ><
//숫자 타입의 세가지 특별한 값
console.log(10 / 0); //infinity
console.log(10 / -0); //-infinity
ocnsole.log(1 * 'string'); //NaN
- 자바스크립트는 2진수, 8진수, 16진수를 표현하기 위한 데이터 타입을 제공하지 않기 때문에 값을 참조하면 모두 10진수로 해석
2. 문자열 타입
- 가장 일반적으론 작은따옴표를 사용함.
3. 템플릿 리터럴
- 백틱(``)을 사용해 표현함.
var str = `h
ell
o`;
- 백택을 사용하면 문자열 내에서 줄바꿈이 가능함.
- 백틱 안에서 표현식 사용할 수 있어서 유용
4. 불리언 타입
- true false
5. undefined 타입
- var 키워드로 선언한 변수는 암묵적으로 undefined로 초기화 됨.
- 자바스크립트 엔진이 변수를 초기화 할 때 사용하는 값
6. null 타입
- 변수에 값이 없다는 것을 의도적으로 명시할 때 사용
- 함수가 유효한 값을 반환할 수 없는 경우 명시적으로 null을 반환하기도 함.
7. 심벌 타입
- 변경 불가능한 원시 타입의 값, 다른 값과 중복 되지 않는 유일무이한 값
//심벌 값 생성
var key = Symbol('key');
console.log(typeof key); //symbol
//객체 생성
var obj = {};
//이름이 충돌할 위험이 없는 유일무이한 값인 심벌을 프로퍼티 키로 사용
obj[key] = 'value';
console.log(obj[key]); //value
8. 객체 타입
- 6가지 데이터 타입 이외의 값은 모드 객체타입
데이터 타입은 왜 필요할까??
- 데이터 타입에 의한 메모리 공간의 확보와 참조
- 메모리에 값을 저장하려면 몇 바이트의 메모리 공간을 사용해야 낭비와 손실 없이 값을 저장할 수 있는지 알아야 함.
var score = 100;
- 숫자 값 100을 저장하기 위해 메모리 공간을 확보한 다음, 확보된 메모리에 숫자 값 100을 2진수로 저장함.
- 이런 처리를 하려면 숫자 값을 저장할 때 확보해야 할 메모리 공간의 크기를 알아야함.
- 자바스크립트는 변수에 할당되는 값의 데이터 타입에 따라 확보해야 할 메모리 공간의 크기가 결정됨.
- 식별자 score를 통해 숫자 타입의 값 100이 저장되어 있는 메모리 공간의 주소를 찾아갈 수 있음.
- 이 때 값을 참조하려면 한 번에 읽어 들여야 할 메모리 공간의 크기, 즉 메모리 셀의 개수(바이트 수)를 알아야 함.
- 자바스크립트는 score 변수를 숫자 타입으로 인식. 숫자 타입은 8바이트 단위로 저장되므로 score 변수를 참조하면 8바이트 단위로 메모리 공간에 저장된 값을 읽어들임
- 데이터 타입에 의한 값의 해석
- 데이터 타입이 필요한 이유
- 값을 저장할 때 확보해야 하는 메모리 공간의 크기를 결정하기 위해
- 값을 참조할 때 한번에 읽어 들여야 할 메모리 공간의 크기를 결정하기 위해
- 메모리에서 읽어 들인 2진수를 어떻게 해석할지 결정하기 위해
동적 타이핑
- 동적 타입 언어와 정적 타입 언어
- 정적 타입 언어 (C나 자바)는 변수의 타입을 변경할 수 없고 타입에 맞는 값만 할당 가능함.
- 자바스크립트는 변수를 선언할 때 타입을 선언하지 않아서 어떠한 타입의 값을 자유롭게 할당.
- 재할당에 의해서 변수의 타입은 언제든지 동적으로 변할 수 있음. = 동적 타이핑
- 동적 타입 언어와 변수
- 동적타입 언어는 유연성은 높지만 신뢰성은 떨어짐. 그래서 요즘은 타입스크립트 많이 사용.
- 변수 사용 시 주의사항
- 변수는 꼭 필요한 경우에 한해 제한적으로 사용.
- 변수의 유효 범위(스코프)는 최대한 좁게 만들어서 변수의 부작용 억제
- 전역 변수는 최대한 사용하지 않도록 함.
- 변수보다는 상수를 사용해 값의 변경을 억제
- 변수 이름은 변수의 목적이나 의미를 파악할 수 있도록 네이밍.
- 가독성이 좋은 코드가 좋은 코드