본문 바로가기

의역과 오역/Dev

당신은 JavaScript를 모른다


 나는 지난 약 일년정도 되는 기간에 짜증나는 현상이 증가하는 것을 알게됐다. 나는 프로그래머들이 그들의 이력서위에 실제로 잘 모르거나, 잠깐 만져봤던 기술들로 장식해놓는 반복적인 패턴을 경험했다. 그들은 많은 언어들을 이력서 위에 써놓지만, 그 중 가장 흔히 허풍을 떠는 언어는 JavaScript이다.


당신은 당신이 모른다는 사실을 모른다
.

 
그 이유는 거의 모든 웹 개발자들은 JavaScript가 어떤 부분에서 필요 시 된다는 것을 알고 있기 때문이다. 이해가 부족할 때, 대부분의 JavaScript를 배우는 방법은 그 때 마다 샘플 코드를 찾고 빠르게 복사/붙여넣기를 하는 것이다. 이런 식으로 배우는방법의 문제는 개발자가 실제로는 언어를 배우지 못하고, 그 언어를 알고 있다고 잘못 생각하게 된다는 점이다. 내가 JavaScript를 몇 년 동안 가르치면서 알게 된 것은 당신이 그것을 실제로 알게 되기 전까지는 자신이 모른다는 것을 모른다는 사실이다. 이런 좋지 않은 순환을 끊기 위해, 정말로 당신에게 필요한 것은 당신이 그것을 모르고 정확하게 공부할 필요가 있다고 이야기해주는 사람이다. 나는 겨우 간단한 onclick 핸들러나 샘플 코드를 따와서 폼인증 정도를 해본 사람이 이력서에 자신있는 언어 리스트에 JavaScript를 올려 놓는 것을 너무 자주 보았다. jQuery Dojo같은 프레임워크를 사용하고 그에 대해 안다는 것은 대단한 일이다. 그렇지만 그 이면의 JavaScript에 대한 깊은 이해 없이는 이런 툴킷을 마스터할 수는 없다. JavaScript의 많은 요소들을 표현하기 위해서, 나는 개념들을 내가 기초라고 생각하는 것, 중간 단계라고 생각하는 것, 일정 실력 이상으로 생각하는 것으로 나누어 보았다:


JavaScript
에 대한 기초적인 이해는 다음을 포함한다 :

-  
Loop if, try/catch문 같은 기본적인 프로그래밍 도구의 문법을 알고 있다.
-  그들이 정의되고 할당될 수 있으며, 익명함수 역시 정의할 수 있는 다양한 방법을 포함한 function이 정의를 이
해한다
.
-  기초적인 scope의 규칙과 전역(window) scope, object scope를 알고 있다.(closure는 포함되지 않는다.)
-  Context의 역할과 this 변수의 용법을 이해한다.
-  object를 선언하고 인스턴스를 생성하며, functionobject로 다룰 수 있는 다른 방법들을 이해한다.
-  ‘<’, ‘>’, ‘==’, ‘===’와 같은 JavaScript 비교 연산자들 이해하고, 무엇이 거짓인지, object string의 비교가 어떻게 일어나는지 casting이 어떻게 일어나는지를 이해한다.
-  object 속성과 function에서의 array indexing을 이해하고 이것이 실제 배열과 어떻게 다른지를 이해한다.


중급 수준의 이해는 다음을 포함한다
:

timer메소드들을 이해하고, 어떻게 작동하고 언제, 어떻게 그것이 유용한지에 대해 이해한다. 비동기 method 실행에 대해서도 이해한다.
-
  CallbackContext를 정하고, function의 인자를 넘기기 위해서 ‘call’ ‘apply’ 메소드 같은 function 애플리케이션에 대한 깊은 이해를 한다
-  JSON 표기법과 ‘eval’ function을 이해한다.
-  Closure를 이해한다. 그들이 어떻게 당신의 코드의 퍼포먼스에 영향을 주고, 사랑스러운 (function(){})()와 함께 그들이 어떻게 private 변수를 만드는 데 사용되는지 이해한다.
-  AJAXobject serialization을 이해한다.


 
상급 수준의 이해는 다음을 포함한다 :

-  ‘arguments’변수의 메소드를 이해하고, 어떻게 arguments.length를 통해 overloading에 쓰이고, arguments.callee를 통해 재귀호출을 하는지를 이해한다. ( arguments.callee를 사용할 때 ECMAScript 5 Strict 모드를 지원하지 않을 때에는 jQuery(1.4 이상) Dojo를 사용하더라도 위험성을 가지고 있다는 것에 대해 주목해야 한다.)
-  Self-memorizing, currying, partially apllied function 같은 고급 closure 테크닉을 이해한다.
-  Objcect 타입과 instanceof, typeof의 사용법을 이해한다.
-  정규식과 정규식 컴파일링을 이해한다.
-  With 구문과 왜 당신이 그것을 사용하면 안되는지를 이해한다.
-  가장 어려운 부분으로서, 이러한 방법들을 묶어서 깔끔하고, 강력하고, 유지보수가 쉽고, 크로스 브라우징이 가능한 코드를 만들 수 있는지를 이해한다


 상급 부분의 마지막요점은 특히 중요하며,
