모던 자바스크립트 Deep Dive

[TIL/모던 자바스크립트 Deep Dive] 2023/03/09

5. 표현식과 문(Expression&Statement) 5-1. 값(Value) > 값? '값'이라는 용어는 자바스크립트에서만 등장하는 용어는 아니다. 컴퓨터 공학 전반에서 사용되는 용어이기에 정의를 정확하게 학습해야 할 필요가 있다. '값'이란 무엇일까? 책

2023년 3월 9일3min read

5장. 표현식과 문(Expression&Statement)

5-1. 값(Value)

값?

'값'이라는 용어는 자바스크립트에서만 등장하는 용어는 아니다. 컴퓨터 공학 전반에서 사용되는 용어이기에 정의를 정확하게 학습해야 할 필요가 있다. '값'이란 무엇일까?

책에서는, 값이란 '식(표현식)이 평가되어 생성된 결과'라고 정의한다.

'10+20'이라는 식이 평가되어 숫자 값 '30'을 생성한 것이라고 말할 수 있어야 한다. "'10+20'이 '10+20'이지 ㄹㅇㅋㅋ"와 같은 대답은 지양하도록 하자!

변수에 할당되는 것은?

변수는 하나의 값을 저장하기 위해 확보한 '메모리 공간 자체' 또는 그 '메모리 공간을 식별하기 위해 붙인 이름'이라고 배웠다. 이 문장도 저번에는 이해했다고 생각했다.

위 이미지와 같은 코드를 볼 때, 변수의 정의를 학습했음에도 "'10+20'을 sum이라는 변수에 할당했네~"라는 식으로 얘기했다. 변수의 정의를 정확히 이해하지 못한 것이다.

'sum 변수'에 할당되는 것은 '10+20'이 아니라 '평가되어 생성된 결과'인 30이다. 즉, sum이 기억하는 메모리 공간에 저장된 것은 30이다.

값을 다양한 방법으로 생성할 수 있지만, 가장 기본적인 방법은 리터럴을 사용하는 것이다.

5-2. 리터럴(Literal)

리터럴의 정의

리터럴(literal)은 '사람이 이해할 수 있는 문자' 또는 '약속된 기호'를 사용해 값을 생성하는 '표기법'을 말한다. <--라고 책이 말했다.

리터럴의 정의

소제목이 동일한 것은 실수가 아니다. 학문적인 설명으로는 리터럴이 무엇인지 이해할 수 없었다.

흰 티에 청바지를 입은 어떤 사람(변수)이 있다. 이 사람의 직업이 무엇인지 알 수 없다(undefined). 피팅룸에 들어가서 경찰 제복을 입고 나오면 경찰임을 알게 되고, 군복을 입고 나오면 군인임을 알 수 있다. 이때 종류별 옷이 바로 리터럴이다.

리터럴 기준에서 변수를 보면, 리터럴은 변수의 형(type)을 정하는 능력이 있는 것이다.

하단의 링크를 참조했다. 리터럴을 이해하기에 가장 적절한 비유가 담겨있는 것 같다. https://tiboy.tistory.com/685

5-3. 표현식(Expression)

표현식(expression)은 '값으로 평가될 수 있는 문(statement)'이다.

5-4. 문(Statement)

토큰(Token)은 문법적으로 더 이상 나눌 수 없는 '코드의 기본 요소'를 의미한다. 가령, 키워드, 식별자, 연산자, 리터럴, 세미콜론(;) 등이 모두 토큰에 해당한다.

여러 토큰의 합이 '문(statement)'이다. '문(statement)'은 '프로그램을 구성하는 기본 단위'이자 '최소 실행 단위'이다.

문의 집합이 프로그램이고, 문을 작성하고 순서에 맞게 나열하는 것이 프로그래밍이다.

문을 '명령문'이라고도 부른다. 문은 곧 컴퓨터에 내리는 명령이다. 문의 종류에는 위와 같은 것들이 있다.

5-5. 세미콜론(Semicolon)과 세미콜론 자동 삽입 기능(Automatic Semicolon Insertion)

세미콜론(;) 사용

세미콜론(;)은 문의 종료를 나타낸다. 문을 끝낼 때에는 세미콜론을 붙여야 한다. 다만, 0개 이상의 문을 중괄호로 묶은 코드 블록({...}) 뒤에는 세미콜론을 붙이지 않는다. 이러한 코드 블록은 언제나 문의 종료를 의미하는 '자체 종결성(self-closing)'을 갖기 때문이다.

세미콜론 자동 삽입 기능(ASI)

그런데 세미콜론을 입력하지 않아도, 해당 내용을 저장하면 그와 동시에 문의 끝이라고 예측되는 지점에 자동적으로 세미콜론이 붙는다. 이러한 자바스크립트 엔진의 수행을 '세미콜론 자동 삽입 기능(ASI)'라고 한다.

세미콜론 자동 삽입 기능의 동작과 개발자의 예측이 일치하지 않는 경우가 있다. 관련된 논의는 잘 와닿지 않아서 오늘은 패스하겠다.

5-6. 표현식인 문과 표현식이 아닌 문

오늘 공부한 5장의 가장 큰 제목은 '표현식과 문'이다. 다양한 개념과 예제가 등장했지만, 결국에는 "'표현식'과 '문'을 구별할 수 있겠냐"라고 저자가 독자에게 물어보는 것이다.

표현식(expression)은 '값으로 평가될 수 있는 문(statement)'이다. '표현식인 문'의 정체성은 '값으로 평가될 수 있는가'에 달려있다. 그렇다면 '표현식이 아닌 문'은 값으로 평가될 수 없을 것이라는 추론은 지극히 상식적이다.

'값'으로 활용할 수 있는지는 변수에 할당해 보면 알 수 있다. 변수는 하나의 '값'을 저장하기 위해 확보한 '메모리 공간 자체' 또는 그 '메모리 공간을 식별하기 위해 붙인 이름'이기 때문이다.

'Unexpected token'의 'token'을 개발 공부를 시작한 지 두 달 하고도 9일 만에 알았다는 것이 비참하다. 'token'의 개념을 몰랐다는 게 아니라 궁금해하지도 않았다는 것이 비참하다.

'할당문'은 '표현식인 문'이다. '값'으로 평가될 수 있는 문이라는 의미이다. 즉, (x=100)은 x변수에 할당한 값 100으로 평가된다. 따라서 콘솔에 foo 변수를 입력하면 100이 출력된다.

추가적으로, 완료 값(completion value)라는 개념이 있었는데 잘 이해가 안 됐다.

회고

조율(tuning)은 악기의 음을 '표준음'에 맞춰서 고르는 과정을 의미한다. 그나마 다룰 수 있는 악기라고는 '기타'뿐인데, 기타를 조율하는 것은 꽤나 어렵다.

줄을 한 번씩 퉁퉁 튕기면서 소리에 집중해야 한다. 그리고 평소에 소리를 많이 듣지 않았다면 애초에 어떤 음이 '표준음'인지조차 인식하지 못한다.

'표준음'을 체화하고 그 음에 집중한다고 해서 튜닝은 끝나지 않는다. 페그를 살살 돌려서 줄의 장력을 높게 혹은 낮게 해야 되는데, 쓸데없는 고집을 부리면 줄이 끊어진다.

요즘 뭔가 부산스럽게 바쁜데, 이럴 때일수록 나의 소리에 집중하고 주어진 과업들을 페그를 돌리듯이 조심스럽게 조정해야겠다. 조율(tuning)은 연주의 기본이다. 삶에는 마땅히 정확하게 작동하는 조율기도 없으니 더더욱! 내일도 화이팅!