표현식과 문
표현식과 문
값
값value은 식(표현식expression)이 평가evaluate되어 생성된 결과를 말한다.
여기서 평가란 식을 해석해서 값을 생성하거나 참조하는 것을 의미한다.
// 10 + 20은 평가되어 숫자 값 30을 생성한다.
10 + 20; // 30
모든 값은 데이터 타입을 가지며, 메모리에 2진수, 즉 비트bit의 나열로 저장된다.
리터럴
리터럴literal은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법notation을 말한다.
// 숫자 리터럴 3
3;
위 예제의 3은 단순한 아라비아 숫자가 아니라 숫자 리터럴이다. 사람이 이해할 수 있는 아라비아 숫자를 사용해 숫자 리터럴 3을 코드에 기술하면 자바스크립트 엔진은 이를 평가해 숫자 값 3을 생성한다.
리터럴을 사용하면 다음과 같이 다양한 종류data type의 값을 생성할 수 있다.
리터럴 | 예시 | 비고 |
---|---|---|
정수 리터럴 | 100 | |
부동소수점 리터럴 | 10.5 | |
2진수 리터럴 | 0b01000001 | 0b로 시작 |
8진수 리터럴 | 0o101 | ES6 도입. 0o로 시작 |
16진수 리터럴 | 0x41 | ES6 도입. 0x로 시작 |
문자열 리터럴 | ‘Hello’ “World” |
|
불리언 리터럴 | true false |
|
null 리터럴 | null | |
undefined 리터럴 | undefined | |
객체 리터럴 | { name: ‘Kwon’, address: ‘Seoul’} | |
배열 리터럴 | [1, 2, 3] | |
함수 리터럴 | function() {} | |
정규 표현식 리터럴 | /[A-Z]+/g |
표현식
표현식expression은 값으로 평가될 수 있는 문statement이다. 즉, 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.
값으로 평가될 수 있는 문은 모두 표현식이다.
// 리터럴 표현식
10;
("Hello");
// 식별자 표현식(선언이 이미 존재한다고 가정)
sum;
person.name;
arr[1];
// 연산자 표현식
10 + 20;
sum = 10;
sum !== 10;
// 함수/메서드 호출 표현식(선언이 이미 존재한다고 가정)
square();
person.getName();
문
문statement과 표현식expression을 구별하고 해석할 수 있다면 자바스크립트 엔진의 입장에서 코드를 읽을 수 있고 실행 결과를 예측하는 데 도움이 된다. 이는 버그를 줄이고 코드의 품질을 높여줄 것이다.
-
문statement은 프로그램을 구성하는 기본 단위이자 최소 실행 단위이다.
-
문은 여러 토큰으로 구성된다. 토큰token이란 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.
-
문을 명령문이라고도 부른다. 즉, 문은 컴퓨터에 내리는 명령이다
표현식인 문과 표현식이 아닌 문
표현식은 문의 일부일 수도 있고 그 자체로 문이 될 수도 있다.
// 변수 선언문은 값으로 평가될 수 없으므로 표현식이 아니다.
var x;
// 1, 2, 1 + 2, x = 1 + 2 는 모두 표현식이다.
// x = 1 + 2는 표현식이면서 완전한 문이기도 하다.
x = 1 + 2;
표현식인 문과 표현식이 아닌 문을 구별하는 가장 간단하고 명료한 방법은 변수에 할당해 보는 것이다. 표현식인 문은 값으로 평가되므로 변수에 할당할 수 있다. 하지만 표현식이 아닌 문은 값으로 평가할 수 없으므로 변수에 할당하면 에러가 발생한다.
이웅모, “모던 자바스크립트 Deep Dive”, 위키북스(2020), p50-58.
댓글남기기