가장 도달하기 어렵다. 느슨한 JavaScript의 특징으로 인해, 당신의 애플리케이션은 손댈 수 없는 거대한 스파케티 코드가 되어버릴 수도 있다. 당신이 JavaScript를 스스로 공부한 적이 있다면, 진정한 마스터의 길은 이것을 구조화하고, 큰 웹 애플리케이션의 문맥 안에서 함께 사용할 수 있을 때 도달할 수 있을 것이다. 이 마지막 요점은 수년간의 연습과 실수를 요구하며, 책에서는 배울 수 없는 것들이다. 나는 몇 년동안 JavaScript를 하루에 몇시간 씩 공부해왔다. ?이 것이 바로 jQuery와 같은 프레임워크를 사용하는 것이 위험한 이유이다. DojoClassPackage 시스템을 통해서 약간의 도움을 줄 수 있다

 
최근의 Node.js등에서 보듯, JavaScriptback-end로 까지 파고드는 시점에서, 나는 상단의 요구사항들을 웹에 구체화된 지식에서 분리하기로 결정했다. 웹의 요소들(DOM IE)JavaScript불완전하게 만드는 요소였으며, 많은 프로그래머들을 긴장시키기도 했다. 그렇긴 하지만, 당신이 JavaScript를 웹에서 사용하려고 한다면, 좋은 프로그래머라면 알아야 할 몇가지가 있다.

-
  DOM과 이것을 text 노드를 작업하듯이 효율적인 방법으로 조작할 수 있는 노드 더하기, 제거하기, 바꾸기 등을 알아야 한다. 이것은 document fragment와 같은 도구를 사용해서 브라우저의 re-flow를 최소화하는 방법을 포함한다.
-  크로스 브라우져 방식에서 DOM 요소(style, postion 등등)로부터 정보를 추출하는 방법을 알아야 한다. 이런 것은 jQuery Dojo를 사용하는 것이 최선일 수도 있다. 그렇지만 CSS로 명시된 정보나 style tag에서 추출하는 것과 postion이나 size를 계산하는 것 사이의 차이를 알아야한다.
-  크로스 브라우져 이벤트 핸들링, 바인딩, 언바인딩, 버블링 그리고 원하는 callback context를 만드는 법을 알아야 한다. 이것 역시 framework를 사용하는 것이 가장 좋지만, IE W3C 표준을 따르는 브라우져 간의 차이를 알아야 한다
-
  Expadosattribute 셋팅에 대해서 알아야 한다. 그들 사이의 퍼포먼스 차이에 대해 알아야 하며, 존재하는 이름의 불일치에 관해 알아야 한다 .
-
  DOM node 추출을 위한 정규 표현식을 알아야 한다.
-  효과적인 브라우져의 기능을 알아야 하고, 영광스럽게 사라진 기능에 대해 알아야 한다.


 상단에 목록에서 보다시피, JavaScript에는 alert(myVal), myBtn.onclick 같은 것보다 더 많은 끔찍한 요소들이 있다. 이건 당신이 복사/덧붙이기 하는 것보다 확실히 더 많을 것이고, 당신은 읽고 실제로 활용함으로써 진정한 JavaScipt 프로그래머가 될 수 있다. ‘JavaScript : The Good Parts’‘secret of the JavaScript Ninja’는 이러한 모든 토픽들을 포함한 위대한 책들이다. JavaScript는 가장 접근성이 좋은 언어라는 사실을 기억하라. 모든 이는 브라우져를 가지고 있으며, 거기에는 설치 시간이 들지 않는다. 간단한 html 페이지를 만들고, 위의 개념을 가지고 연습을 해보라. 당신의 이력서를 장식하기 위해서, 적어도 초급 단계는 마스터하고, 중급 단계에 도전은 해봤어야 한다. 당신이 어느 순간 남의 코드를 따오기 보다 자신이 스스로 원하는 function들을 만들고 있는 것을 발견한다면, 당신은 JavaScript를 안다고 할 수 있다. 그렇지만 그걸 떠들고 다니지는 말았으면 한다.


(KTH 개발자 블로그 : http://dev.paran.com/2011/08/29/kth-news-eight-pillars-of-innovation/ )
(원문 : http://www.w2lessons.com/2011/04/you-dont-know-javascript.html )