Top

ECMAScript 6 길들이기 [최신 표준으로 다시 배우는 자바스크립트 프로그래밍]

  • 원서명Learning ECMAScript 6 (ISBN 9781785884443)
  • 지은이나라얀 프루스티(Narayan Prusty)
  • 옮긴이이일웅
  • ISBN : 9788960778153
  • 20,000원
  • 2016년 01월 20일 펴냄
  • 페이퍼백 | 212쪽 | 188*235mm
  • 시리즈 : acorn+PACKT, 웹 프로페셔널

책 소개

요약

2015년 6월, 자바스크립트의 새 표준인 ECMAScript 6가 확정 발표됐다. 이 책은 ES6의 여러 가지 새로운 기능과 구문 요소들을 다루고 있으며, 빠르게 학습할 수 있도록 도와줄 것이다. 100여 개에 달하는 간단한 예제 코드를 실습해보면서 ES6에서 새로 추가된 부분과, 이전 버전과 달라진 점이 무엇인지 일목요연하게 파악할 수 있도록 자세히 안내한다.

추천의 글

요즘이야말로 자바스크립트를 사용하기에 더 없이 좋은 시기다. 지난 수년간 자바스크립트는 건드리고 싶지 않은 언어에서 누구나 배우고 싶어하는 언어로 거듭났다. 하루가 멀다하고 새로 탄생하는 크고 복잡한 애플리케이션들이 그 어느 때보다 자바스크립트를 더 많이 사용하고 진화시킨다. 새로운 클라이언트 측 개발 요건을 충족하기 위해 새로운 프레임워크와 애플리케이션 설계 방식이 쏟아져 나오고 있으며 관련 커뮤니티 활동도 왕성해졌다.
ES6로 더 잘 알려진 ECMAScript 2015 덕분에 마침내 자바스크립트는 만인의 원대한 희망에 잘 맞는 언어가 되었다. 이제 프라미스(promise)와 모듈 시스템 같은 꼭 필요한 큰 기능이 자바스크립트에 포함됐고, 재미있게 개발할 수 있게 해주는 작고 섬세한 요소 또한 가미됐다. 객체 해체를 배우고 나면 지금까지 이것 없이 자바스크립트를 어떻게 썼나 싶을 테고, 화살표 함수를 한 번 써보면 두 번 다시 ‘함수’ 타입은 생각하고 싶지도 않을 것이다. 복잡하기 이를 데 없는 함수 스코프와 변수 누수 문제를 let 키워드로 간단히 예방하면 책상에 머리를 찧는 횟수도 줄어들리라.
ES6는 훌륭한 언어 명세고 ES5에 비해 상당 부분 개선되었지만 아직 브라우저에 완벽히 구현된 상태는 아니다. 하지만 여러 커뮤니티 회원들의 노력 덕분에 그때까지 기다리지 않아도 지금 당장 사용할 수 있다. 과거에는 자바스크립트를 어느 브라우저든 사용할 수 있을 때까지 5년 정도 걸렸지만, ES5와 호환되는 ES6 코드를 생성하는 도구들이 있어서 미래의 기술을 미리 경험해볼 수 있다.
이 책은 자바스크립트에서 가장 유용한 추가 기능을 골라 안내하면서 마치 여러분이 지금껏 사용해왔던 기능처럼 느껴지도록 재빨리 습득할 수 있게 도와준다. ES6 자체 모듈 시스템으로 모듈러 애플리케이션을 제작하는 일이 얼마나 쉬운지, 코드는 얼마나 깔끔하게 짧아지고, 코딩은 또 얼마나 즐거워질지 곧 알게 될 것이다. 새로운 표준을 받아들인다는 건 모든 개발자에게 벅찬 일이지만 그 일을 수월하게 도와줄 이 책의 추천사를 쓰게 되어 매우 기쁘다.
이 책은 ES6로 강화된 자바스크립트의 과감한 신세계, 클라이언트 애플리케이션, 프레임워크 등을 짚어가며 여러분의 첫 도약에 큰 도움을 줄 것이다. 나만큼 여러분도 재미있게 읽기를 바란다.
잭 프랭클린(Jack Franklin) / 자바 개발자, GoCardless
@JackFranklin, http://www.jackfranklin.co.uk_

