-
항해 2주차 - Node.js (1) 자바스크립트란?항해 2023. 1. 18. 15:48
KeyWords: html, css, 웹 브라우저, 인터프리터 언어, 런타임, 자바스크립트 엔진, node.js, 멀티 패러다임, 타입, 메모리
1.자바스크립트란?
웹페이지에 생동감을 불어넣기 위해 만들어진 프로그래밍 언어이다.
자바스크립트로 작성한 프로그램을 불러오는것을 스크립트 script라고 한다.
스크립트는 웹페이지의 HTML 안에 작성할수 있는데, 웹페이지를 불러올때 스크립트가 자동으로 실행된다.
스크립트는 특별한 준비나 컴파일 없이 보통의 문자 형태로 작성, 실행 할 수 있다.
그리고 '자바 JAVA' 와는 별도의 언어이다.
2. 자바스크립트 엔진?
자바스크립트는 브라우저 뿐만 아닌 서버에서도 실행 할 수 있다. 그 외에도 자바스크립트 엔진이란 프로그램이 들어있는 모든 디바이스에서도 동작한다.
브라우저에는 자바스크립트 가상 머신 이라 불리는 엔진이 내장되어 있다.
엔진의 종류는 다양하고, 엔진맘다 특유의 코드네임이 있음.
- V8 – Chrome과 Opera에서 쓰입니다.
- SpiderMonkey – Firefox에서 쓰입니다.
- IE는 버전에 따라 'Trident’나 'Chakra’라 불리는 엔진을 사용합니다. 'ChakraCore’는 Microsoft Edge에 사용되며, 'SquirrelFish’는 Safari에 사용됩니다.
예를 들어서 'A라는 기능은 V8에서만 지원합니다' 라고 뜨면 Chrome과 Opera에서만 지원하는거구나 라고 알면됨.
3. 엔진은 어떻게 동작하나?
(1) 엔진(브라우저라면 내장 엔진)이 스크립트를 읽는다----파싱
(2) 읽어들인 스크립트를 기계어로 전환한다----컴파일
(3) 기계어로 전환된 코드가 실행된다. 기계어로 전환되었기 때문에 실행속도가 빠르다.
엔진은 프로세스 각 단계마다 최적화를 진행한다. 심지어 컴파일이 끝나고 실행중인 코드를 감시하면서, 이 코드로 흘러가는 데이터를 분석하고, 분석 결과를 토대로 기계어로 전환된 코드를 다시 최적화 하기도한다. 이런 과정을 거치면서 스크립트 실행 속도는 더 빨라진다.
4. 자바스크립트의 강점
HTML/CSS와 완전히 통합 가능함.
간단한 일을 간단하게 처리 하게 해줌.
모든 주요 브라우저를 지원하고 기본언어로 사용됨
이러한 특징때문에 자바스크립트는 브라우저 인터페이스를 만들 때 가장 널리 사용된다,
이 외에도 자바스크립트를 이용해 서버나 모바일 앱 등을 만드는 것도 가능하다.
5. 자바스크립트로 트랜스파일(변환) 가능한 언어들
자바스크립트 문법은 모든 사람의 요구를 충족시킬수 없는데 프로젝트마다 요구사항이 다 다르기 떄문이다.
해서 브라우저에서 실행되기 전에 자바스크립트로 트랜스파일(transpile, 변환) 할 수 있는 새로운 언어들이 등장함.
- CoffeeScript는 자바스크립트를 위한 'syntactic sugar’입니다. 짧은 문법을 도입하여 명료하고 이해하기 쉬운 코드를 작성할 수 있습니다. Ruby 개발자들이 좋아합니다.
- TypeScript는 개발을 단순화 하고 복잡한 시스템을 지원하려는 목적으로 '자료형의 명시화(strict data typing)'에 집중해 만든 언어입니다. Microsoft가 개발하였습니다.
- Flow 역시 자료형을 강제하는데, TypeScript와는 다른 방식을 사용합니다. Facebook이 개발하였습니다.
- Dart는 모바일 앱과 같이 브라우저가 아닌 환경에서 동작하는 고유의 엔진을 가진 독자적 언어입니다. Google이 개발하였습니다.
상단 4가지 외에도 자바스크립트로 트랜스 파일할 수 있는 언어는 다양하다.
중요한것은 위의 언어를 선택하더라도 자바스크립트를 알아야 이해 할 수 있다는 것!
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
***생소하여 감이 잘 안오는 단어***
1. 엔진?
컴퓨터 프로그래밍에서 엔진(engine)이란 다른 프로그램들을 위해 또는 특정프로그램 내부에서는 해당 프로그램을 위해 핵심적이고 본질적인 기능을 수행해주는 프로그램을 지칭하는 전문 용어이다.
2. 컴파일?
컴파일이란 어떤 언어의 코드 전체를 다른 언어로 바꿔주는 과정이다. 예를 들어 0, 1로 된 컴퓨터 언어를 사람이 알아볼 수 있는 코드로 바꾸는 것처럼! 그리고 이것을 자동으로 수행해주는 소프트웨어를 컴파일러라고 한다. 컴파일러를 엄밀히 말하자면, 어떤 프로그래밍 언어로 쓰여진 소스 파일을 다른 프로그래밍 언어로 바꾸어주는 번역기인 셈이다.
3. 파일?
프로그래밍 파일은 특정 작업을 수행하는 소프트웨어 응용 프로그램을 작성하기 위해 프로그래밍 언어에서 사용하는 소스 코드 파일입니다. 각 프로그래밍 언어에는 고유한 구문이 있으며 라이브러리, 헤더 파일, 클래스 또는 상수의 형태로 코드를 작성하기 위한 고유한 파일 세트가 있습니다.
4. 런타임?
- 프로그램이 실행되고 있을 때 존재하는곳을 말한다.
- "런타임"이라는 용어는 컴퓨터 언어 안에 쓰인 프로그램을 관리하기 위해, 특정한 컴파일러나 가상 머신이 사용하는 기본 코드의 라이브러리나 프로그램을 통틀어 런타임 라이브러리라고도 일컫는다.
- Node.js 를 Javascript 런타임이라고 부르곤 합니다.
- 런타임이란, 운영체제 위 또는 운영체제 자체에서 실행되면서 특정 프로그래밍 언어가 구동될 수 있는 환경이라고 합니다. 즉 그림으로 표현하자면 다음과 같이 표현할 수 있을 것 같습니다.
5. 패러다임? / 멀티 패러다임?
- 패러다임은 문제 해결을 위한 접근방식이다. 각 패러다임마다 코드의 관심사를 우리가 프로그래밍을 하는 이유는 특정 목표를 달성하기 위함인데, 간단히 말하면 패러다임은 코드 레벨에서 목표 달성을 위해 접근하는 방법이라고 이해했다
- 다중 패러다임 프로그래밍 언어(multiparadigm programming language)는 하나 이상의 프로그래밍 패러다임을 지원하는 프로그래밍 언어이다. 이것은 비야네 스트롭스트룹이 설명하는, “하나 이상의 프로그래밍 스타일을 따르는 프로그램”을 허용한다.
6. 인터프리터 언어?
(컴파일러 언어와 반대)
인터프리터 언어(JavaScript, Python, R 등)는 실행과 동시에 한 줄씩 중간 언어로 해석한 다음 실행한다. 별도의 컴파일 과정 없이 High Level Program을 바로 실행시킬 수 있어 변경사항을 빠르게 테스트해보기 용이하고, 대화식(Jupyter notebook, Colab 등)으로도 사용 가능하다.
한줄쓰고 한줄 해석해서 나오는거
ex)
const num = 10;
const add = num + 20;
console.log(add);
7. 소스코드?
원시 코드란 컴퓨터 프로그램을 사람이 읽을 수 있는 프로그래밍 언어로 기술한 텍스트 파일이다.
8.컴파일러 언어?
(인터파일러 언어와 반대)
- 컴파일 언어(C, C++, Java, TypeScript 등)는 실행에 들어가기에 앞서 기계 언어로 미리 바꿔두기 때문에, 런타임 환경에서 빠르게 동작한다. 컴파일하는 시간은 걸리지만 그 과정에서 Syntax Error나 Type Error를 감지하기때문에 실제 동작에서 예상치 못한 에러를 마주할 일이 적어진다.
- 프로그래밍 언어는 컴퓨터를 이용하여 특정 문제를 해결하기 위한 프로그램을 작성하기 위해 사용되는 언어다. 프로그래밍 언어는 일반적으로 저급언어(기계어, 어셈블리어)와 고급 언어(컴파일러 언어) 로 분류할 수 있다.
기계어(저급언어, 어셈블리어)
ex)10110000 01100001컴퓨터가 직접 이해할 수 있는 언어입니다. 0과 1의 2진수 형태로 표현되며 수행시간이 빠릅니다. CPU에 내장된 명령들을 직접 사용하는 것으로, 프로그램을 작성하고 이해하기가 어렵습니다. 기종마다 기계어가 다르므로 언어의 호환성이 없습니다. 컴파일러 언어(고급언어) 기계어와 1:1로 대응되는 기호로 이루어진 언어로, 니모닉(Mnemonic) 언어((ex)mov al, 061h) 라고도 합니다. 하드웨어 제어에 주로 사용되며, 언어의 호환성이 없습니다. 컴퓨터가 직접 이해할 수 없으므로 어셈블리어로 작성된 프로그램은 어셈블러를 사용하여 기계어로 번역해주어야 합니다. 9. 고급언어?- 고급 언어(High Level Language)는 컴파일러 언어 라고도 하며, 인간이 실생활에서 사용하는 자연어와 비슷한 형태 및 구조를 가지고 있다.
- 하드웨어에 대한 깊은 지식이 없어도 프로그램 작성과 수정이 용이함.
- 컴퓨터가 이해할 수 있는 기계어로 번역하기 위해 컴파일러나 인터프리터가 사용된다.
- 기계어와 어셈블리어를 제외한 C, JAVA, Python등의 언어가 고급언어에 해당된다.
'항해' 카테고리의 다른 글
항해2주차 - Node.js (3) 세미콜론, 주석 (0) 2023.01.18 항해2주차 - Node.js (2) 자바스크립트 기본 (0) 2023.01.18 항해 0~1주차 WIL (0) 2023.01.17 항해 1주차 GIT - 원격 repo와 branch 정리(2) (0) 2023.01.16 항해 1주차 GIT - 원격 repo & Branch 정리 (1) (0) 2023.01.16