자바스크립트 핵심 가이드 1장
1장 자바스크립트의 좋은 점들
개요
- 어떻게 하면 나쁜 점을 피해서 좋은 결과를 얻느냐는 것
- 언어의 기능들이 어떻든 간에 자신만의 부분집합을 지정할 수 있다는 것
- 동적 언어로서 두드러진 특성과 장점을 부각하기 위해 집필
- 책에서 제시하는 정제된 언어의 부분집합은 보다 신뢰할 수 있고 유지가 용이한 좋은 언어적 특성을 나타낼 것
- 책에는 자바스크립트의 좋은 점에만 초점을 맞춤
- 전문가를 위한 자바스크립트의 부분집합을 다룸
01. 왜 자바스크립트인가?
- 자바스크립트는 가장 유명하고 중요하지만 가장 무시당하고 있는 언어 중 하나
- DOM(Document Object Model)은 아주 형편없기 때문에 책에서는 아주 적은 부분만 언급
- 자바스크립트의 놀라운 점은 언어 자체에 대해 많이 모르거나 심지어는 프로그래밍에 대해 잘 모르더라도 원하는 작업을 할 수 있다는 것
02. 자바스크립트 분석
- 좋은 아이디어
- 함수
- 느슨한 타입 체크
- 동적 객체
- 표현적인 객체 리터럴 표기법
- 나쁜 아이디어
- 함수
- 어휘적 유효범위를 가진 일급 객체(first-class object)
- 주류가 된 첫 번째 람다(lambda) 언어
- C의 옷을 입은 Lisp 언어라고 할 수 있음
- 느슨한 타입체크
- 오류 찾기의 어려움(X)
- 자유로움(O)
- 복잡한 클래스 계층에서 자유롭고, 타입 캐스팅과 씨름할 필요도 없음
- 표현적인 객체 표기법
- 매우 강력한 객체 리터럴 표기법
- 데이터 교환 형식인 JSON에 영감을 제공
- 논란
- 프로토타입에 의한 상속
- 클래스가 필요 없는 객체 시스템이 있어 특정 객체에 있는 속성들을 다른 객체에 직접 상속할 수 있음
- 설계 패턴의 패러다임을 전환할 필요
- 전역변수
- 몇몇 비난을 받는 핵심 개념 중 특별히 잘못 선택된 점
- 최상위 레벨의 변수들은 모두 전역객체(global obejct)라 불리는 공용 이름 공간(namespace)에 위치
추가적인 나쁜 점들은 나올 때마다 언급 또는 부록 A에 정리
- 자바스크립트 표준은 "ECMAScript"로 나쁜 부분을 포함하기때문에 책에서는 기술하지 않음
- 일급 객체(first-class object): 언어상에 제약이 없는 객체, 변수에 대입되거나 인수로 전달할 수 있고, 반환값 및 연산 등에 사용하는데 전혀 제약이 없는 객체
- 람다(lambda): 람다 대수에서 유래한 것으로 익명 함수나 클로저 등을 정의하기 위한 표현식을 의미, 더 자세한 사항은 Lisp나 파이썬에서 람다 부분 참고
- JSLint: 부록 C 참고, 자바스크립트를 분석하여 나쁜 점들을 알려주는 자바스크립트 파서, 엄격한 수준의 분석 결과 제공, 나쁜 점이 보고되지 않았다면 좋은 점만을 사용해서 프로그래밍됐다고 확신 가능한 신뢰성
- 결론
- 모순과 오류가 많음에도 자바스크립트를 사용해야 하는 이유
- 선택의 여지가 없음
- 모든 브라우저에서 사용할 수 있는 유일한 언어
- 다른 언어들도 있었으나, 살아남았다는 것이 반증
- 실제로 꽤 괜찮다는 것
- 매우 경량화돼 있음
- 표현적(expressive)
- 함수형 프로그래밍(functional programming)
- 자바스크립트를 잘 사용하기 위해 언어의 한계점을 알아야 함
- 좋은 점들이 나쁜 점들을 보상하고도 남을 정도로 충분한 가치가 있음
03. 예제 테스트를 위한 간단한 준비
<html><body><pre><script src="program.js">
</script></pre></body></html>
document.writeln('Hello, world!');
두 파일은 같은 폴더에 있어야 함
- 새로운 메소드를 정의할 때 두루 쓰이는 method라는 메소드
Function.prototype.method = function (name, func) {
this.prototype[name] = func;
return this;
};