[모던 자바스크립트 Deep Dive] 5장 표현식과 문

dayannne·2023년 3월 4일
0
post-thumbnail

이해를 위해 언급될 단어의 의미를 미리 짚고 넘어가자.

  • 리터럴(literal) : 사람이 이해할 수 있는 문자 또는 기호를 사용해 값을 생성하는 표기법(notation)
  • 문(statement) : 프로그램을 구성하는 최소 실행단위
  • 표현식(expression) : 식, 평가될 수 있는 문
  • : 표현식(식)이 평가되어 생성된 결과
  • 평가 : 식을 해석해서 값을 생성하거나 참조하는 것

1. 값

: (리터럴 등의)표현식이 평가되어 생성된 결과
모든 값은 데이터 타입(number,string...)을 가지며, 메모리에 2진수, 즉 비트의 나열로 저장된다.
ex) 0100 0001 = 65 = A

10+20; // --> 30

10 + 20의 식이 평가되어 숫자 값 30을 생성한다.

var sum = 10 + 20;

변수 'sum'에 10 + 20이 평가되어 생성된 숫자 값 30이 할당된다.
변수에 할당되는 것이 바로 이다.
값의 가장 기본적인 생성 방법은 '리터럴'을 사용하는 것이다


2. 리터럴

리터럴(literal)
: 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법(notation)

사람이 이해할 수 있는 문자인 아라비아 숫자(1,2,3) / 알파벳(a,b) / 한글(가,나)
또는 미리 약속된 기호인 " ", ., [], {}, //
등을 표기한 코드를 말한다.

자바스크립트 엔진은 코드가 실행되는 시점인 런타임에 리터럴을 평가해 값을 생성한다.


3. 문

문(statement)

  • 프로그램을 구성하는 최소 실행 단위.
  • 문은 여러 토큰으로 구성된다.
  • 토큰(token) : 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소
-[var sum = 1 + 2]
- 토큰 [var] [sum] [=] [1] [+] [2]
  • 컴퓨터에게 내리는 명령으로, 명령문이라고도 부른다.
    • 선언문 / 할당문 / 조건문 / 반복문

5.3 표현식

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

표현식 종류

  • 리터럴 표현식 10 'hello'
  • 식별자 표현식 sum person.name arr[1]
  • 연산자 표현식 10 + 20 sum = 10 sum !== 10
  • 함수/메서드 호출 표현식(선언이 이미 존재한다고 가정)
    squre() person.getName
var score = 100;

1) 100은 리터럴이다. 리터럴 100은 자바스크립트 엔진에 의해 평가되어 값을 생성하므로 리터럴 그 자체로 표현식이다.(리터럴)
**

var score = 50 + 50;

2)50 + 50이 평가되어 숫자 값 100을 생성하므로 표현식이다.(연산자)

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

3) 변수 식별자를 참조하면 변수 값으로 평가된다. 값을 생성하지는 않지만 값으로 평가되므로 표현식이다.(선언자)

동치(equivalent)

var x = 1 + 2;

//식별자 표현식 x는 3으로 평가된다.
x + 3; // -> 6

산술 연산자 +는 좌항과 우항의 값을 연산하는 표현식이므로 양쪽 모두 숫자 값이 위치해야 한다.
그러나 이처럼 x가 할당되어 있는 숫자 값 3으로 평가되는 경우,
+ 연산자의 좌항에 숫자가 아닌 표현식x가 위치할 수 있다.

이렇게 '표현식'과 '표현식이 평가된 값'은 동등한 관계, 즉 동치(equivalent)가 되며,
이것은 문법적으로 '값이 위치할 수 있는 자리'에는 표현식도 위치할 수 있다는 것을 의미한다.


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

'표현식인 문'과 '표현식이 아닌 문'을 구별하는 가장 간단하고 명료한 방법은 변수에 할당해 보는 것이다.

// 선언문은 '표현식이 아닌 문'이다.
var x;
var foo = var x; // -->  SyntaxError: Unexpected token var

위 코드와 같은 변수 선언문은 값으로 평가될 수 없으므로 표현식이 아니다.
따라서 변수 x를 값처럼 사용할 수 없다.

그렇다면 다음 코드를 보자.

// 할당문은 그 자체가 표현식이면서 완전한 문이기도 하다. 따라서 할당문은 '표현식인 문'이다.
x = 100;
var foo = x;
console.log(foo) // --> 100

위 코드의 할당문인 x = 100은 그 자체가 표현식이다. 즉, 값처럼 사용할 수 있다.


출처 : 이웅모, 『모던 자바스크립트 deep dive』, 위키북스(2020), p50-58.

profile
☁️

0개의 댓글