--- 자바 스크립트의 개요 ---
복습 ()
컴퓨터는 기계어만 이해할 수 있고 사람이 이해하기가 쉽지 않으므로 프로그래밍 언어
를 사용한다.
프로그래밍 언어로 프로그램을 개발하는 행위를 프로그래밍
이라고 하며 프로그래밍 언어로 작성한 프로그램을 소스 코드
또는 코드
라고 부름.
소스 코드를 실행하기 앞서 기계어로 번역하는 행위를 컴파일
이라고 한다. 컴파일을 수행하는 소프트웨어를 컴파일러
라고한다. 컴파일한 후에 실행하는 프로그래밍 언어를 컴파일 언어
라고 한다.
C,C++,JAVA Objective C
등의 언어가 대표적임
반면, 프로그램을 한 줄마다 기계어로 번역해서 실행하는 프로그래밍 언어를 언터프리터 언어
라고 하며, 프로그램을 번역해서 실행시키는 소프트웨어를 인터프리터
라고 한다.
js, LISP, Perl, Ruby, Python
등의 언어가 대표적임
인터프리터 언어는 프로그램을 바로 실행, 동작을 확인해 가며 개발하는 장점이 있지만 한줄한줄 기계어로 번역하기 때문에 컴파일 언어보다 처리 속도가 느리다는 단점도 있다.
프로그램을 만드는 방식에도 언어를 분류할 수 있다.
1. 절차적 언어 (절차를 순서대로 작성)
2. 객체 지향 언어 (처리와 관련된 데이터와 절차를 하나로 묶어 객체단위로 관리함)
3. 논리형 언어 (데이터 사이의 관계와 논리를 설명해 나감)
자바스크립트는 객체 지향 언어
지만 함수형 언어
의 특징도 가지고 있다.
자바스크립트는 강력하고 유연한 알고리즘 표현 방식을 갖춘 프로그래밍 언어이다.
인터프리터 언어다.
실행 속도가 느릴 것 같지만
웹 브라우저 대부분
에는 자바스크립트 코드를컴파일 하는 JIT 컴파일러(Just in Time Compiler)가 내장
되어 있어 실행속도가 매우 빨라졌다. 이를 통해고기능 웹 애플리케이션
을구현
할 수 있기 되었음
동적 프로토타입 기반 객체 지향 언어이다.
C++와 Java 등은
클래스를 이용하여 객체를 생성하는클래스 기반 객체 언어
이다. 자바스크립트에서는 객체를 생성한 후에도 프로퍼티와 메서드를 동적으로 추가하거나 삭제가 가능함. 이 또한 같은 클래스 기반 객체 지향 언어의 객체와 다른 점이다.
동적 타입 언어다.
C++와 Java는
실행되기 전에 변수 타입이 결정되는정적 타입언어
다. 반면JS는 변수타입이 없다.
따라서 변수에 저장되는데이터 타입이 동적으로 바뀔
수 있다. 이러한 언어를동적 타입 언어
라 한다.
함수가 일급 객체다.
자바스크립트의 함수는 객체이며 함수에 함수를 인수로 넘길 수 있다. 이것이
js의 함수가 일급객체
인 이유이다. 이특성을 활용
하여 고차 함수를 구현할 수 있어함수형 프로그래밍이 가능
하다.※ 일급객체란?
- `변수나 데이타에 할당` 할 수 있어야 한다.
- `객체의 인자`로 넘길 수 있어야 한다.
- `객체의 리턴값`으로 `리턴` 할수 있어야 한다.
함수가 클로저를 정의한다.
JS의 함수는 클로저(closure)를 정의합니다. 클로저로 변수를 은닉하거나 영속성을 보장하는 등 다양한 기능을 구현할 수 있습니다.
※ 클로저란?
- 클로저(closure)는 내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것을 가르킨다. 클로저는 자바스크립트를 이용한 고난이도의 테크닉을 구사하는데 필수적인 개념으로 활용된다.
- 참고 영상(클로저)
출처 : 생활코딩 youtube
자바스크립트는 다음과 같은 기술적 요소로 구성된 언어다, 이러한 요소는 자바스크립트에서 학습해야 할 항목이기도 하다.
ECMAScript(코어 언어)
자바 스크립트의 핵심 기술은 ECMAScript로 규정이 되어 있고 ECMA라는 조직의 위원회가 표준 작업을 하며 문서로 공개되고 있다. 자바스크립트를 배울 때는 먼저 코어 언어의 내용부터 제대로 이해해야 한다.
클라이언트 측의 고유한 기술 요소
웹 브라우저에서 동작하는 JS를 클라이언트 측 자바스크립트라고 한다. 이쪽 자바 스크립트는 EMCAScript가 규정한 코어 언어와 웹 브라우저의 API로 구성되어 있다. 웹 브라우저의 주요 API는 다음과 같다.
- Window 인터페이스 : 자바스크립트로 브라우저 또는 창을 조작하는 기능을 제공
- DOM : 자바스크립트로 html문서의 요소를 제어하는 기능을 제공
- XMLHttpRequest : 서버와 비동기로 통신하는 기능 제공
또한 HTML5에 규정된 다양한 API도 사용이 가능함.
API | 설명 |
---|---|
Drag and Drop | Html 요소 혹은 파일을 끌어서 다른 HTML요소에 놓을때 데이터 전달 |
Blob | 이진 데이터를 다루는 기능 |
File | 로컬 파일 시스템을 읽고 쓸 수 있는 기능 |
Web Workers | 프로그램 여러 개를 멀티스레드로 병렬 처리 |
Web Storage | 대용량이며 저장 기간에 제한 없는 데이터를 로컬에 저장 |
Indexed Database | 로컬에 키=값(key-value) 타입의 관계형 데이터 베이스 기능 제공 |
WebSockets | 서버와의 양방향 통신 기능 제공 |
Geolocation | GPS등의 위치 정보를 다루는 기능 제공 |
Canvas | 2차원,3차원 그래픽스 기능을 제공 |
웹 서버에서 동작하는 JS를 서버 측 JS라고 한다. 웹 서버를 구현하는데는
Perl,PHP,Python,Ruby
등의 프로그래밍 언어가 널리 사용된다. 최근에는 서버 측 언어로 자바스크립트 또한 많이 사용된다. 서버 측 JS실행 환경에는 다음과 같은 구현체가 있다.
- Node.js : 구글이 개발한 JS 실행 환경
- Aptana Jaxer : 압타나가 개발하고 현재는 오픈 소스로 개발되고있는 JS환경
- Rhino : 오픈 소스로 개발되어 현재는 모질라(Mozila)가 관리하고 있는 JS실행 환경
`특히나` Node.js가 웹 애플리케이션을 만드는데 자주 사용된다.
ECMAScript6는 2015년 6월에 권고된 새 버전이고 다른 프로그래밍 언어가 제공하는 다양한 기능을 추가하면서도 이전 JS버전과의 호환성을 보임. 모두 강력한 기능이나 특히 이터레이터
와 제너레이터
는 새로운 프로그래밍 패러다임을 제시하는 ES6의 핵심과도 같다.
@ 추가 학습 필요