본문 바로가기
CS

[JavaScript] 표현식과 문

by cuda 2022. 10. 1.

표현식과 문

값(value)

값(value)이란, 표현식(expression)이 평가(evaluate)되어 생성된 결과를 말한다.
아래의 예시로 일련의 과정을 같이 살펴보자

// var 키워드로 인해 선언된 변수 sum에 undefined가 초기화되고,
// 이후 10 + 20이라는 표현식(expression)이 평가되어 정수 값 30을 생성한다.
// 생성된 정수 값 30은 sum 변수에 할당된다.
var sum = 20+30;

이 때, 변수에 할당되는 값은 10+20이 아닌 30이기에 10+20은 변수에 할당되기 이전에 평가되어 값을 생성해야한다.

리터럴(literal)

리터럴(literal)이란, 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용하여 값을 생성하는 표기법이다.
사람이 이해할 수 있는 문자(아라비아 숫자, 알파벳, 한글 등) 또는 미리 약속된 기호로 표기된 코드로,
자바스크립트 엔진은 런타임에 리터럴을 평가(evaluate)하여 값(value)을 생성한다

표현식(expression)

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

var height = 180; // 180은 리터럴
var sum = 20+30; // 20 + 30은 리터럴과 연산자로 구성된
height // 변수 식별자를 참조하면 변수 값으로 평가된다. 
       // 식별자 참조의 경우 값을 생성하지는 않지만 값으로 평가되기에 표현식이다.

표현식은 리터럴, 식별자(변수, 함수 등의 이름), 연산자, 함수 호출 등의 조합으로 이루어질 수 있다.
즉, 값(value)으로 평가(evaluate)될 수 있는 문(statement)은 모두 표현식(expression)이다

문(statement)

프로그램을 구성하는 기본 단위이자 최소 실행 단위이다. 이러한 문은 여러 토큰(token)으로 이루어진다.
또한, 문(statement)은 명령문이라고도 부른다. 문이 실행되면 명령이 실행되고, 무슨 일이 일어나기 때문이다.
문은 다음과 같이 구분될 수 있다.

  • 선언문
  • 할당문
  • 조건문
  • 반복문
  • etc

토큰(token)

문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.
-> 키워드, 식별자, 연산자, 리터럴, 세미콜론이나 마침표 등의 기호는 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소이기에 토큰(token)이다.

표현식인 문과 표현식이 아닌 문

표현식은 문의 일부일 수 있고, 아닐수도 있다.

// 변수 선언문은 값으로 평가될 수 없기에 표현식이 아닌 문
var height;

// 180은 표현식(리터럴)이기에 표현식인 문이다.
var height = 180;
// 10+20은 표현식이기에 표현식인 문이다.
var sum = 10 + 20;

그러나, 표현식인 문과 표현식이 아닌 문을 나누는 기준이 애매하지 않은가? 이 때에는 다음과 같은 방법으로 확실히 구분할 수 있다.

표현식인 문과 표현식이 아닌 문을 구별하는 가장 간단하고 명료한 방법은 변수에 할당해 보는 것이다.
표현식인 문은 값으로 평가되기에 변수에 할당할 수 있지만,
표현식이 아닌 문은 값으로 평가할 수 없기에 변수에 할당할 수 없다.

// 변수 선언문은 표현식이 아닌 문이기에 값처럼 사용할 수 없다.
// var person = var height; -> error

// 표현식인 문은 값처럼 사용할 수 있다.
var weight = kg = 60;
console.log(weight); // 60

*Reference : 모던 자바스크립트 deep dive(이웅모 지음, 위키북스)*

'CS' 카테고리의 다른 글

[JavaScript] 자바스크립트의 제어문  (0) 2022.10.04
[JavaScript] 자바스크립트의 데이터 타입  (1) 2022.10.04
[JavaScript] 변수(variable)란?  (0) 2022.09.28
[JavaScript] npm 살펴보기  (0) 2022.09.28
[JavaScript] nvm 살펴보기  (0) 2022.09.28

댓글