[책] 자바스크립트 닌자 비급

2014_04_14_11_08_29

언제나 여러권의 책을 읽고 적당한 리뷰를 올리고 있습니다만 자바스크립트 닌자 비급은 특별히 리뷰를 깊이 해야(만)하는 자바스크립트 언어에 있어 중요한 책입니다.

PHP개발자를 위한 자바스크립트나 오라일리의 자바스크립트웹프로그래밍(역서:자바스크립트for웹2.0) 등에서도 이론적인, 이상적인 자바스크립트가 아닌 현실적인 자바스크립트를 다루려는 노력은 항상 있어왔습니다.

하지만 그 전에도 존레식이 집필한 프로자바스크립트테크닉만 현실적으로 도움이 되었던 것처럼 다시 존레식이 쓴 자바스크립트 닌자 비급이야말로 실무수준의 자바스크립트에는 가장 근접한 책입니다.

뭐 그렇다곤 해도 실제 상용수준의 자바스크립트와 비교하면 여전히 입문자용이긴 합니다만, 자바스크립트를 잘 모르는 초보자들이(개발초보라는 의미가 아니라^^) 언어의 스펙적인 측면에 빠져 현실세계의 브라우저에서 제대로 된 자바스크립트 기술을 쓰지 못하게 유도하는 이론서들과 비교하면 확연한 차이가 있습니다.

자바스크립트는 순수한 언어가 아닙니다. 즉 언어의 스펙대로 익힌다고 온전하게 사용할 수 있는 언어가 아니라고 봐야겠죠.

그저 많은 가능성이 열려있어 쓰레드, 비동기, 타이머루프가 복잡하게 얽혀서 실행컨텍스트를 생성합니다. 또한 함수객체나 프로토타입의 키체인 시스템으로 인한 여러가지 요소나 eval, script태그, 함수의 toString등 복잡한 메타언어의 기능을 제공합니다.

또한 자바스크립트의 구동기반은 브라우저나 전용 인터프리터들인데 이들 모두가 각기 다른 언어스펙을 구현하고 클래스라이브러리로서 DOM, BOM, 자바스크립트코어 객체의 기능이나 지원범위가 전부 상이합니다.

이 모든걸 외면한 순수 스펙대로의 자바스크립트를 공부하는 것은 실제로는 아무런 쓸모가 없습니다. 바로 이 점을 인정하고 그것으로부터 출발한 책이 존레식의 두 권뿐인 책 중 나중에 쓴 이 책입니다.

어찌보면 이 책은 프로자바스크립트테크닉 2판에 가깝다는 인상입니다. 그 사이에 시간이 흘러 많은 변화가 있었지만 오히려 책 내용은 레트로의 복귀랄까 더욱 더 실무에서의 지저분한 자바스크립트의 각 부분을 어떻게 효과적으로 사용할지에 대해 분량을 늘렸습니다.

 
 

1부 훈련 준비

이 장은 단위테스트를 포함한 테스트기반환경 구축에 대해 가볍지만 체계적으로 다루면서 실제 간단한 테스트시스템을 작성해 갑니다. Qunit의 매우 가벼운 버전을 만들어보면서 자바스크립트의 단위테스트 종류와 방법에 대한 고찰, 시장에 런칭되어있는 몇가지 테스트프레임웍의 소개로 마무리 됩니다. 머 고만고만 간단하고 쉬운 내용입니다만 메세지는 명확합니다. 제발 테스트 좀 하고 살자! 라는 거죠.

단위테스트에 대한 개념이 없는 입문자를 위한 안내와 동시에 기존 언어와 자바스크립트의 단위테스트 사이의 차이점도 잘 정리해뒀습니다. 이 내용은 결국 후반에 with 등에서 더 깊어지므로 차근히 한 번쯤 읽어보면 됩니다(고작 30페이지 내외..)

 
 

2부 견습 훈련

 

함수

자바스크립트의 함수객체에 대한 기본 스펙을 매우 소상히 설명하는 정도가 아니라 각 스펙으로부터 창발되는 다양한 패턴을 동시에 소개합니다.
arguments, this, name, length 등 함수의 여러 가지 속성이 call, apply, 익명함수, 스코프와 결합하여 어떤 식으로 활용되는가를 이해하기 쉽고 현실적으로 쓸만한(?) 코드를 곁들여 설명합니다.

(단지 name이나 length는 호환성 문제가 있어서 그냥 쓰기는 뭐하지만 사실 이 책을 집필한 시점엔 여러 문제가 다 인지되었을텐데도 무시하고 callee, with, eval, name, length 등을 남발하고 별로 신경도 안쓰는 대범함이 이어집니다)

크록포드옹의 책에 비해 열배정도 자세하게 함수객체의 활용을 설명합니다. 즉 입문자들이 자바스크립트에서 드디어 함수라는 걸 쓸 수 있게 해줍니다!

 

프로토타입

달랑 6장만 할당된거 같지만 무려 40페이지에 걸쳐 프로토타입을 소상히 설명합니다(이 정도 분량으로 프로토타입의 이모저모를 예제와 가르치는 책이 있었던가!)

특히 상속을 활용하거나 각종 네이티브 코어객체의 확장문제도 다루고 있어 입문자에게 현실적인 자바스크립트식 객체지향의 세계를 알려줍니다.

