자바스크립트를 말하다 (2)

카탈로그
  1. 1. Why Javascript?
  2. 2. 프로그래밍 언어를 쓸 때, 선택하는 기준 7가지
    1. 2.1. 1. 무료 여부
    2. 2.2. 2. 명쾌한가?
    3. 2.3. 3. 유용한가?
    4. 2.4. 4. 좋은 도구 여부
    5. 2.5. 5. 속도
    6. 2.6. 6. 널리 쓰이는가?
    7. 2.7. 7. 장래성
  3. 3. 자바스크립트 성질
    1. 3.1. 동적
    2. 3.2. 타입이 동적
    3. 3.3. 함수형 + 객체지향적
    4. 3.4. 조용한 실패
  4. 4. 소스코드 상태로 배포
    1. 4.1. 웹 플랫폼은 일부분이다
  5. 5. 변덕과 특이
  6. 6. 영향
  7. 7. ECMAscript 역사
    1. 7.1. ECMA 1
    2. 7.2. ECMA 2
    3. 7.3. ECMA 3
    4. 7.4. ECMA 4
    5. 7.5. ECMA 5
    6. 7.6. ECMA 5.1
    7. 7.7. ECMA 6
  8. 8. 간략한 역사
    1. 8.1. 1997 Dynamic HTML
    2. 8.2. 1999 XMLHttpRequest
    3. 8.3. 2001 JSON = Javascript Object Notation
    4. 8.4. 2004 Dojo 툴킷, 대규모 프레임워크
    5. 8.5. 2005 Ajax, 브라우저 기반 애플리케이션
    6. 8.6. 2005 아파치, CouchDB, 자바스크립트 중심 DB
    7. 8.7. 2006 jQuery, DOM 조작 지원자
    8. 8.8. 2007 웹킷, 모바일웹을 주류로
    9. 8.9. 2008 V8 자바스크립트에 속도를
    10. 8.10. 2009 Node.js, 서버 자바스크립트
    11. 8.11. 2009 폰갭, HTML5 네이티브 애플리케이션 작성
    12. 8.12. 2009 크롬 OS, 브라우저를 운영체제로

Why Javascript?

Speaking Javascript 책을 읽으며, 특별히 눈에 들어왔던 내용만 기록한 것으로 옛날 내용이 많습니다.

프로그래밍 언어를 쓸 때, 선택하는 기준 7가지

  1. 무료로 사용 가능한가?
  2. 명쾌한가?
  3. 현실적으로 유용한가?
  4. 좋은 도구, IDE가 있는가?
  5. 필요한 일을 빨리할 수 있는가?
  6. 널리 쓰이는가?
  7. 장래성이 좋은가?

1. 무료 여부

YES, TC39 위원회는 주요 브라우저 제조사를 포함해 여러 회사로 구성, 자바스크립트의 발전을 위해 일함

TC39 위원회가 뭘까…

2. 명쾌한가?

명쾌하진 않지만 유연한 언어, 객체지향과 함수형 프로그래밍을 동시에 사용할 수 있는 언어

test262 프로그램 가 사용되면서, 엔진 사이의 명세 준수도를 체크했었음

브라우저와 DOM의 차이점을 해결하기 위해 프레임워크를 사용

3. 유용한가?

HTML5의 혜택으로 인하여, 운영체제를 가리지 않는 애플리케이션 플랫폼이 됨
예전에는 OS간의 호환을 크로스 플랫폼이라고 했지만, 현재는 웹과 모바일이라는 대화형 플랫폼이 추가됨

HTML5을 기반으로, 폰갭, 확장프로그램, TideSDK 등 플랫폼 등을 지원할 수 있게 됨

보완하는 여러 라이브러리, Node.js, JSON, NoSQL 등이 존재

4. 좋은 도구 여부

Grunt, mocha 등 테스트환경 + Node.js를 통한 브라우저 제약 탈피

5. 속도

느린 인터프리터 -> 빠른 적시 컴파일러로 빠른 발전,

애플리케이션 대부분이 이정도의 성능에 만족하지만, 영상처리, 게임 등을 위한 아이디어가 개발 중

6. 널리 쓰이는가?

널리 쓰이는 언어의 2가지 혜택

  1. 좋은 문서화
  2. 고용의 기회와 수요가 많음

7. 장래성

단독 기업이 아닌, 여러 회사 및 커뮤니티에서의 발전으로 어느 하나의 좌지우지 되지않음

자바스크립트 성질

동적

실행 중에 바뀔 수 있음, 객체 생성 후, 자유롭게 프로퍼티를 추가, 제거가 가능

타입이 동적

변수와 객체 프로퍼티 값 타입에 제한이 없음

함수형 + 객체지향적

함수형: 일급 객체 함수, 클로저 , bind()를 통한 부분 어플리케이션, map(), reduce()

객체지향: 객체, 상속

조용한 실패

ECMAscript 3에서 예외 처리 구현됨
자바스크립트는 종종 자동으로 타입을 바꾸거나, 에러가 있어도 조용히 실패함