이 책에서 다루는 내용

■ ES6부터 도입된 새로운 구문 사용법
■ 프로토타입 기반의 ES6 기능 활용
■ ES6 비호환 환경에서의 ES6 코드 실행
■ 프라미스를 이용해 읽고 관리하기 쉬운, 좀 더 우수한 비동기 코드 작성
■ 이터레이터, 이터러블, 제너레이터의 사용법
■ 객체 지향 프로그래밍과 클래스로 객체 생성하는 방법. ■ ES6 프록시 API를 통한 프록시 작성 및 용도 이해
■ ES6 모듈을 이용한 자바스크립트 라이브러리 제작

이 책의 대상 독자

기본적인 개발 지식을 보유한 자바스크립트 개발자라면 이 책을 통해 최신 ES6 기능을 배우고 더 나은 클라이언트 측 프로그램을 개발하는 데 활용할 수 있다.

이 책의 구성

1장, ‘문법 맛보기’에서는 변수, 함수 파라미터를 생성하는 새로운 방법을 소개하고, 새로 추가된 객체/함수 구문을 자세히 알아본다.

2장, ‘라이브러리’에서는 기존 객체에 추가된 프로토타입 기반의 새로운 메소드들을 살펴본다.

3장, ‘이터레이터’에서는 새롭게 추가된 이터레이터, 사용자 이터레이터 생성 방법, 꼬리 호출 최적화 등을 알아본다.

4장, ‘비동기 프로그래밍’에서는 비동기 실행 코드를 프라미스로 쉽게 작성하는 방법을 다룬다.

5장, ‘리플렉트 API 구현’에서는 ES6 객체 리플렉션을 깊숙이 탐구한다.

6장, ‘프록시’에서는 ES6 프록시로 객체의 기본 로직에 변화를 주는 방법을 알아본다.

7장, ‘클래스 답사’에서는 ES6 클래스를 응용한 객체 지향 프로그래밍과, 상속, 생성자, 추상화, 정보 은닉 등의 개념을 설명한다.

8장, ‘모듈러 프로그래밍’에서는 IIFE, 커먼JS, AMD, UMD, ES6 모듈 등의 여러 기법으로 자바스크립트 모듈을 생성하는 방법을 이야기한다.

저자/역자 소개

지은이의 말

ECMAScript는 ECMA 인터내셔널(Ecma International)의 ECMA-262와 ISO/IEC 16262에 근거한 표준 스크립트 언어다. 자바스크립트, J스크립트(Jscript), 액션스크립트(ActionScript)가 ECMAScript의 상위 집합(superset)으로, 더 많은 객체/메소드가 있고 기능 면에서 ECMAScript보다 우월하지만 언어로서의 핵심 기능은 ECMAScript와 같다. ECMAScript의 7번째 수정판인 ECMAScript 6는 간단히 ‘ES6’라 부른다.
자바스크립트는 실로 강력하고 유연한 프로그래밍 언어지만 불필요한 군더더기가 많아 혹평을 받아왔다. 그래서 좀 더 쉬운 구문과 강력한 기능을 제공하면서도 자바스크립트로 컴파일이 가능한 커피스크립트(CoffeeScript)나 타입스크립트(Typescript) 같은 추상체를 대신 쓰는 개발자들도 있었다. 이제 ES6 이후론 코드 품질을 높이려고 잡다한 추상체와 테크닉을 빌려 써서 개발 프로세스를 늘어지게 하지 않아도 될 정도로 자바스크립트가 좋아졌다.
ES6의 신기능은 커피스크립트 등 다른 인기 있는 추상화 언어에서 비롯됐고 작동 방식 또한 동일하기 때문에 자바스크립트로선 신기능이지만 프로그래밍 세계에선 전혀 새로운 것들이 아니다.
이 책은 자바스크립트 예제 코드를 보면서 ECMAScript의 신 버전, ES6의 전반적인 새 기능을 설명한다. 모든 예제 코드는 브라우저, 노드JS, 코도바 등의 환경에서 실습 가능하다.

