표현식(expression)과 문(statement)

양은지·2023년 6월 27일
1

JavaScript

목록 보기
30/31

표현식과 문

값(value)

값은 식(표현식, expression)이 평가(evaluation)되어 생성된 결과를 말한다.
평가란 식을 해석해서 값을 생성하거나 참조하는 것을 의미한다.
변수란 하나의 값을 저장하기 위해 확보한 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름을 말하며, 변수에 할당(assignment)되는 것은 값이다.

10 + 20 // 30
// 10 + 20은 평가되어 숫자 값 30을 생성

리터럴(literal)

리터럴은 사람이 이해할 수 있는 문자, 숫자 또는 약속된 기호를 사용해 값을 생성하는 표기법(notation)을 말한다. (3 이라는 아라비아 숫자도 숫자 리터럴이다)
사람이 이해할 수 있는 아라비아 숫자를 사용해 숫자 리터럴 3을 코드에 기술하면 Javascript Engine은 이를 평가해 숫자 값 3을 메모리에 저장한다.

100 // 정수 리터럴
10.5 // 부동소수점 리터럴
0b01000001 // 2진수 리터럴(0b로 시작)
0o101 // 8진수 리터럴(0o로 시작)
0x41 // 16진수 리터럴(0x로 시작)
'Hello' "World" // 문자열 리터럴
true false // 불리언 리터럴
null // null 리터럴
undefined // undefined 리터럴
{ name: 'Lee', address: 'Seoul' } // 객체 리터럴
[ 1, 2, 3 ] // 배열 리터럴
function() {} // 함수 리터럴
/[A-Z]+/g // 정규 표현식 리터럴

표현식(expression)

표현식은 값으로 평가될 수 있는 문(statement)이다. 즉, 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.

// 리터럴 표현식
10
'Hello'

// 식별자 표현식(선언이 이미 존재한다고 가정)
sum
person.name
arr[1]
x + 3

// 연산자 표현식
10 + 20
sum = 10
sum !== 10

// 함수/메서드 호출 표현식(선언이 이미 존재한다고 가정)
square()
person.getName()

즉, 표현식은 평가 후 그 자리에 "값"을 남긴다. 따라서 표현식은 다른 표현식/문의 일부 값으로 사용될 수 있다.

문(statement)

문은 프로그램을 구성하는 기본 단위이지 최소 실행 단위다. 문의 집합으로 이뤄진 것이 바로 프로그램이며, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍이다.
문은 여러 토큰으로 구성되는데 토큰(token)이란 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.

// token은 var, sum, =, 1, +, 2, ; 로 나눌 수 있다
var sum = 1 + 2;

문은 컴퓨터에 내리는 명령이라고 해서 명령문으로도 부른다.
문은 선언문, 할당문, 조건문, 반복문 등으로 구분할 수 있다.

// 변수 선언문
var x;

// 할당문
x = 5;

// 함수 선언문
function foo() {}

// 조건문
if (x > 1) { console.log(x); }

// 반복문
for (var i = 0; i < 2; i++) { console.log(i); }
var x; // 변수 선언문은 값으로 평가될 수 없으므로 표현식이 아니다.
x = 1 + 2; // x=1+2는 표현식이면서 완전한 문이기도 하다.

var foo = var x; // 표현식이 아닌 문은 값처럼 사용할 수 없다.
foo = x = 3
console.log(foo); // 3, 할당문은 그 자체가 문이기도 하면서 표현식이기도 하므로 값처럼 사용할 수 있다.

크롬 개발자 도구에서 표현식을 출력할 경우 평가된 값을 반환하지만, 표현식이 아닌 문을 실행하면 언제나 undefined를 출력하는데 이는 평가된 결과 갑이 아닌 완료 값이라 한다.

문과 표현식을 구별하고 해석할 수 있다면 JavaScript Engine의 입장에서 코드를 읽을 수 있고 실행 결과를 예측하는 데 도움이 된다. 이는 버그를 줄이고 코드의 품질을 높여줄 것이다.

Reference

  • 모던 자바스크립트 Deep Dive - 이웅모 지음
profile
eunji yang

0개의 댓글