자바스크립트는 왜 만들어 졌을까요? 자바스크립트는 C언어의 복잡성을 감추기 위해 만들어 졌습니다. 즉 Perl, UnixScript, Ruby, PHP와 같이 C계열 계보를 가지는 스크립트 언어입니다. JS의 형체는 PHP와 가장 비슷합니다. C의 복잡성에서 가장 대두가 되는 것은 포인터 사용이 아닐까 싶습니다. 게다가 포인터를 이용한 복잡한 자료구조를 만들어 내고 이해하며 쓰는 것은 참 어려운 일이지요. 자바스크립트는 C언어 사용의 이러한 어려움들을 해소해 주도록 만들어진 것입니다. 즉, 자바스크립트는 C를 편리하게 사용하기 위한 것입니다.


자바스크립트가 C계열이라면 어떻게 C로 바뀐다는 것일까요? 자바스크립트는 텍스트로 만들어지죠. 컴파일 단계가 없습니다. 즉 자바스크립트로 만들어진 코드 자체는 컴퓨터가 알아먹을 수 없지요. 그래서 스크립트 해석기가 필요합니다. 모든 브라우저에는  이 해석기가 있고요. 크롬의 경우 V8(http://code.google.com/p/v8/)이라고 하고 IE는 Trident, 사파리는 니트로라고 하지요. 사실 이것들을 해석기라기 보다 자바스크립트 엔진이라는 표현이 맞습니다. 왜냐하면 자바스크립트 코드를 기계가 인지할 수 있도록 해석하는 것외에 동작도 시키니깐요. 자~ 그럼 이런 자바스크립트 엔진은 뭘로 만들어졌을까요? 바로 C입니다. 자바스크립트 코드는 C로 만들어진 이 들 엔진들에 의해 해석하고 구동됩니다.


그럼 우리는 이 쯤에서 한 가지 결론을 낼 수 있습니다. 자바스크립트를 제대로 다룰려면  자바스크립트 코딩을 할 때, C언어를 봐야한다는 사실입니다. 모든 구문이 C로 해석되고 C를 통해 어떻게 구동된다는 것을 인지해야 최적화를 제대로 할 수 있다는 것을 의미합니다.


가령 예를 들어보지요.


var a = 11;

a.toString(); //'11'


위 구문은 어떻게 동작하는 것일가요?

a는 숫자입니다. 게다가 우리가 다른 언어로 기존에 배운데로 본다면 객체가 아닌 값(Primitive)입니다.(자바스크립트는 Ruby와 다르게 값과 객체를 분리했습니다. 좋지 못한 결정이였으나 현재로선 어쩔 수 없습니다.) 어찌 저것이 가능할까요? a.toString()은 실제로는 순식간에 Wrapper객체(Boxing객체)를 만들어 냅니다. 다음 처럼요.


new Number(a).toString(); 


new Number()를 통해 값을 숫자 객체로 순식간에 바꾸고(Boxing), 반대로 다시 값으로 바뀌는 과정(Unboxing)이 순식간에 일어나는 일이지만 객체를 생성하고 해제하는 비용은 함수를 호출하는 행위보다 몇갑절 비싼 비용이 듭니다. 만약 저런 행위를 하고 싶다면 차라리 다음 처럼 만드는게 좋을 겁니다.


fromNumberToString(a); //'11'


네... fromNumberToString()이라는 함수를 만들어 실행하는 편이 성능면에서 훨씬 이득을 가져올 것입니다. 적어도 객체를 만드는 과정을 생략할 수 있을테니깐요. C에서 해석, 구동된다면 sprintf(string, '%d', a);로 char 참조포인터인 string을 반환하도록 되어 있겠지요. 


재미있는 것은 a.toString()은 명시적으로 썼기 때문에 그나마 나은 편이나 a + 'bbb' 또는 console.log(a) 식으로 a를 쓴다고 가정한다면 이 a는 암시적으로 toString()에 접근합니다.  계속 강조하지만 C언어에서 해석되어 구동된다고 가정하면 당연한 결과입니다. 


C언어에서 a.toString()이 어떤 식으로 해석하고 구동할 것인가 끊임없이 생각해야 하는 이유가 여기에 있습니다. 


사실 명시적이든 암시적이든 Boxing, UnBoxing 과정 비용이 비싸다는 점을 인지하는 겁니다. 그냥 자바스크립트를 독립된 언어로만 생각했던 우리(아니... 나만?)는 이러한 사실을 무시하고 개발해 왔습니다. 모바일이 우리의 생활에 파고들었고 웹앱이나 하이브리드앱등으로 인해 자바스크립트의 위상이 높아짐에 따라 성능을 고려하지 않고 개발하면 경쟁력을 잃어버리는 시기가 되었습니다. 중요한 것은 모든 브라우져 업계에서 자바스크립트를 어떤 형태로 사용했던 간에 자바스크립트 자체는 모두들 인정했다는 사실입니다. 그만큼 자바스크립트는 객관적으로 좋은 언어라고 볼 수 없지만 위상은 역사 속에서 그 가치를 인정받고 있으며 매우 중요해졌습니다.  


글쓴이 : 지돌스타(http://blog.jidolstar.com/807)