으음… 그래서 항상 ESLint Rule을 보면서, 어느사항을 체크해줘야하는지 사용자가 수동으로 알아야….

소스코드 상태로 배포

항상 소스 코드 상태로 배포, 자바스크립트 엔진에서 컴파일

파일 크기를 줄이는 테크닉(gzip 처리), 최소화(변수명 변경, 주석제거, 공백제거 등)

webpack의 발전으로 여러가지가 간편화되서 좋아짐

웹 플랫폼은 일부분이다

node.js, electron 등 여러 다른 플랫폼의 사용할 가능성이 있음

변덕과 특이

블록 수준의 스코프, 모듈, 하위 클래스가 이전까지는 빠져있었음

현재는 const, let, import, class 등 여러 기능이 생김

  • 자바스크립트 명세에는 정수가 없고 오직 부동소수점 숫자만 존재, 내부적으로 대부분의 스크립트 엔진이 가능한 정수를 사용

  • 배열이 인덱스를 매기는 것이 아닌, 숫자와 요소를 연결
    인덱스와 연결된 값이 없을 수 있음.

영향

자바스크립트의 영향을 준 언어

자바(문법), 펄(문자열, 배열, 정규표현식), 스키마(클로저, 환경), 하이퍼토크(onEvent), 셀프(프로토타입 상속), 오크(함수)

ECMAscript 역사

ECMA 1

초판

ECMA 2

ECMA-262 ISO/IEC 16262 표준과 맞춤

ECMA 3

do-while, 정규표현식, 새 문자열 메서드 (concat, match, replace, slice, split과 정규표현식), 예외 처리

ECMA 4

ML로 시작한 자바스크립트 다음 프토토타입이었지만, TC39는 이 버전을 수용하지 않음

교착 상태에 빠지는 걸 막기 위해 핵심 4가지 기능만 수용

  1. ECMA 3을 점진적으로 업데이트 (이후 ECMA 5가 됨)
  2. ECMA 4보다는 덜 급진적이지만, 더 발전된 주요버전을 만든다
  3. package, namespace, 빠른 바인딩 등 ECMA 4 일부 기능은 제외
  4. 다른 아이디어는 TC39 위원이 모두 동의하면 개발한다

ECMA 5

스트릭트 모드, getter, setter, 새 배열 메서드, JSON 지원

ECMA 5.1

ECMA-262를 ISO/IEC 16262:2011 국제표준 3판과 맞춤

ECMA 6

이 책을 집필할 때는 개발 중이었나 보다.

이 후, 따로 한 컬럼으로 추가 작성해야 할 듯

간략한 역사

1997 Dynamic HTML

1999 XMLHttpRequest

2001 JSON = Javascript Object Notation

2004 Dojo 툴킷, 대규모 프레임워크

2005 Ajax, 브라우저 기반 애플리케이션

Ajax는 웹 페이지 응답성과 조작성을 데스크톱 수준으로 올린 기술들의 총칭

대표적 사례 구글맵스

Asynchronous Javascript and XML 비동기적 자바스크립트와 XML
Ajax를 AJAX로 쓰면안됨, 약어가 아님

이후, HTTP와 웹소켓 사용 증가와 양방향 통신이 가능해짐

2005 아파치, CouchDB, 자바스크립트 중심 DB

2006 jQuery, DOM 조작 지원자

브라우저의 차이점을 추상화함으로써 메꾸는 조력자

2007 웹킷, 모바일웹을 주류로

애플이 KDE에 기초해 웹킷 HTML 엔진을 제작, 오픈소스로 공개
아이폰 출시로 인해 모바일 환경이 주류로 뜸

2008 V8 자바스크립트에 속도를

구글이 크롬 웹 브라우저를 출시하며, V8 엔진의 속도를 강점으로 내세움

V8은 임베디드 소드이며, 빠른 임베디드 언어가 필요할 때 구성요소로 채택도 가능

2009 Node.js, 서버 자바스크립트

Node.js는 이벤트 기반, 비동기적 I/O와 V8을 지원
Node.js 창시자 라이언 달은 다음의 이유로 자바스크립트를 선택

  1. I/O API가 포함되있지 앟음, 독자적인 비동기적 API를 구현
  2. 웹 개발자들이 이미 자바스크립트를 사용
  3. DOM API는 이벤트 기반, 자바스크립트 개발자들은 이미 스레드없이 이벤트 루프에서 프로그래밍하는데 익숙
    이미 비동기적 코딩에 익숙

서버와 같은 언어를 쓴다는 것은 코드를 더 많이 공유할 수 있다는 것을 의미하며 (유효성 데이터 검사 등), 동형 자바스크립트 같은 테크닉이 사용 가능 해짐

동형 자바스크립트의 장점, 첫화면이 빨리 표시, 검색 엔진 최적화에 유리, 낮은 버전의 자바스크립트 환경에도 문제가 없음

2009 폰갭, HTML5 네이티브 애플리케이션 작성

2009 크롬 OS, 브라우저를 운영체제로