인사이드 자바스크립트라는 책을 읽고 간단하게 정리한 글 입니다.
내용을 한번 정리하면서 공부하려는 목적으로 작성되었습니다.

도서 정보

1. 소개

자바스크립트는 웹 브라우저에서 동작하는 스크립트 언어입니다.
처음에는 지금처럼 웹 개발자에게는 친숙한 언어가 아니라 웹 페이지 제작에 있어서 보조적인 기능을 수행하기 위한 용도로써 사용했습니다. 다만 소수의 자바스크립트 프로그래머들에 의해 여러가지 연구가 이루어지고, 여러가지 라이브러리들이 개발되었는데 여기서 jQuery의 등장으로 보다 쉽게 DOM을 핸들링하게 되면서 많은 발전을 이루었습니다.

현재 깃허브의 프로젝트 중에서 가장 많이 사용되고 있는 언어가 자바스크립트라고 합니다.
이는 전 세계 개발자가 얼마나 자바스크립트에 뜨겁게 열광하고 있는지를 단적으로 보여줍니다.
특히 Node.js의 등장으로 자바스크립트를 이용한 서버 개발이 활발해지면서 더욱 많은 개발자들이 자바스크립트를 사용하게 되었습니다.

2. 자바스크립트 활용 범위

현재 브라우저 기반의 자바스크립트 라이브러리뿐만 아니라, Node.js와 같은 서버 기반의 자바스크립트 환경에서 동작할 수 있는 각종 라이브러리까지 쏟아져 나오고 있습니다. 이제는 자바스크립트만으로 웹 서버와 클라이언트인 웹 페이지 개발을 동시에 할 수 있는 수준까지 이른 것입니다.

  • 2.1 웹 개발

    요즘 웹 브라우저들이 새 버전을 내 놓을 때마다 항상 강조하는 것이 자바스크립트 엔진의 성능 향상에 관한 것 입니다.
    이는 웹 페이지를 개발하는 데 있어서 자바스크립트의 역할이 얼마나 큰지를 방증합니다.
    현재 자바스크립트는 웹 개발자에게 중요한 컴포넌트로 자리잡았기 때문에 자바스크립트를 완벽하게 이해하지 못하면 좋은 웹 개발자라는 말을 들을 수 없게 되었습니다.

  • 2.2 서버 개발

    Node.js의 출현으로 자바스크립트를 활용한 서버 개발도 활발히 이루어지고 있습니다.
    express.js, socket.io 등의 라이브러리는 보다 쉽게 자바스크립트로 서버를 개발할 수 있는 환경을 제공해 줍니다.

  • 2.3 애플리케이션 개발

    웹이 하나의 플랫폼으로 진화하면서, 웹OS를 표방한 여러 가지 프로젝트가 진행되고 있습니다.
    구글에서는 크롬OS라는 브라우저 기반의 OS를 선보였고, 모바일에서도 HP에서 웹OS라는 이름으로 휴대폰과 같은 모바일 기기에도 웹 기반의 각종 기술이 활용되고 있습니다.

3. 자바스크립트의 핵심 개념

  • 3.1 객체

    자바스크립트의 거의 모든 것은 객체이다.
    여기서 거의라는 표현을 쓰는 이유는 몇 가지가 제외되기 때문이다. 바로 기본 데이터 타입인 boolean, number, string이다 그리고 특별한 값인 null, undefined 도 해당된다. 이를 제외한 나머지는 모두 객체이다. 앞의 세가지 기본 데이터 타입은 모두 객체처럼 다룰 수도 있다. 그렇기 때문에 자바스크립트는 null, undefined를 제외한 모든 것을 객체로 다룰 수 있다.

  • 3.2 함수

    자바스크립트에서는 함수도 객체로 취급한다.
    일반적인 객체보다 조금 더 많은 기능이 있는 객체라고 할 수 있다. 하지만 이렇게 단순히 표현하기엔 자바스크립트에서 함수는 상당히 중요하다. 이는 함수가 일급 객체(First class object)로 다뤄지기 때문이다.

    일급객체란 3가지 조건을 충족한다면 일급객체라고 할 수 있습니다.

    1. 변수나 데이터에 할당할 수 있어야 한다.
    2. 객체의 인자로 넘길 수 있어야한다.
    3. 객체의 리턴값으로 리턴할 수 있어야 한다.

  • 3.3 프로토 타입

    모든 객체는 숨겨진 링크인 프로토타입을 가진다.
    이 링크는 해당 객체를 생성한 생성자의 프로토타입 객체를 가리킨다. 이 링크를 ECMAScript에서는 [[Prototype]] 이라고 표현한다. 이 링크로 자바스크립트는 훨씬 더 다양하게 자신만의 자료구조를 작성할 수 있다.

  • 3.4 실행 컨텍스트와 클로저

    자바스크립트는 자신만의 독특한 과정으로 실행 컨텍스트를 만들고 그 안에서 실행이 이루어진다.
    이 실행 컨텍스트는 자신만의 유효범위(Scope)를 갖는데, 이 과정에서 클로저를 구현할 수 있다.
    이것은 자바스크립트를 제대로 이해하기 위한 핵심 개념이지만, 이해하기가 그렇게 쉬운 개념은 아닌 듯 하다.

4. 자바스크립트와 객체지향 프로그래밍

자바스크립트는 클래스를 지원하지 않지만 객체지향 프로그래밍이 가능하다.
프로토타입 체인과 클로저로 객체지향 프로그래밍에서 제시하는 상속, 캡슐화, 정보 은닉 개념을 소화할 수 있다.

5. 자바스크립트와 함수형 프로그래밍

자바스크립트는 함수형 프로그래밍이 가능하다.
함수형 프로그래밍은 높은 수준의 모듈화를 가능케 하는 매우 효율적인 프로그래밍 방법이다.
자바스크립트는 주요 특성인 일급 객체로서의 함수 특성과 클로저를 활용하여 이를 가능케 한다. 하지만 이 때문에, 가독성을 떨어뜨리기도 한다. 과도하게 클로저가 사용되었거나, 함수형 프로그래밍 기법으로 구현된 코드는 제 3자가 해석하기가 상당히 난해하다.

6. 자바스크립트의 단점

자바스크립트는 굉장히 유연한 언어이고 뛰어난 표현력을 가지고 있지만 이러한 특성 떄문에 종종 디버깅에 어려움을 겪기도 한다. 특히 느슨한 타입 체크는 개발자에게 타입체크에 대한 자유를 주지만 컴파일 타임에서 잡지 못하는 오류로고스란히 런타임 오류로 발견된다.

또 하나는 전역객체의 존재이다.
최상위 레벨의 객체들은 모두 전역 객체 안에 위치하는데, 이는 이름 충돌의 위험성이 있다.
프로그래머는 이 부분에 대해 신경쓰는 것을 게을리 하면 안된다.