<모던 자바스크립트 Deep Dive> 04~06장 변수, 표현식과 문, 데이터 타입 요약
04. 변수
1) 변수의 존재 목적
- 간단하게는 데이터의 관리
- 사람처럼 동작하는 자바스크립트의 엔진이 데이터 처리를 위해 데이터를 저장해둔 값의 주소를 변수로 저장하여 관리하기 위함
- 즉, 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 메모리 공간 식별을 위해 붙인 이름
2) ‘할당’
- 변수에 값을 저장하는 행위
- 할당 연산자 ‘=’ 사용
- 재할당도 가능(상수는 불가능)
3) ‘참조’
- 변수에 저장된 값을 불러옴
4) ‘식별자’
- 변수 이름(어떤 값을 구별해서 식별할 수 있는 고유한 이름)
- 식별자는 데이터의 값이 아닌 데이터가 저장되어 있는 메모리의 주소를 기억함
5) ‘선언’
- 변수를 생성하는 것
- 변수를 사용하기 위해 반드시 필요한 과정
- var, let, const 키워드를 사용하여 선언
- 선언의 단계 - 선언 → 초기화
- 선언 시 값 할당도 동시에 가능하나, 값 할당하지 않을 경우 ‘undefined’로 할당됨(선언은 런타임 이전에, 할당은 런타임 시 실행)
6) ‘변수 호이스팅’
- 변수 선언문은 소스코드가 차례로 진행되는 런타임 순서에 따라 실행되는 것이 아니라, 선두로 진행되며 이를 호이스팅이라 함
7) ‘매니지드 언어’
- 자바스크립트는 C 언어와 달리 메모리 제어가 불가능한데, 메모리 제어가 가능한 언어를 언매니지드 언어, 불가능한 언어를 매니지드 언어라 칭함
- 언매니지드 언어는 성능 확보가 가능하지만 치명적 오류 생산의 가능성이 존재하며, 매니지드 언어는 성능 확보는 어렵지만 일정한 생산성의 확보가 가능함
8) 식별자 네이밍 규칙
- 특수문자 불가, 예약어 불가
- 문자, 숫자, 언더스코어(_), 달러 기호($)는 가능
- 시작 문자로 숫자는 불가능
- 존재 목적을 알기 쉽게 표현하는 것이 좋음
05. 표현식과 문
1) ‘값’
- 식이 평가되어 생성된 결과
- 변수에 할당됨
2) ‘평가’
- 식을 해석하여 값을 생성하거나 참조
3) ‘리터럴’
- 사람이 이해할 수 있는 문자나 약속된 기호를 사용에 값을 생성하는 표기법
- ex. 정수 리터럴, 문자열 리터럴(’문자’), 불리언 리터럴(true, false) 등
4) ‘표현식’
- 값으로 평가될 수 있는 문
- ex. 리터럴, 식별자(변수, 함수 등의 이름), 연산자, 함수 호출 등
- 표현식은 값으로 평가되므로 값처럼 사용 가능(값의 자리에 표현식 사용 가능)
5) ‘문’
- 프로그램을 구성하는 기본 단위이자 최소 실행 단위
- 문의 집합 = 프로그램
- 여러 개의 토큰(문법적인 의미를 가진 더 이상 나눌 수 없는 코드의 기본 요소 ex. 키워드, 식별자, 연산자, 리터럴, 세미콜론 등)으로 구성
- 컴퓨터에 내리는 명령으로 명령문이라고도 함
- 선언문, 할당문, 조건문, 반복문 등으로 구분
6) 세미콜론에 대해
- 세미콜론은 문의 종료를 나타냄
- 단, if문, for문, 함수 등의 코드 블록은 자체 종결성이 있으므로 세미콜론 붙이지 않음
- 자바스크립트 엔진은 세미콜론 자동 삽입 기능을 가지고 있기 때문에 세미콜론 생략 가능
- 다만 세미콜론 자동 삽입 기능의 작동을 제대로 예측하지 못할 수 있으므로 붙이는 것 권장
7) 표현식인 문과 표현식이 아닌 문의 구분
- 표현식인 문(값으로 평가 가능) ex. 할당문
- 표현식이 아닌 문(값으로 평가 불가) ex. 변수 선언문
- 구분하는 가장 간단한 방법은 변수에 할당해 보는 것
06. 데이터 타입
1) 데이터 타입의 정의
- 값의 종류를 뜻함
- ES6는 7개 데이터 타입 제공
- 원시 타입과 객체 타입으로 분류
1. 원시 타입 - 숫자, 문자열, 불리언, undefined, null, 심벌(symbol) 타입
*숫자 타입
- 자바스크립트에서는 숫자 타입의 모든 수를 실수로 처리(정수, 실수의 구분X)
- 특별한 값 - Infinity(양의 무한대), -Infinity(음의 무한대), NaN(not-a-number, 산술 연산 불가, 대소문자 구분 필요)
*문자열 타입
- 텍스트 데이터 나타냄
- 작은 따옴표, 큰 따옴표, 또는 백틱(``)으로 사용
- 템플릿 리터럴 - ES6부터 도입, 백틱 사용, 줄바꿈과 공백을 그대로 허용, 문자열 조합 시 ${}을 통해 표현식 삽입하여 간단하게 가능
*불리언 타입
- true, false
*undefined 타입
- undefined 값이 유일
- 자바스크립트 엔진이 변수를 초기화할 때 사용하는 값(개발자의 의도X)
- undefined를 통해 초기화되지 않은 변수임을 확인 가능
*null 타입
- null 값이 유일
- 대소문자 구분 필요
- 변수에 값이 없음을 나타낼 때 사용(가비지 콜렉션 이용 목적으로 사용하기도 함)
- 함수가 유효한 값을 반환할 수 없을 때 반환하는 값이기도 함
*심벌(symbol) 타입
- 다른 값과 중복되지 않는 유일무이한 값
-이름 충돌의 위험이 없는 객체의 유일한 프로퍼티 키를 만들기 위해 사용
-Symbol 함수를 호출하여 생성
2. 객체 타입 - 객체, 함수, 배열 등
2) 데이터 타입의 필요성
- 자바스크립트 엔진이 값의 종류에 따라 메모리를 확보하고 읽어들이므로 값의 종류인 데이터 타입 명시가 필요
- 동적 타이핑 : 자바스크립트는 정적 타입 언어인 C 언어, 자바 등과 달리 데이터 타입에 관계없이 자유롭게 변수에 값 할당이 가능
- 즉, 자바스크립트의 변수는 선언이 아닌 할당에 의해 데이터 타입이 결정됨
- 단, 변수 값이 언제든지 변할 수 있으므로 변수 값 추적 어려우며 값 확인 전에는 타입을 확신하는 것도 어렵고, 자바스크립트 엔진에 의해 암묵적으로 타입이 변경되기도 함 → 자바스크립트는 유연성은 높지만 신뢰성이 떨어지게 됨
*따라서 변수 사용 시 주의점
- 변수는 꼭 필요한 경우에 한해서만 사용
- 변수의 스코프(유효 범위)는 최대한 좁게 만들기
- 전역 변수는 최대한 사용 자제
- 변수보다는 상수 사용하여 값 변경 억제
- 변수 이름은 변수의 목적이나 의미 파악 쉽게 네이밍하기
참고 : 도서 <모던 자바스크립트 Deep Dive>