1. 값
값(value)은 식(표현식 expression)이 평가(evalute)되어 생성된 결과를 말한다.
변수는 하나의 값을 저장하기 위해 확보된 메모리 공간 자체 또는 그 메모리 공간을 식별하기 위해 붙인 이름이라고 한다. 따라서 변수에 할당되는 것은 값이다.
// 변수에는 10 + 20이 평가되어 생성된 숫자 값 30이 할당된다.
let sum = 10 + 20;
위 예제의 sum 변수에 할당된 것은 10 + 20이 아니라 10 + 20이 평가된 결과인 숫자 값 30이다. 즉, 변수 이름 sum이 기억하는 메모리 공간에 저장된 것은 10 + 20이 아니라 값 30이다. 따라서 10 + 20은 할당 이전에 평가되어 값을 생성해야 한다.
다양한 방법으로 값을 생성할 수 있지만, 가장 기본적인 방법은 리터럴을 사용하는 것이다.
2. 리터럴
리터럴(literal)은 사람이 이해할 수 있는 문자 또는 약속된 기호를 사용해 값을 생성하는 표기법을 말한다.
// 숫자 리터럴 3
3
위 예제의 3은 단순한 아라비아 숫자가 아니라 숫자 리터럴이다. 사람이 이해할 수 있는 아라비아 숫자를 사용해 숫자 리터럴 3을 코드에 기술하면 자바스크립트 엔진은 이를 평가해 숫자 3을 생성한다.
이처럼 리터럴은 사람이 이해할 수 있는 문자(아라비아 숫자, 알파벳, 한글 등) 또는 미리 약속된 기호('', "", ., {}, // 등)로 표기한 코드이다.
자바스크립트 엔진은 코드가 실행되는 시점인 런타임에 리터럴을 평가해 값을 생성한다. 즉 리터럴은 값을 생성하기 위해 미리 약속한 표기법이라고 할 수 있다.
2-1. 리터럴의 종류
1. 숫자 리터럴(Numeric Literal)
- 정수와 부동소수점을 포함한다.
- 예, 42, 3.14, -0.99
let integer = 42; // 정수 리터럴
let float = 3.14; // 부동소수점 리터럴
2. 문자 리터럴(String Literal)
- 작은따옴표(') 또는 큰따옴표(")로 묶어 표현한다.
- 예: 'Hello, World!', 'JavaScript'
let greeting = "Hello, World!"; // 문자열 리터럴
let name = 'Alice'; // 문자열 리터럴
3. 불리언 리터럴(Boolean Literal)
- 참(true) 또는 거짓(false)을 나타낸다.
- 예: true, false
let isActive = true; // 불리언 리터럴
let isLoggedIn = false; // 불리언 리터럴
4. 객체 리터럴(Object Literal)
- 중괄호('{}')를 사용하여 키-값 쌍의 집합을 표현합니다.
- 예: { name: 'John', age: 30 }
let person = {
name: 'John',
age: 30
}; // 객체 리터럴
5. 배열 리터럴(Array Literal)
- 대괄호('[]')를 사용하여 값의 목록을 표현합니다
- 예: [1, 2, 3], ['apple', 'banana', 'cherry']
let numbers = [1, 2, 3]; // 배열 리터럴
let fruits = ['apple', 'banana', 'cherry']; // 배열 리터럴
6. 정규 표현식 리터럴(RegExp Literal)
- 슬래시(/)로 감싸서 정규 표현식을 표현합니다.
- 예: /\d+/, /[a-z]/i
let regex = /\d+/; // 정규 표현식 리터럴
7. 템플릿 리터럴 (Template Literal)
- 백틱(`)으로 감싸서 문자열을 표현하며, 표현식 삽입이 가능합니다.
- 예: `Hello, ${name}!`
let name = 'Alice';
let greeting = `Hello, ${name}!`; // 템플릿 리터럴
8. 특수 리터럴 (Special Literals)
- null, undefined 등 특별한 의미를 가진 리터럴.
- 예: null, undefined
let nothing = null; // 특수 리터럴
let notDefined; // undefined 리터럴 (초기화하지 않음)
3. 표현식
표현식(expression)은 값으로 평가될 수 있는 문(statement)이다. 즉, 표현식이 평가되면 새로운 값을 생성하거나 기존값을 참조한다.
표현식은 리터럴, 식별자(변수, 함수 등의 이름), 연산자, 함수 호출 등의 조합으로 이뤄질 수 있다. 다양한 표현식이 있지만 평가된다는 점에서 모두 동일하다. 즉, 값으로 평가될 수 있는 문은 모두 표현식이다.
// 리터럴 표현식
10
'Hello'
// 식별자 표현식(선언이 이미 존재한다고 가정)
sum
person.name
arr[1]
// 연산자 표현식
10 + 20
sum = 10
sum !== 10
// 함수/메서드 호출 표현식(선언이 이미 존재한다고 가정)
square()
person.getName()
표현식은 값으로 평가된다. 이때 표현식과 표현식이 평가된 값은 동등한 관계, 즉 동치(equivalent)이다. 예를 들어 수학 수식 1 + 2 = 3에서 1 + 2는 3과 동치이다. 즉, 1 + 2는 3과 같다고 할 수 있다. 자바스크립트의 표현식 1 + 2는 평가되어 값 3을 생성하므로 표현식 1 + 2와 값 3은 동치이다. 따라서 표현식은 값처럼 사용할 수 있다. 이것은 문법적으로 값이 위치할 수 있 자리에는 표현식도 위치할 수 있다는 것을 의미한다.
let x = 1 + 2;
// 식별자 표현식 x는 3으로 평가된다.
x + 3; // 6
위 예제의 x + 3은 표현식이다. + 연산자는 좌항과 우항의 값을 산술 연산하는 연산자이므로 좌항과 우항에는 숫자 값이 위치해야 한다. 이때 좌항 x는 식별자 표현식이다. 즉, x는 할당되어 있는 숫자 값 3으로 평가된다. 따라서 숫자 값이 위치해야 할 자리에 표현식 x를 사용할 수 있다. 이처럼 표현식은 다른 표현식의 일부가 되어 새로운 값을 만들어낼 수 있다.
4. 문(Statement)
문(statement)은 프로그램을 구성하는 기본 단위이자 최소 실행 단위이다. 문의 집합으로 이뤄진 것이 바로 프로그램이며, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍이다.
문은 여러 토큰으로 구성된다. 토큰(token)이란 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소를 의미한다.
예를 들어, 키워드, 식별자, 연산자, 리터럴, 세미콜론(;), 마침표(.) 등의 특수기호는 문법적인 의미를 가지며, 문법적으로 더 이상 나눌 수 없는 코드의 기본 요소이므로 모두 토큰이다.
문은 명령문이라고도 부른다. 즉 문은 컴퓨터에 내리는 명령이다. 문이 실행되면 명령이 실행되고 무슨일이 일어난다.
문은 선언문, 할당문, 조건문, 반복문 등으로 구분할 수 있다. 변수 선언문을 실행하면 변수가 선언되고, 할당문을 실행하면 값이 할당된다. 조건문을 실행하면 지정한 조건에 따라 실행할 코드 블록({ ... })이 결정되어 실행되고, 반복문을 실행하면 특정 코드 블록이 반복 실행된다.
// 변수 선언문
let x;
// 할당문
x = 5;
// 함수 선언문
function zoo () {}
// 조건문
if(x > 1) { console.log(x); }
// 반복문
for (let i = 0; i < 2; i++) { console.log(i); }
5. 표현식인 문과 표현식이 아닌 문
// 변수 선언문은 값으로 평가될 수 없으므로 표현식이 아니다.
let x;
// 1, 2, 1 + 2, x = 1 + 2는 모두 표현식이다.
// x = 1 + 2는 표현식이면서 완전한 문이기도 한다.
x = 1 + 2;
표현식인 문으로 값으로 평가될 수 있는 문이며, 표현식이 아닌 문은 값으로 평가될 수 없는 문을 말한다. 예를 들어, 변수 선언문은 값으로 평가될 수 없다. 따라서 표현식이 아닌 문이다.
하지만 할당문은 값으로 평가될 수 있다. 표현식인 문이다.
표현식의 문과 표현식이 아닌 문을 구별하는 가장 간단하고 명료한 방법은 변수에 할당하는 것이다.
6. 표현식과 문의 차이
특징 | 표현식(Expression) | 문(Statement) |
값으로 평가 | 예, 항상 값으로 평가됩니다. | 아니요, 항상 평가되지 않습니다. |
사용 목적 | 값을 생성하고 계산합니다. | 프로그램의 흐름을 제어하고 특정 작업을 수행합니다. |
예시 | 1 + 1, "Hello" + "World", x * y | let x = 5;, if (true) {}, for () {} |
결과 | 값 (예: 2, "Hello World") | 실행 (예: 변수 선언, 조건 실행) |
'JavaScript' 카테고리의 다른 글
[모던자바스크립트 Deep Dive] 7장. 연산자(operator) (1) | 2024.08.14 |
---|---|
[모던자바스크립트 Deep Dive] 6장. 데이터 타입(Data Type) (0) | 2024.08.13 |
[모던자바스크립트 Deep Dive] 4장. 변수 (0) | 2024.08.07 |
JavaScript 함수 (0) | 2024.04.08 |
JavaScript 제어문 (1) | 2024.03.25 |