지은이 소개

나라얀 프루스티(Narayan Prusty)

웹/모바일 앱 개발자다. 워드프레스, HTML5, 자바스크립트, PHP, 솔라(Solr), 코도바(Cordova)에 능하다. 수년간 기술을 연마하며 애플리케이션을 제작해왔다.
다양한 애플리케이션 개발 강좌 서비스로 전 세계 10,000명 이상의 구독자를 확보한 QScutter.com을 창업했다. 개인 블로그(http://www.QNimate.com)는 인텔 XDK 및 워드프레스 블로그 중에서 최상위권에 랭크되어 있다. 세계 각국의 많은 기업에서 컨설턴트, 프리랜서 개발자로 근무했다.
개인 홈페이지는 http://www.twitter.com/narayanprusty다.

옮긴이의 말

이 책은 2015년 6월 17일, 공식 표준으로 발표된 ECMS-262의 여섯 번째 버전, 즉 ECMAScript 6의 새로운 기능을 빠르게 습득하기 위한 입문서입니다. 아직까지는 IE, 파이어폭스, 크롬 등 메이저 브라우저에서 ECMAScript 6 명세를 완벽히 구현하지 못했고, 이전 버전(ECMAScript 5)의 코드로도 ES6의 신기능을 어느 정도 흉내 낼 수 있는 상황이지만 새 표준의 보급은 과거에 비해 훨씬 빠르게 이루어질 것으로 예상됩니다.
대부분의 모든 기술이 그렇듯 새 버전이 반드시 구 버전에 비해 월등하고 우수하다고 할 수는 없고 그것을 가져다 쓰는 사용자가 굳이 얼리 어댑터(early adopter)가 되어야 할 필요는 없겠지만, 자바스크립트가 전문인 프로그래머라면 ES6가 당연한 대세로 자리를 잡기 전에 미리 준비를 해두지 않으면 안 될 것입니다. 그런 점에서 책이 출간된 이 시점이 자바스크립트의 새 표준을 학습할 적당한 시기가 아닐까 싶습니다.
이 책은 주로 새 표준에서 등장한 새로운 구문 요소와 간단한 예제를 설명하지만, C나 자바, 파이썬 등 다른 언어 경험이 있는 분들에게는 프로그래밍 언어들이 점차 상향 평준화하고 있다는 동향과 자바스크립트만의 독특한 디자인 철학과 개념을 엿볼 수 있는 계기가 될 것입니다. 이 책을 움켜쥔 독자 여러분이 나무를 자세히 들여다 보면서도 숲 전체를 조망할 수 있는 식견과 높은 수준의 마인드를 가진 자바스크립트 개발자로 한 단계 성장하길 바랍니다.

옮긴이 소개

이일웅

10년 넘게 국내, 미국 등지에서 대기업/공공기관 프로젝트를 수행한 웹 개발자이자, 두 딸의 사랑을 한 몸에 받고 사는 행복한 딸 바보다. 자바 기반의 서버 플랫폼 구축, 데이터 연계, 다양한 자바스크립트 프레임워크를 응용한 프론트엔드 화면 개발을 주로 담당해왔다. 시간이 날 때는 피아노를 연주한다(개인 홈페이지: http://www.bullion.pe.kr).

목차

목차
  • 1 문법 맛보기
    • let 키워드
      • 함수 스코프 변수 선언
      • 블록 스코프 변수 선언
      • 변수 재선언
    • const 키워드
      • 상수의 스코프
      • 상수를 통한 객체 참조
    • 파라미터 기본값
    • 펼침 연산자
      • 펼침 연산자의 다른 용례
        • 배열 값을 다른 배열의 일부로 만듦
        • 배열 값을 다른 배열에 밀어 넣기
      • 여러 배열 펼침
    • 나머지 파라미터
    • 해체 할당
      • 배열 해체 할당
        • 값을 건너뛴다
        • 배열 해체 할당에 나머지 연산자를 사용
        • 변수의 기본값
        • 중첩 배열 해체
        • 파라미터로 배열 해체 할당 사용
      • 객체 해체 할당
        • 변수의 기본값
        • 조합 프로퍼티명을 해체
        • 중첩 객체를 해체
        • 파라미터로 객체 해체 할당 사용
    • 화살표 함수
      • 화살표 함수에서의 this 값
      • 화살표 함수와 일반 함수의 차이점
    • 강화된 객체 리터럴
      • 프로퍼티 정의
      • 메소드 정의
      • 조합 프로퍼티명
    • 요약

  • 2 라이브러리
    • 숫자
      • 2진수
      • 8진수
      • Number.isInteger(number) 메소드
      • Number.isNaN(value) 메소드
      • Number.isFinite(number) 메소드
      • Number.isSafeInteger(number) 메소드
      • Number.EPSILON 프로퍼티
    • 수학 연산
      • 삼각 연산
      • 산술 연산
      • 기타 메소드
        • Math.imul(number1, number2) 함수
        • The Math.clz32(number) 함수
        • The Math.sign(number) 함수
        • The Math.trunc(number) 함수
        • The Math.fround(number) 함수
    • 문자열
      • 비트가 초과된 코드 포인트를 이스케이프
      • codePointAt(index) 메소드
      • String.fromCodePoint(number1, ..., number 2) 메소드
      • repeat(count) 메소드
      • includes(string, index) 메소드
      • startsWith(string, index) 메소드
      • endsWith(string, index) 함수
      • 정규화
        • 사례
      • 템플릿 문자열
        • 표현식
        • 여러 줄 문자열
        • 원래 문자열
    • 배열
      • Array.from(iterable, mapFunc, this) 메소드
      • Array.of(values...) 메소드
      • fill(value, startIndex, endIndex) 메소드
      • find(testingFunc, this) 메소드
      • findIndex(testingFunc, this) 메소드
      • copyWithin(targetIndex, startIndex, endIndex) 함수
      • entries(), keys(), and values() 메소드
    • 콜렉션
      • 배열 버퍼
      • 타입화 배열
      • 세트
      • 위크세트
      • 위크맵
    • 객체
      • proto 프로퍼티
        • Object.is(value1, value2) 메소드
        • Object.setPrototypeOf(object, prototype) 메소드
        • Object.assign(targetObj, sourceObjs...) 메소드
    • 요약

  • 3 이터레이터
    • ES6 심볼
      • typeof 연산자
      • new 연산자
      • 심볼을 프로퍼티 키로 사용
      • Object.getOwnPropertySymbols() 메소드
      • Symbol.for(string) 메소드
      • 상용 심볼
    • 이터레이션 규약
      • 이터레이터 규약
      • 이터러블 규약
    • 제너레이터
      • return(value) 메소드
      • throw(exception) 메소드
      • yield* 키워드
    • for...of 루프
    • 꼬리 호출 최적화
      • 꼬리 호출 아닌 코드를 꼬리 호출로 전환
    • 요약

  • 4 비동기 프로그래밍
    • 자바스크립트 실행 모델
    • 비동기 코드 작성
      • 이벤트를 포함한 비동기 코드
      • 콜백을 포함한 비동기 코드
    • 구원자, 프라미스
      • 프라미스 생성자
      • 이룸값
      • then(onFulfilled, onRejected) 메소드
      • catch(onRejected) 메소드
      • Promise.resolve(value) 메소드
      • Promise.reject(value) 메소드
      • Promise.all(iterable) 메소드
      • Promise.race(iterable) 메소드
    • 프라미스 기반의 자바스크립트 API
      • 배터리 상태 API
      • 웹 암호화 API
    • 요약

  • 5 리플렉트 API 구현
    • Reflect 객체
      • Reflect.apply(function, this, args) 메소드
      • Reflect.construct(constructor, args, prototype) 메소드
      • Reflect.defineProperty(object, property, descriptor) 메소드
        • 데이터 프로퍼티와 접근자 프로퍼티
      • Reflect.deleteProperty(object, property) 메소드
      • Reflect.enumerate(object) 메소드
      • Reflect.get(object, property, this) 메소드
      • Reflect.set(object, property, value, this) 메소드
      • Reflect.getOwnPropertyDescriptor(object, property) 메소드
      • Reflect.getPrototypeOf(object) 메소드
      • Reflect.setPrototypeOf(object, prototype) 메소드
      • Reflect.has(object, property) 메소드
      • Reflect.isExtensible(object) 메소드
      • Reflect.preventExtensions(object) 메소드
      • Reflect.ownKeys(object) 메소드
    • 요약

  • 6 프록시
    • 프록시란?
      • 용어 정의
    • 프록시 API
      • 트랩
        • get(target, property, receiver) 메소드
        • set(target, property, value, receiver) 메소드
        • has(target, property) 메소드
        • isExtensible(target) 메소드
        • getPrototypeOf(target) 메소드
        • setPrototypeOf(target, prototype) 메소드
        • preventExtensions(target) 메소드
        • getOwnPropertyDescriptor(target, property) 메소드
        • defineProperty(target, property, descriptor) 메소드
        • The deleteProperty(target, property) 메소드
        • enumerate(target) 메소드
        • ownKeys(target) 메소드
        • apply(target, thisValue, arguments) 메소드
        • construct(target, arguments) 메소드
      • Proxy.revocable(target, handler) 메소드
        • 용례
    • 프록시 용도
    • 요약

  • 7 클래스 답사
    • 객체 지향 자바스크립트
      • 자바스크립트 데이터 타입
      • 객체 생성
      • 상속
      • 원시 데이터 타입 생성자
    • 클래스 다루기
      • 클래스 정의
        • 클래스 선언
        • 클래스 표현식
      • 프로토타입 메소드
        • get/set 메소드
        • 제너레이터 메소드
      • 정적 메소드
      • 클래스의 상속 구현
      • 조합 메소드명
      • 프로퍼티 속성
      • 클래스는 호이스팅 안 된다!
      • 생성자 메소드 결과를 오버라이딩
      • 정적 접근자 프로퍼티, Symbol.species
      • 암시적 파라미터, new.target
    • 객체 리터럴에 super 사용
    • 요약

  • 8 모듈러 프로그래밍
    • 자바스크립트 모듈이란?
    • 모듈 구현 - 기존 방법
      • 즉시 실행 함수 표현식(IIFE)
      • 비동기 모듈 정의(AMD)
      • 커먼JS
      • 만능 모듈 정의
    • 새로운 모듈 구현 방식
      • ES6 모듈 생성
      • ES6 모듈 임포트
      • 모듈 로더
      • 브라우저에 모듈 사용
      • eval() 함수에서 모듈 사용
      • 기본 익스포트 vs 명명된 익스포트
      • 종합 예제
    • 요약

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

2016. 4. 18 수정사항

[p.45: 아래에서 10~11행]
이터러블 값보다 변수가 모자랄 경우에만 자동으로 배열 객체로 바뀌어
->
이터러블 값보다 변수가 모자라면 자동으로 배열 객체로 바뀌어