ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (x = 1) + 5 는 왜 가능한가? 할당문이 값으로 평가되는 이유
    개발/자바스크립트로의 깊은 잠수 2026. 3. 11. 21:35

    자바스크립트에서의 할당문은 값으로 평가되는 표현식입니다.

     

    let x; // 변수 x 선언
    console.log((x = 1) + 5); // 6 을 출력한다

     

    왜 이런 짓이 가능하도록 만들어졌을까요?

     

     

    표현식과 문

    알아보기에 앞서 표현식과 문이 무엇인지에 대한 정의를 짚어 보겠습니다.

     

    `let x;` 는 변수 선언문입니다.

    `x = 1;` 은 할당문임과 동시에 표현식입니다.

     

    표현식(expression)은 값으로 평가될 수 있는 문(statement)이다. 즉, 표현식이 평가되면 새로운 값을 생성하거나 기존 값을 참조한다.
    - 이웅모, 『모던 자바스크립트 Deep Dive』, 위키북스, 2020, p.52

     

    따라서 문보다 표현식이 더 좁은 개념이라고 볼 수 있습니다.

    문은 무엇일까요? 정의는 아래와 같이 할 수 있습니다.

     

    문(statement)은 프로그램을 구성하는 기본 단위이자 최소 실행 단위다. 문의 집합으로 이뤄진 것이 바로 프로그램이며, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍이다.
    - 이웅모, 『모던 자바스크립트 Deep Dive』, 위키북스, 2020, p.54

     

    문은 또한 선언문, 할당문, 조건문, 반복문 등으로 구분할 수 있습니다.

     

     

     

    왜 할당문은 표현식이 되었나

    얼핏 보면 할당문은 값으로 평가될 필요가 없어 보입니다.

    할당문의 목적 자체가 변수에 값을 할당하는 것인데, 할당하는 행위가 왜 또 값으로 평가되는 걸까요?

    그냥 아래와 같이 쓰면 안되는 걸까요?

     

    let x; // 변수 x 선언
    x = 1; // x에 1을 할당
    console.log(x + 5); // 6 을 출력한다

     

    맨 위에 쓴 코드보다 이해하기도 쉽고, 읽기도 쉬워 보입니다.

     

    그런데 이게 찾아보니 나름대로 이유가 있었습니다.

     

    C-like language

    자바스크립트는 C로부터 많은 영향을 받은 언어입니다.

    C가 만들어지던 1972년 당시의 언어 디자이너들은 언어를 만들기 위해 간결한 문법, 컴파일 친화성, 기계어와의 밀접한 연결성, 유연성 등을 중점적으로 고려했습니다.

     

    이 시기의 많은 초기 언어들은 운영체제나 컴파일러같은 저수준(low-level) 처리를 위해 만들어졌어요. 따라서 코드 문법도 이런 저수준 처리가 유리하도록 개발되었습니다.

    할당문이 값으로 평가되도록 하면 아래와 같은 패턴이 가능했습니다.

     

    while ((c = getchar()) != EOF) { ... }

     

    코드 라인을 별도로 추가하지 않더라도 값을 읽어서 바로 while문에 집어넣는 문법이 가능한 것입니다.

    꽤 엘레강스하고 효율적입니다.

    특히 이때는 메모리가 부족하던 시절이기 때문에 코드를 짧게 쓰는 것도 의미가 있었습니다.

     

    그리고 아래와 같은 할당 체이닝(chaining)도 가능했습니다.

     

    a = b = c = 0;
    // c = 0이 0으로 평가되고, b = (평가값)이 평가되고, 다시 a = (평가값)이 되는 구조

     

    이런 간결한 표현식을 중요한 가치로 뒀던 시절입니다.

     

    그리고 이런 언어 디자인은 CPU 친화적이기도 합니다.

    CPU는 내부적으로 이런 짓을 합니다.

    1. 값 연산

    2. 어딘가에 저장 (레지스터라든지..)

    3. 저장한 값을 결과로 사용

     

    연산의 결과를 어딘가에 저장하고, 값으로 사용하는 이 과정 자체가 할당식을 값으로 사용하는 패턴과 굉장히 비슷합니다.

    그래서 C언어도 이런 식으로 디자인 된 것입니다.

     

    그럼 자바스크립트는 왜 C-like language가 되었느냐.

    자바스크립트의 개발자 브랜든 아이크는 필요에 의해 열흘만에 자바스크립트를 만들었다고 알려져 있습니다.

    그래서 기존 개발자들에게 친숙하게 다가갈 수 있는 언어 설계가 필요했습니다.

    당시의 개발자들에게 가장 친숙한 언어는 C언어였습니다.

    그래서 많은 부분을 C로부터 차용했고, 그래서 서로 닮아 있어요.

     

     

    댓글

Copyright 2022. ProdYou All rights reserved.