정규식과 타이머

정규식에 대한 친절한 설명과 사용법, 응용법을 다루는데 특히 replace의 활용법을 여실히 보여줍니다(bs.tmpl이 쓰고 있는 ㅋㅋ)

브라우저에 내장된 타이머(노드나 라이노에서도 제공하지만..)를 이용하여 비동기, 동기 처리를 어떻게 하는지에 대한 자세한 테크닉을 다룹니다.

태반 구전전수하는 기술들인데 이걸 이렇게 명쾌하게 집필한 것 자체가 놀랍습니다(저도 여러 차례 스터디나 블로그의 글로 다루는 주제인데 참 비교되는군요 ^^;)

 
 

3부 닌자 훈련

 

런타임코드

2부까지는 복잡해보이지만 숙련된 js개발자에겐 그저 일상입니다. 놀랍게도 그 일상적인 레벨을 제대로 가르치는 책이 없었다는거죠. 실제 자바스크립트는 복잡한 언어입니다. 독특한 특성 때문에 그 어떤 언어와도 닮지 않아 제대로 사용하기 어렵습니다. 그 중 메타언어로서의 특징은 당황스럽기까지 하죠. 특히 이 부분은 뭔가 명시적으로 알려져있지 않고 아는 사람들끼리 알아서 쓰는 구전전수의 대표적인 분야입니다.

하지만 이 책은 그 모든 방향성을 샘플코드와 함께 제시하고 있습니다. 1단계로 창발된 패턴을 다 보여주는 수준입니다. 이 후는 독자가 이를 바탕으로 2차 창발을 일으키냐의 문제겠죠.

쨌든 자바에 익숙하신 분들은 POJO를 비롯한 AOP등이 대세가 되어가고 이는 곧 런타임에 대규모로 리플렉션을 통해 클래스정의를 한다는 의미입니다. 이젠 머 자바가 컴파일언어라고 부르기도 애매한 것이 너무 많은 리플렉션을 사용하는게 주류 프레임웍의 대세입니다. 자바스크립트는 원래 문자열만 있으면 인터프리팅할 수 있는 스크립트언어인데다가 함수의 toString은 역으로 원본 코드를 출력해줍니다. 이 둘을 합체하면 메타언어로서 훌륭한 기반을 제공하게 됩니다.

이 내용도 무려 30페이지 가까운 분량으로 소상이 다룹니다. 특히 본인의 프로세싱js구축 예를 들면서 아예 커스텀 컴파일러와 메타언어에 대해 권장하기도 하는 부분은 기존의 책들이 어떻게든 자바스크립트를 컴파일안전성을 확보하는 방향으로 개발해야한다는 기조에 정면으로 야유하고 있습니다 ^^

 

with

with는 뭐가 되었든 현재 거의 모든 템플릿라이브러리에서 템플릿 변수공간을 제공하기 위해 사용하는 기능입니다. 아예 대놓고 이런데 어쩔건데 라는 논조가 너무 맘에 듭니다. 사실 익명함수로 확정키를 지역변수로 세탁하는 것처럼 실은 객체 전부다 세탁할 수 있죠(bs의 경우 이 방법을 사용합니다) 예를들어 다음과 같은 with구문을 생각해보죠.

var obj = {a:3, b:5, c:7};

with(obj) console.log( a + b + c );

그렇다면 스코프를 완전히 무시하고 new Function을 쓸 생각을 한다면 인자로 처리될 문자열과 obj의 각 키를 인자로 보낼 배열을 구성하면 됩니다.

var obj = {a:3, b:5, c:7};

//new Function의 몸체함수
var Fbody = function(){
	console.log( a + b + c );
}

//new Function의 인자선언부분
var Fparam = [];

//실제 new Function을 실행할 때 넘길 인자
var Farguments = [];

//키는 인자선언에, 값은 넘길인자에
for( var key in obj ) Fparam.push( key ), Farguments( obj[key] );

//Fbody를 각각에게 삽입한다
Fparam.push( 'Fbody' ), Farguments( Fbody );

//이제 실행하면 된다!
( new Function( Fparam.join(','),  ' Fbody();' ) ).apply( null, Farguments );

이 방법을 통하면 ‘Fbody();’ 라는 문자열 외엔 전부 인터프리터의 검사를 받게 되어 상당한 안정성을 높일 수 있습니다. Fbody함수 입장에서는 스코프가 전부 new Function의 인자수준에서 참조되는 방식입니다.

 

그 이후 부분

약 170페이지 분량으로 브라우저지옥을 다루고 있습니다. 근데 내용에 비하면 지면이 부족하다 싶습니다. 이 부분은 꼭 기존의 프로자바스크립트테크닉과 같이 합체해서 보시길 권장합니다.

기술적이고 짜잘해서 하나하나 언급하지는 않겠습니다만, 현실적인 브라우저 대응을 귀찮아하지 않고 하나하나 특성을 파악해서 처리하게 하고 있습니다. 역시 자바스크립트의 진실은 개노가다입니다.

 
 

결론

자바스크립트를 배우려면 우선 이 책으로 2부까지 정독하고 프로자바스크립트테크닉을 완독한 뒤 다시 이 책으로 돌아와 3부를 읽으시면 딱이겠습니다!

%d 블로거가 이것을 좋아합니다: