자바스크립트 개념정리

표현식 & 문 (모던 자바스크립드 Deep Dive 5장)

ecoEarth 2022. 10. 14. 01:13

값(value)

'값'이란 식(표현식)이 평가되어 생성된 결과를 말한다. 이때 평가란 식을 해석해서 값을 생성하거나 참조하는 것을 의미한다.

  • 모든 값은 데이터 타입을 가지며, 메모리에 2진수, 즉 비트의 나열로 저장된다. 이때 비트의 나열로 저장된 값은 데이터 타입에 따라 다르게 해석될 수 있다. 예를 들어, 비트의 나열 0100 0001을 숫자로 해석하면 65지만 문자로 해석하면 A이다.
  • 변수란 하나의 '값'을 저장하기 위해 확보한 메모리 공간 자체 혹은 그 메모리 공간을 식별하기 위해 붙인 이름이다. 따라서 변수에 할당되는 것은 오직 '값'밖에 없다.

 

리터럴(literal)

'리터럴이란 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법(식)을 의미한다.

  • 코드에 적힌 숫자 3은 자바스크립트엔진이 실행되기전까지는 리터럴에 불과하며, 코드가 실행되는 시점인 '런타임'에 엔진이 리터럴값 3을 평가한 뒤에야 비로소 숫자 값 3이 되는 것이다.

 

리터럴의 종류는 다음과 같다.

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

 

표현식(expression)

'표현식'은 값으로 평가(생성하거나, 참조)될 수 있는 문(statement)-(명령문과 동의어)은 모두 표현식이다.

  • 앞서 살펴본 리터럴은 약속된 기호를 사용하여 값을 생성하는 표기법이라 했다. 값을 생성하기에 리터럴 역시 하나의 표현식이다.
  • 표현식은 리터럴, 식별자(변수, 함수, 클래스등의 이름), 연산자, 함수 호출 등의 조합으로 이뤄질 수 있다. 다음 예시를 통해 확인해보자.
  • 표현식과 표현식으로 평가된(값을 생성하거나 참조된) 값은 동치(equivalent)관계이다. 따라서 표현식은 문법적으로 값이 존재해야 할 곳에 값처럼 사용할 수 있다는 것이다.

 

예제1)

let score 50 + 60;

50 + 60은 정수 리터럴과 연산자로 이루어져 있다. 하지만 평가되어 100이라는 숫자'값'을 생성하므로 표현식이다.

 

예제2)

score;	//선언이 이미 존재한다고 가정

이미 선언된 변수 식별자를 참조하면 변수 값으로 평가된다. 값을 생성하는 것은 아니지만 참조하여 값으로 평가되므로 표현식이다.

 

예제3)

var x = 1 + 2;
// 식별자 표현식 x는 평가(참조)되어 3이란 값과 동일하다.
x + 3; // 6이 출력됨

x란 식별자 표현식과 식별자가 참조해낸 값 3은 완벽히 동치관계이다. 따라서 문법적으로 표현식과 값중 어느 하나를 사용하더라도 언제나 같은 결과가 나온다. 이처럼 표현식은 다른 표현식의 일부가 되어 새로운 값을 만들어낼 수 있다.

 

문(statement)

'문'이란 프로그램을 구성하는 기본 단위이자 최소 실행 단위이다.

  • 이러한 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍이며, 문의 집합으로 이뤄진 것이 바로 프로그램이다.
  • 문은 명령문과 동일한 의미를 가진다. 즉, 문이란 컴퓨터에 내리는 명령이므로 문이 실행되면 명령이 실행되고 어떠한 결과가 일어난다.
  • 토큰(token)이란 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소이며 토큰의 집합으로 문이 구성된다.

expression and statement

문의 종류는 다음과 같다.

문의 종류 예시
변수 선언문 var x;
let x;
const x;
할당문 x = 5;
함수 선언문 function example( ) { }
조건문 if (x > 1) { console.log(x); }
반복문 for (var i = 0; i < 2; i++) { console.log(i); }

 

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

문은 '표현식이므로 값으로 평가될 수 있는 문'과 '표현식이 아니므로 값으로 평가될 수 없는 문'으로 나눌 수 있다.

  • 이 둘을 구별하는 명료한 방법은 변수에 할당해보는 것이다. 변수에 할당되는 것은 오직 '값'이기 때문이다.
var foo = var x; // SyntaxError: Unexpected token var
// 변수 선언문은 표현식이 아닌 문이다. 표현식이 아닌 문은 값처럼 사용할 수 없다.

x = 100;
// 할당문은 그 자체가 표현식이지만 완전한 문이기도 하다. 즉, 할당문은 표현식인 문이다.

var foo = x = 100;
console.log(foo); // 100
//  표현식인 문인 할당문은 할당한 값으로 평가된다. 표현식인 문은 값처럼 사용할 수 있다.