1. 자바스크립트 기본 개요
책 <인사이드 자바스크립트>를 읽고 정리한 포스팅
1. 자바스크립트 기본 개요
1.1 소개
자바스크립트는 웹 브라우저에서 동작하는 스크립트 언어
스크립트 언어란
소스 코드를 컴파일하지 않고도 실행할 수 있는 프로그래밍 언어
예를 들어 C나 비주얼베이직, 자바같은 경우는 작성한 소스를 컴파일러를 통해 기계어 코드로 변경해야 사용자가 실행할수 있는 실행 파일이 얻어지는데 비해 스크립트 언어는 별도의 컴파일 없이 내장된 번역기에 의해 번역 되므로 바로 실행 할 수 있다.
스크립트 언어는 소스를 작성한 후 컴파일 과정 없이 바로 실행하여 결과를 확인할 수 있다는 장점이 있는 반면에 번역 과정을 거쳐야 하기 때문에 다소 느리다는 단점이 있다. C언어나 Java와 같은 비스크립트 언어의 경우 실행 속도가 빠른 장점이 있는 반면 컴파일 과정을 거쳐야 하는 등 개발 과정이 조금 복잡하다는 단점이 있다.
스크립트 언어의 사용처
1. 시스템
: 유닉스의 쉘(Shell) 스크립트, 윈도우의 배치(Batch) 스크립트처럼 일괄 처리 작업에 사용
2. 웹 어플리케이션
: 웹 어플리케이션은 빠른 성능이 필요하지 않다.
크게 서버 사이드 스크립트(server-side-script) 와 클라이언트 사이드 스크립트(client-side-script)로 나눌수 있다.
- 서버 사이드 스크립트 : 해당 소스의 실행 결과를 확인하기 위해 웹서버를 거쳐야 하는 스크립트
예) ASP, PHP, JSP, Python, PERL, RUBY 등
- 클라이언트 사이드 스크립트 : 내장된 번역기(인터넷 익스플로러 등)에 의해 실행되는 스크립트. 서버를 거치지 않고 사용자쪽(웹 서버에 접속한 PC)에서 처리되는 스크립트.
예) JavaScript VBScript, JScript, TypeScript 등
출처: https://jokergt.tistory.com/81 [Gun's Knowledge Base]
초창기 자바스크립트는 웹 페이지 제작에 있어서 보조적인 기능을 수행하기 위한 한정적 용도로써 사용하였다. 이 시기 대부분의 로직은 주로 웹 서버에서 실행되었다.
그러나 웹의 발전과 함께 과거에 서버에서 담당하던 역할들이 상당 부분 웹 브라우저로 이동하였고, jQuery의 등장으로 보다 쉽게 DOM을 핸들링하게 되면서 많은 발전을 이루었다.
Node.js의 등장으로 자바스크립트를 이용한 서버 개발이 활발해지면서 더욱 많은 개발자가 자바스크립트를 사용하게 되었다.
1.2 자바스크립트 활용 범위
Node.js는 서버 기반의 자바스크립트 환경에서 동작할 수 있는 라이브러리이다.
이제는 자바스크립트만으로 웹 서버와 클라이언트인 웹 페이지 개발을 동시에 할 수 있게 되었다.
1.2.1 웹 개발
jQuery
를 비롯하여 knockout
, backbone
등의 라이브러리는 웹 개발자에게 이미 중요한 컴포넌트이다.
1.2.2 서버 개발
Node.js
의 출현으로 자바스크립트를 활용한 서버 개발도 활발히 이루어지고 있다. express
, socket.io
등의 라이브러리는 보다 쉽게 자바스크립트로 서버를 개발할 수 있는 환경을 제공해 준다.
1.2.3 애플리케이션 개발
웹이 하나의 플랫폼으로 진화하면서, 웹OS를 표방한 여러 가지 프로젝트가 진행되고 있다.
폰갭과 같은 크로스 플랫폼 개발 도구를 이용하면 DOM 요소를 핸들링하여 렌더링하는 것에서부터 더 나아가 디바이스의 동작에 대한 제어도 가능해지고 있다.
1.3 자바스크립트의 핵심 개념
1.3.1 객체
자바스크립트의 거의 모든 것은 객체이다.
기본 데이터 타입인 boolean, number, string은 제외된다.
특별한 값인 null, undefined 역시 제외된다.
3장에서 더 자세히 설명한다.
1.3.2 함수
자바스크립트에서는
함수도 객체로 취급한다.
일반적인 객체보다 조금 더 많은 기능이 있는 객체라고 할 수 있다.
자바스크립트에서 함수는 중요한데,
함수는 일급 객체(First class object)로 다루어진다.
4장에서 더 자세히 설명한다.
1.3.3 프로토타입
모든 객체는 숨겨진 링크(link)인 프로토타입(prototype)을 가진다.
이 링크는 해당 객체를 생성한 생성자의 프로토타입 객체를 가리킨다.
이 링크를 ECMAScript에서는 Prototype
이라고 표현한다.
이 링크로 자바스크립트에서는 훨씬 더 다양하게 자신만의 자료 구조를 작성할 수 있다.
4장에서 프로토타입의 개념을, 6장에서 프로토타입을 활용한 객체지향의 상속을 구현하는 방법을 더 자세히 설명한다.
1.3.4 실행 컨텍스트와 클로저
자바스크립트는 자신만의 독특한 과정으로 실행 컨텍스트를 만들고 그 안에서 실행이 이루어진다.
이 실행 컨텍스트는 자신만의 유효 범위(scope)를 가지는데, 이 과정에서 클로저를 구현할 수 있다.
이는 자바스크립트를 제대로 이해하기 위한 핵심 개념인 동시에, 이해하기 쉬운 개념은 아니다.
5장에서 더 자세히 설명한다.
1.4 자바스크립트와 객체지향 프로그래밍
자바스크립트는 클래스를 지원하지 않지만 객체지향 프로그래밍이 가능하다.
프로토타입 체인과 클로저로 객체지향 프로그래밍에서 제시하는 상속, 캡슐화, 정보 은닉 등의 개념을 소화할 수 있다.
6장에서 더 자세히 설명한다.
1.5 자바스크립트와 함수형 프로그래밍
함수형 프로그래밍은 높은 수준의 모듈화를 가능케 하는 매우 효율적인 프로그래밍 방법이다.
자바스크립트는 주요 특성인 일급 객체로서의 함수 특성과 클로저를 활용하여 이를 가능케 한다.
하지만 이 때문에 가독성을 떨어뜨리기도 한다.
과도하게 클로저가 사용되었거나, 함수형 프로그래밍 기법으로 구현된 코드는 제 3자가 해석하기가 상당히 난해하다.
7장에서 더 자세히 설명한다.
1.6 자바스크립트의 단점
자바스크립트는 굉장히 유연한 언어이고 뛰어난 표현력을 가지고 있다.
하지만 이러한 특성 때문에 종종 디버깅에 어려움을 겪기도 한다.
특히, 느슨한 타입 체크는 개발자에게 타입 체크에 대한 자유를 주지만, 컴파일 타임에서 잡지 못하는 오류는 고스란히 런타임 오류로 발견된다.
또, 자바스크립트를 둘러싼 중요한 논란 중에 하나가 전역 객체의 존재이다.
최상위 레벨의 객체들은 모두 전역 객체 안에 위치하는데, 이는 이름 충돌의 위험성이 있다.
프로그래머는 이 부분을 양지하고 항상 신경써야 한다.
이 책은 ECMAScript 5 버전을 바탕으로 하지만, 새롭게 추가된 특성보다는 기존의 개념을 보다 집중하여 다루었다.
#책/인사이드자바스크립트