서론
Statement는 한글로 '문'이고,
Expression은 한글로 '표현식'이다.
프로그래밍을 해봤다면 조건'문', 반복'문' 등을 필히 들어 봤을 것이다.
또한 '표현식'도 분명 들어봤을 것이다.
Statement(문), Expression(표현식)에 대해 설명을 할 수 있는가?
목표
- Statement와 Expression의 차이점에 대해 이해한다.
- Expression의 특징 때문에 일어나는 일을 이해한다.
Statement란?
프로그램을 구성하는 기본 단위이자 최소 실행 단위
선언'문', 조건'문', 반복'문' 처럼 하나의 최소 실행 단위이다.
;(세미콜론)은 하나의 Statement가 종료 되었음을 의미하는 것이다.
조건문이나 반복문은, {}(중괄호)를 이용해서 범위를 표현하지 않는가?
이를 block-statement(블록문)이라 부르고, 이는 하나의 statement이며 최소 실행 단위이지 최소 문이 아니다.
if (x > 5) {
// 이 블록 전체가 하나의 Statement로 취급
console.log("Block start");
x = x + 1;
}
block-statement는 여러 statement를 모은, 하나의 statement이다.
한번에 여러 statement를 실행할 뿐, 여전히 최소 실행 단위이다.
단순하다.
block-statement는 기호 자체적으로 닫는 표기가 있으므로
statement의 끝이 자명하기 때문에 굳이 표기할 이유가 없다.
let person = {
name: "Tagite"
};
좋은 지적이다.
위의 {}(중괄호)는, block-statement가 아니다!
위의 {}(중괄호)는, expression이기 때문에 ;를 붙여야 한다.
이제, 의문점은 두 개로 늘어나버렸다!
1. expression이란 무엇인가?
2. {}(중괄호)가 block인지 expression인지 컴퓨터는 어떻게 구분하지?
자 이제, expression에 대해서 알아볼까?
Expression은 특수한 Statement이다.
Statement가 더 상위 개념이다.
모든 Expression은 Statement이다.
하지만, 모든 Statement는 Expression이 아니다.
Expression은 특수한 Statement 라는 것이다!
Expression은 evaluate되어 value가 될 수 있는 Statement이다.
evaluate(평가)는, statement를 실행하여 결과를 얻는 것이다.
다음 이미지를 보자.
위의 이름은 REPL(Read-Eval-Print-Loop)이다.
읽고, 평가하고, 출력하는 루프라는 직관적인 이름이다.
위의 REPL 출력 내용을 보면
var a = 1 + 2; 에는 undefined라고 출력되는 것이 보인다.
즉 evaluate를 할 때 값이 없는게 있고, 있는게 있다.
값이 있으면, expression이고,
값이 없으면, expreesion이 아니다.
var a = b = 3;
var a = var b = 3;
위의 형태로는 연쇄 할당이 가능한데
아래의 형태로 연쇄 할당이 불가능한 이유는 evalute시에 value가 없기 때문이다.
결론
expression인 statement는,
중의적 표현이라 컴파일러가 판별해야 할 때, 따지는 요소가 된다.
js에서 block-statement와 객체 리터럴 둘 다 {} 문자를 사용하는데 컴퓨터는 어떻게 구분할까?
컴파일러는 expression인지의 여부를 따진다.
중의적인 표현을 판별할 때
expression이 들어갈 자리인지, 아닌지에 따라서 다르게 해석한다.
그라고 함수의 선언문인지 표현식인지도 expression인지에 따라 컴파일러가 해석한다.
'프로그래밍 > 기본기' 카테고리의 다른 글
Variable 회고 일지 (1) | 2025.01.22 |
---|---|
[작성 중] 적절하게 좋은 아키텍처를 향해 (0) | 2025.01.17 |