웹개발 및 최신 테크 소식을 전하는 블로그, 웹이즈프리

HOME > js

가장 잘못 이해되고 있는 언어, 자바스크립트 이야기

Last Modified : 2019-02-06 / Created : 2016-04-28
3,560
View Count
 
이 글은 자바스크립트의 가장 유명한 사람인 더글라스 크락포드의 글을 읽고 적은 내용이다. 더글라스 크락포드는 제이슨(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을 넘어 점점 발전해 나가는 모습도 기대됩니다.
아래의 글도 찾고 계시지 않나요?

    Previous

    href 속성에 javascript void:(0) 사용하는 이유

    Previous

    ECMAScript 무엇이고 자바스크립트는 같은 것일까? 차이점은?