표현 식과 문

정태민·2024년 12월 1일
0

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

**

여기서 값이란?

값은 메모리에 저장된 데이터 그 자체 이며 모든 값은 항상 특정한 데이터 타입을 가집니다.
흔히 말하는 integer, string, long 등은 데이터 타입입니다.

int 100을 예로 들면 integer타입 값 100이라고 이야기 할 수 있습니다.
(데이터 타입은 메모리에 저장된 값을 해석하는 파서라고 볼 수 있습니다.)

그럼 평가는 뭘까요?

평가란 식을 해석해서 값을 생성하거나 참조하는 것을 의미합니다.
즉 10 + 20 은 수식으로 평가되어 숫자 30이란 값을 생성합니다.
평가에는 우선 순위가 있습니다.
20 + (10 * 30) 이 경우 10 * 30이 20 + ()보다 우선 됩니다.
평가는 데이터 타입에 따라 값이 달라집니다.
10 + "20" 은 string값으로 평가되어 "1020"의 값을 가집니다.
평가는 조건문에 따라 필요할때만 평가가 됩니다.

그럼 표현식은 자바스크립트에서 무슨 역할일까요?

표현식은 자바스크립트에서 가장 기본적인 요소 중 하나입니다.
모든 자바스크립트 코드 로직은 표현식의 평가를 기반으로 동작합니다.

	// 숫자 리터럴
    42;
    // 문자열 리터럴
    "Hello, world!";
    // 불리언 리터럴
    true;
    // 배열 리터럴
    [1, 2, 3];
    // 객체 리터럴
    { name: "Alice", age: 25 };
    // 변수 참조
    let sum = 50;
    sum; // 변수 sum을 참조

    // 객체의 속성 참조
    let person = { name: "Bob", age: 30 };
    person.name; // 객체 person의 name 속성

    // 배열의 요소 참조
    let arr = [10, 20, 30];
    arr[1]; // 배열 arr의 두 번째 요소, 결과는 20
    
    // 산술 연산
    10 + 20; // 덧셈, 결과는 30
    10 * 3;  // 곱셈, 결과는 30

    // 비교 연산
    10 > 5;  // 결과는 true
    sum === 50; // 결과는 true

    // 논리 연산
    true && false; // 결과는 false
    10 < 20 || false; // 결과는 true

    // 할당 연산
    let result;
    result = 10; // 변수 result에 10 할당
    
    // 함수 호출
    function square(x) {
      return x * x;
    }
    square(5); // 결과는 25

    // 객체 메서드 호출
    let person = {
      name: "Alice",
      greet() {
        return `Hello, ${this.name}`;
      },
    };
    person.greet(); // 결과는 "Hello, Alice"

이제 문에 대해서 알아봅시다.

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

문은 컴퓨터에게 수행할 작업을 지시하며 , 프로그램의 실행 흐름을 제어합니다.
자바스크립트는 문의 집합으로 구성되며, 실행문은 정해진 순서대로 실행됩니다.

토큰이란?

토큰은 문법적으로 더 쪼갤 수 없는 코드의 기본 요소입니다.
문은 여러개의 토큰으로 구성됩니다.

 let x  = 10; 
 //	let 변수 선언 토큰
 // x 식별자 토큰
 //= 할당 연산자 토큰
 //10 숫자 리터럴
 //; 구분자

문은 어떤 역할을 할까?

문은 역할에 따라 선언문, 할당문, 조건문, 반복문 등으로 구분할 수 있습니다.

	// 선언문
    // 변수 선언문
    let x;

    // 함수 선언문
    function greet() {
      console.log("Hello, world!");
    }

    // 클래스 선언문
    class Person {
      constructor(name) {
        this.name = name;
      }
    }
    
    //할당 문
    x = 10; // 할당문 (변수 x에 값 10을 저장)

    // 표현식을 활용한 할당
    let y = x + 5; // x + 5의 결과(15)를 y에 할당
    
    //조건문
    let x = 10;

    // 단일 조건문
    if (x > 5) {
      console.log("x는 5보다 큽니다");
    }

    // 조건 분기
    if (x > 10) {
      console.log("x는 10보다 큽니다");
    } else {
      console.log("x는 10 이하입니다");
    }

    // 여러 조건 분기
    if (x > 15) {
      console.log("x는 15보다 큽니다");
    } else if (x > 5) {
      console.log("x는 5보다 크고 15 이하거나 같습니다");
    } else {
      console.log("x는 5 이하거나 같습니다");
    }
    
    // 반복문
    
    // for 반복문
    for (let i = 0; i < 5; i++) {
      console.log(i); // 0, 1, 2, 3, 4 출력
    }

    // while 반복문
    let count = 0;
    while (count < 3) {
      console.log(count);
      count++;
    }

    // do-while 반복문
    let n = 0;
    do {
      console.log(n);
      n++;
    } while (n < 2);
	
    // 제어문
    
    // break 문
    for (let i = 0; i < 10; i++) {
      if (i === 5) break; // i가 5이면 반복문 종료
      console.log(i);
    }

    // continue 문
    for (let i = 0; i < 10; i++) {
      if (i % 2 === 0) continue; // 짝수는 건너뜀
      console.log(i); // 홀수만 출력
    }

    // return 문
    function square(x) {
      return x * x; // 함수 실행 종료 후 결과 반환
    }
    console.log(square(4)); // 16 출력
	
    

세미콜론 자동 삽입 기능 (ASI; Automatic Semicolon Insertion)

Javasciprt는 문의 끝을 나타내는 (;)을 굳이 작성하지 않아도, 자동 삽입 기능을 통해 암묵적으로 추가합니다. 이는 의도지 않는 오류를 불러오기 때문에 동작 원리를 이해해야 합니다.

(;)의 자동 삽입이 발생 하는 경우

	let x = 5
    let y = 5
    
    console.log(x + y)

	// 줄 바꿈이 있는 경우 문이 끝났다고 생각하여 모든 문에 ;가 자동적으로 붙습니다.
	
	let x = 5 [x, y] = [1,2]
    
    // 문법 오류 방지의 차원에서 문에 ;가 붙습니다.
    
    var foo() {
      console.log('foo hi')
    }
    //{} 블록 자체가 종결성을 가지는 구조이기 때문에 , 코드 블록이 종료 된 뒤에는 세미콜론이 추가되지 않습니다. 

0개의 댓글