이 글은 자바스크립트의 가장 유명한 사람인 더글라스 크락포드의 글을 읽고 적은 내용이다. 더글라스 크락포드는
제이슨(JSON) 형식의 창시자로 아마 많은 분들이 이미 이 글 및 이 책에 대하여 알고 있을 것이다. 그는 '
자바스크립트 핵심 가이드'라는 책의 저자이기도 하다.
"세상에서 가장 잘못 이해되고 있는 언어, 자바스크립트"처음 이 글을 읽던 때도 벌써 몇 년 지났다. 이 글이 전해주고자 하는 바는 자바스크립트는
다른 어떤 언어보다 강력한 기능을 가진 언어임에도 이를 발못이해하여 제대로 사용하지 못하고 있음을 일깨워주는 내용이다.
자바스크립트를 공부하거나 관련된 직무를 하고 있다면 반드시 읽어바야 할 필수 글이 아닌가 생각된다. 좀 더 자세한 내용은 그의 웹사이트에서 찾아볼 수 있다. 이 글은 그의 글에 대하여 일부의 소개이다. 아래링크를 참조하자! 이글은 아래 링크를 참조한 내용임을 밝힌다.
* 참조 (Douglas Crockford)- www.crockford.com/javascript.html 출처 - 더글라스 크락포드 블로그! 자바스크립트의 이름에서 오는 혼동
자바(Java)라는 이름때문에 자바와의 문법적 관련이 있을거라는 혼란을 가져왔다. 하지만 자바스크립트는 자바를 만든 Sun에서 만들어지지 않았으며 Netscape에 의하여 만들어졌다. 그리고
자바보다는 오히려 C의 문법에 가깝다.
! C의 옷을 입은 Lisp
자바스크립트의 문법은 C와 유사하다. 대괄호 그리고 for문을 사용한다. 이 때문에 일반적인 절차지향언어로 보일 수 있으나 사실 List 그리고 Scheme 같은 함수적 언어와 비슷하다. 함수적 언어에 C와 자바가 추가된 것이다. 자바의 함수는 일급함수이다. 또한 자바스크립트는 클로저(Closure)를 가진다. 또한
람다(Lambda)를 사용할 수 있다.
! 형변환
자바스크립트는 Netscape Navigator에서 구동되도록 만들어졌다. 이것은 모든 브라우저에서 표준이 장비가 되었으며 이것이 형변환의 결과이다. 자바스크립트는 웹과 관련이 없는 대형 클래스 어플리케이션에도 잘 맞는다.
! 움직이는 표적
첫번째 버전은 취약점이 많았다. 핸들링, 내부함수, 상속등의 취약점이 그런 것들이다. 이제는 완벽한 객체지향 언어이다.
! 디자인상 오류
세상에 완벽한 언어란 존재하지 않으며 자바스크립트도 설계상의 에러를 가지고 있다. 예를 들어 +연산자의 오버로딩이 더하는 것과 연결하는 것 둘 다를 의미하고,
with 문법으로 발생하는 에러는 무시될 것이다. 예약어 정책은 굉장히 엄격하다. 세미콜론 삽입은 커다란 실수였다. 운이 좋게도 이런 많은 오류들은 좋은 Lint 프로그램으로 완화되었다.
! 형편없는 구현들
초기의 일부 구현들의 경우 버그가 매우 많았고 이것은 언어를 나쁘게 보이게 했다. 이 조합의 구현들은 버그 투성이 웹브라우저에 내장되었다.
! 나쁜 책들
거의 대부분의 책들이 형편없다. 그것들은 에러와 잘못된 예제 그리고 나쁜 습관을 가지게 한다. 가장 중요한 언어적 특징이 미흡하거나 대부분 제외되어 있다. 대부분의 책들을 리뷰했을때 추천할 책은 David Flanagan의 Javascript: The Definitive Guide이다.
! 충분하지 못한 표준
공식적인 언어 정의의 표준은 ECMA에 의하여 이뤄진다. 이 명세들의은 매우 낮은 수준이며 읽고 이해하기 어렵다. 이는 나쁜 책이 원인이며 저자가 표준에 대한 사용을 하지 못했기 때문이다.
! 아마추어
프로그래머가 아닌 대부분의 사람이 자바스크립트에 대하여 글을 쓴다. 그들은 교육이나 훈련을 통해 좋은 책을 쓰는 데 충분치 않다. 자바스크립트는 강한 표현력을 사용해 유용하게 할 수 있는 것들이 많다. 이것은 아마추어들에게는 엄격하게하는 명성이 되었으나 전문적인 프로그래밍에는 맞이 않는다.
! 객체지향
자바스크립트는 객체지향인가? 그것은 객체를 가지고 있고 데이터와 메소드를 담는다. 객체는 다른 객체를 담는다. 이것은 클래스 언어가 아니다. 그러나 생성자를 통해 클래스가 역할을 할 수 있다. 이는 클래스를 통한 상속이 아니라 프로토타입에 의한 상속에 의해 이루어진다.
객체를 설계하는 것은 두 가지 방식은 상속과 집합이 있는데 자바스크립트는 이 둘을 모두 포함하나 집합을 더 잘 지원한다.
자바스크립트의 객체지향에 대한 논의는 private 변수와 메소드를 가지느냐 못가지냐에 대한 논쟁에 있었는데 자바스크립트의 객체는 이를 갈 수 있는 것으로 드러났고 물론 아직도 이에 대한 이해가 잘 되지 않기 때문에 세상에서 가장 잘못 이해되고 있는 언어이다.
자바스크립트가 진정한 객체지향이 아니라는 논쟁은 상속을 지원하지 못한다는 부분에 대한 논쟁이 있다. 하지만 자바스크립트는 고전적 상속은 지원하지 않으나 재사용 패턴에 대한 코드를 지원한다.
# 마치면서
위 글을 예전에 좋아하는 글을 읽고 간략하게 정리한 내용입니다. 개인적으로 좋아하는 글로 자유도가 매우 높은 자바스크립트의 이야기죠... 예전의 자바스크립트는 현재와 비교할 수 없을 만큼 그 쓰임과 인기가 상승했습니다. 2018년에는 드디어 자바보다도 더 ... 가장 인기있는
언어가 되었습니다. 앞으로도 그 상승세는 계속 이어지겠지요 ~~ ES 6, 7을 넘어 점점 발전해 나가는 모습도 기대됩니다.