본문 바로가기

JavaScript/모던 자바스크립트 Deep Dive

1장. 프로그래밍

1.1 프로그래밍이란?


사람(자연어 사용) ————-> 컴퓨터(기계어 사용: 0과 1)
: 컴퓨터에게 정확하고 상세하게 ‘요구사항’을 설명(코드를 통해)하고, 실행을 요구하는 일종의 사람과 컴퓨터간의 커뮤니케이션

실행을 요구하기 위해서는, 먼저 ‘무엇’을 실행시키고 싶은지 알아야 한다.

1. 해결해야 할 문제(요구사항)을 명확히 이해
- 대부분의 요구사항 : 복잡하고 불명확하다.
  1>  문제를 명확하게 이해
  2> 복잡함을 단순하게 분해 & 자료 정리 및 구분
  3> 순서에 맞게 행위 배열

2. 적절한 문제 해결 방안 정의
- 이 때 필요한 것 : 컴퓨팅 사고.




1.2 프로그래밍 언어


문제 해결 능력을 바탕으로 정의된 문제해결방안 : '컴퓨터'에게 전달되어야 한다.
명령을 수행할 주체 : ‘컴퓨터’
즉, 사람이 이해할 수 있는 '자연어'가 아니라 컴퓨터가 이해할 수 있는 언어, 즉 ‘기계어(machine code)’로 명령을 전달해야 한다.
하지만, 사람이 기계어로 컴퓨터에게 직접 명령을 전달하는 것은 매우 어려운 일.
** 기계어 :  컴퓨터가 직접 읽을 수 있는 2진 숫자(binary digit, 0과 1)로 이루어진 언어. 비트(이진수의 하나의 자리수. ex: 01이면 0) 단위로 기술되어있다.

ex: x86 아키텍처의 리눅스환경에서 'Hello World'를 출력하는 기계어 코드.

00 00 00 00 00 00 00 00 01 35 40

—> 사람이 이해할 수 있는 약속된 구문(syntax)으로 구성된 ‘프로그래밍 언어’를 사용해 프로그램을 작성한 후, 그것을 컴퓨터가 이해할 수 있는 기계어로 변환하는 일종의 번역기(컴파일러compiler or 인터브리터interpreter)를 이용한다.

사람 > (프로그래밍 언어 사용) > 컴파일러 (번역) > (기계어로 전달) > 컴퓨터

 

즉, 프로그래밍언어 : 컴퓨터와의 대화(명령)에 사용되는 일종의 표현수단. 사람과 컴퓨터(컴파일러 또는 인터프리터) 모두가 이해할 수 있는 약속된 형태의 인공어.

 

1.3 구문과 의미

문법(syntax)에 맞는 문장을 구성하는 것은 물론, '의미(semantics)'를 가지고 있어야 언어의 역할을 충실히 수행할 수 있다.

 

Colorless green ideas sleep furiously.

위 문장은 문법적으로 전혀 문제가 없지만, 의미는 없다.

const number = 'string';
console.log(number * number); //NaN

자바스크립트 변수에는 어떠한 타입의 값도 할당할 수 있다. 따라서 위 예제는 '문법'적으로 전혀 문제가 없다. 하지만 '의미'적으로 옳지 않다.

number라는 변수에 문자열이 할당되어있다.

의미적으로 : number라는 이름의 변수에는 숫자를 할당하는게 옳다.