Javascript: 세상에서 제일 잘못 이해되고 있는 language
http://javascript.crockford.com/javascript.html :번역
Douglas Crokford : www.crokford.com
Mocha, LiveScript, JScript, ECMAScript로 알려져 있는 Javascript는 세상에서 가장 유명한 엉어중의 하나이다. 자바스크립트 인터프리터는 세상의 모든 퍼스널 컴퓨터에 하나는 설치되어 있고, 사용되고 있다. Javascript의 유명세는 WWW 스크립팅 언의의 막중한 책임을 맡고 잇기 때문이다.
이런 유명세에도 불구하고, 몇몇만이 자바스크립트를 매우 좋은 동적 object-oriented 범용 목적의 프로그래밍 언어로 알고 있다. 이게 어떻게 비밀일 수 가 있는가? 왜 이 언어는 이렇게 오해를 받고 있을까
이름 (The Name)
Java-prefix 는 자바스크립트가 자바의 subset 또는 덜 호환적인 자바버전과 어떤 관계가 있어 보인다. 이 이름은 혼란을 유발시키는것 처럼 여겨지고, 이 혼란으로부터 오해가 발행하고 잇따. 자바스크립트는 자바의 인터프리티드 언어가 아니다. 자바는 인터프리티드 언어이다. 자바 스크립트는 다른 엉어이다. Javascript는 자바와 문법적 유사성을 가진다. 자바가 C와 유사한만큼. 하지만 자바스크립트는 자바의 subsetd이 아니라 C의 Subset이다. 자바스크립트는 자바가 원래 의도 했던것 보다 더 잘 동작한다.
Javascript는 자바의 고향인 Sun Microsystems가 개발 하지 않았다. javascripts는 Netscape에 의해서 개발 되었다. 원래는 LiveScript라 불리었는데 오히려 그 이름이 혼란을 불러 일으키지 않는다.
-Script subffix 는 실제 프로그래밍 언어가 인것 처럼 제안한다. 스크립팅 언어는 프로그래밍 언어보다 못하다 . 하지만 핵심이 되는 것은 특성화이다. C와 비교 해서 Javascript는 동적과 표현력을 위해서 성능을 양보한 것이다.
C의 옷을 입은 Lisp (Lisp in C's Clothing)
Javascript와 같은 C-like 문법은 중괄호와 for 문장을 가지고 있어서 일상적인 절차적 언어처럼 보이게한다. Javascripts는 Lisp나 Scheme처럼 C나 Java보다 더 일반적인 기능적인 언어이다. 리스트보다 배열을 가지고 잇고, 속성 리스트 대신 오브젝트를 가지고 있다. 함수 하나만으로 클래스이며, 모든 균형이 맞추지 않고도 끼워 넣을 수 잇다.
타입변환(Typecasting)
Javascripts는 Netscape 네비게이터에서 동작되도록 고안되었다. 이것은 모든 웹브라우저에서 성공적인 표중 장비가 되었다. 이건 형변환의 결과이다. Javascripts는 프로그래밍 언어의 George Reves이다. Javascript는 웹과 관계가 없는 큰 클래스에도 잘 들어 맞는다.
움직이는 표적 (Moving Target)
첫번째 버전의 Javascripts는 매우 약했다. 상속과 내부함수와 예외 처리에서 난파되어 버렷다. 현재에 와서는 완벽하게 object-oriented 프로그래밍 언어가 되었다. 하지만 많은 경우에서 불완전한 폼에 기반하고 있다.
ECMA committee 는 Javascript의 확장을 개발하는 선의의 책무를 맡았지만 , 자바스크립트의 가장 큰 문제는 너무 많은 버젼이 존재하고 이것이 혼란을 만들어 내고 있다.
디자인상의 에러들(Design Errors)
완벽한 언어란 없다. Javascript도 디자인상의 에러들을 가지고 있다. + 연산자를 오버로딩 하는 것이 더하기와 연결 둘 다를 의미하는 것, with 문구로 부터 발생되는 에러는 무시 될 것이다. 예약어 정책은 너무 엄격하며, 세미콜론 삽입은 문자 정규 표현식과 마찬가지로 크나큰 실수 였다. 이 실수들은 프로그래밍 에러들을 유발하며, 언어 디자인의 전반적인 문제라고 일컬어 졌다. 다행스럽게도, 이런 많은 문제들은 좋은 교정 프로그램으로 인해서 해소 되었다.
언어디자인 문제는 조용해 졌다. 놀랍게도 ECMAScript committee는 이런 문제를 바로 잡는데 흥미를 보이지 않았으며, 아마도 새로운 것을 만드는 데 빠져 있을 것이다.
형편없는 구현들(Lousy Implementations)
몇몇의 초기에 Javascript로 구현된 것들은 버그 투성이다. 이것이 언어를 나쁘게 보이게 했다. 이것들로 조합된 구현들이 최악의 버그투이성 웹브라우저들에 삽입되었다.
나쁜책들(Bad Books)
많은 Javascript 책들은 지독하게 나쁘다. 에러를 담고 있으며, 저질 예제, 저질 연습을 가르친다. 중요한 요소들은 종종 잘못 설명 되었으며, 방치되었다. 나는 수 더즌의 Javasript책들을 리뷰했으며, 내가 유일하게 추천하는 책은 JavaScript: The Definitive Guide (5th Edition) by David Flanagan 이다. (저자들에게 : 당신이 좋은 책을 쓴 것이 있다면, 리뷰할 수 잇게 나에게 보내 달라)
스탠다드의 부분 스탠다드(Substandard Standard)
공식적인 언어 정의는 ECMA에서 공표되어 진다. 정의는 극강 최악의 품질을 보인다. 읽기도 이해하기도 어렵다. 이 것은 나쁜 책 문제에 일조 했다, 저자들이 그들이 언어를 이해하는데 도움을 주지도 못했으며, 표준 문서로 사용할 수도 없었다. ECMA와 TC39 위원회는 깊이 반성해야 한다.
아마추어들(Amateurs)
프로그래머가 아닌 모든 사람들이 Javascript를 작성한다. 그들은 좋은 프로그램을 작성하는 훈련과 연습이 결핍되어 있다. Javascript는 그들이 사용할 수 있는 매운 많은 표현력을 가지고 있다. 어쨋든, 이 말은 아마추어들에게 해당 되는 것이지 프로페셔널 프로그래밍에 맞지 않는다.
Object-Oriented
JavaScrpt가 Object-Oriented 인가? 오브젝트는 행위와 관련된 특정 데이터와 메소드를 담을수 있다. 오브젝트는 다른 오브젝트를 담을수 있다. 그것은 클래스들을 가지고 있지 않지만 클래스처럼 생성자를 가지고 있다. class-oriented 상속을 가직 있지 않지만 원형 상속을 지원한다. 이 두가지 방법으로 오브젝트 시스템을 구축한다. 상속(is-a) , 집합(has-a) , Javascript는 둘다 지원하지만, 태생적으로 집합을 더 잘 지원한다.
Javascript가 진정한 오브젝트-오리엔티드가 아니라는 몇가지 논쟁은 정보은폐를 하지 못한다는데 있다. 그 말은 private 값과 , private 메소드를 가지고 있지 못하다는 말이다. : 모든 멤버는 public 이다.
하지만 Javascripts는 private values와 private 메소드를 가질 수 있는 것으로 밝혀졌다(http://www.crockford.com/javascript/private.html). 물론 소수만이 이 것을 이해하고 있다. Javascript가 세상에서 가장 잘못 이해되고 있는 언어이기 때문에
Javascript가 진정한 오브젝트-오리엔티드가 아니라는 몇가지 논쟁은 상속을 지원하지 않는다는 것이다. Javascripts는 고전적인 상속을 지원하지는 못하지만 코드 재사용 패턴은 잘 지원하고 있다(http://javascript.crockford.com/inheritance.html).
Douglas Crockford : The Javascript
http://video.yahoo.com/watch/111593
'Javascript / jQuery' 카테고리의 다른 글
| Ajax의 사용과 보안 위험도 낮추기 (0) | 2008/11/28 |
|---|---|
| jQuery 3년여에 걸친 Javascript framework 전쟁에서 승자가 되다 (0) | 2008/11/12 |
| RIA - Rich Internet Application (0) | 2008/10/13 |
| prototype vs jQuery (0) | 2008/10/13 |
| Javascript: 세상에서 제일 잘못 이해되고 있는 language (2) | 2008/03/04 |
| Core JavaScript 1.5 Guide: class-Based vs. Prototype-Based Language (0) | 2008/03/04 |






