1 분 소요

표현식과 문

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.

댓글남기기