Rev. 2.73

1년 전 구글은 자바스크립트를 대체할만한 새로운 언어인 다트(Dart) 만들겠다고 발표했고 1년이 지난 지금 M2 버전을 발표하면서 쓸만한 수준으로까지 만들어 놓은 것 같습니다. 이에 질세라 MS도 비슷한 시기에 타입스크립트(TypeScript)라는 새로운 자바스크립트 프로그래밍 대안을 제시했습니다. 이 둘의 공통적인 지향점은 자바스크립트를 대체하기 보다는 부족한 점을 보완하고 편리성, 확장성, 생산성 향상을 도모해 애플리케이션 규모의 개발을 이롭게 하자는 것입니다. 이러한 측면에서 개발자에게 애플리케이션을 개발하는 새로운 방법을 제시하는 것 그 이상도 그 이하도 아니라는 점은 분명합니다. 일부 시각에서 대체라는 둥 한계라는 둥, 신경 거슬리는 말을 자주 사용하는데 전혀 동요할 필요가 없겠습니다. 그래도 이 새로운 언어들이 계속해서 눈에 밟힐 것 같아 차이점 정도는 집고 넘어야겠다 싶어 알아보았습니다.

타입스크립트는 ECMA 표준에 근거한 다음 버전의 자바스크립트 규격에 기반을 뒸습니다. 이것은 앞으로 표준이 될 가능성을 염두에 둔 자바스크립트 슈퍼셋입니다.(예: C++은 C의 슈퍼셋) 타입을 검사할 수 있고, 기존 라이브러리를 그대로 사용하며 크로스 플랫폼으로 작성할 수 있는 장점이 있다고 합니다. 기존 자바스크립트와의 호환성을 위해 타입스크립트로 작성된 코드를 자바스크립트로 컴파일 할 수 있으며, 그 완성도가 매우 뛰어납니다. 타입스크립트는 Node.js에서도 사용할 수 있도록 모듈을 배포하고 있네요. 타입스크립트의 개발은 비주얼 스튜디오 2012에서 이루어지며 플러그인 형태로 설치할 수 있습니다. 혹자는 액션스크립트 3으로 자바스크립트를 짜는 거네... 차라리 CoffeeScript를 쓰겠어, 성능은?, 네이티브로 작동하기 위한 계획이나 확산 계획이 불분명하다는 부정적인 반응도 보입니다. 아래는 타입스크립트가 자바스크립트로 컴파일된 예입니다.

// typescript
class Greeter {
    greeting: string;
    constructor (message: string) {
        this.greeting = message;
    }
    greet() {
        return "Hello, " + this.greeting;
    }
}

// javascript
var Greeter = (function () {
    function Greeter(message) {
        this.greeting = message;
    }
    Greeter.prototype.greet = function () {
        return "Hello, " + this.greeting;
    };
    return Greeter;
})();

다트는 전통적인 클래스기반 객제지향언어입니다. C#, Java를 다뤄본 경험이 있다면 다트의 문법이 친숙하게 느껴질 것입니다. 자바스크립트와 마찬가지로 싱글 스레드로 작동하지만 자체적으로 제공하는 다트 VM(가상 머신)에 탑재된 Isolate를 이용하여 멀티 스레드를 구현할 수 있습니다. VM이 있다는 것은 곧 Node.js와 같은 서버-사이드 프로그래밍도 가능하다는 말입니다. 서버와 클라이언트간 코드가 동일하다는 점에서 비롯되는 이점은 의외로 많습니다. 예를 들면, 시스템 사양이 좋은 테스크탑에서는 클라이언트의 리소스를 활용하고 그렇지 않은 모바일에서는 서버의 리소스를 활용하는 로직을 하나로 코드로 관리할 수 있게 되는 것이죠. 그러나 이것은 모든 환경에 VM이 탑재되었을때 비로소 가능한 것입니다. VM이 보편화하기 전까지는 다트로 작성된 코드가 자바스크립트로 컴파일되도록 하자는 전략입니다. 이클립스기반의 다트 에디터에서 통합 개발환경을 제공하고 다트 VM이 탑재된 크롬 브라우저인 Dartium에서 다트 코드를 테스트할 수 있습니다. 그리고 자바스크립트 컴파일러, VM, 패키지 매니저로 구성된 SDK를 제공합니다. 다음은 다트의 예문입니다.

import 'dart:html';

main() {
  var msg = query('#msg');
  var btn = new ButtonElement();
  btn.text = 'Click me!';
  btn.on.click.add((e) => msg.text = 'Dart!');
  document.body.nodes.add(btn);
}

덧. 실제로 다트나 타입스크립트를 직접 경험하지 못한 상황에서 바라본 시각으로 작성했다는 점 참고해주세요. 두 언어 모두 근사한 기능을 말하고 있지만 현시점에서 실무에 적용하려면 컴파일러를 통해 자바스크립트로 변환하여 적용하는 일이 고작인듯합니다. 그렇다고 아직 개발 중인 녀석들에게 왈가왈부할 수도 없는 상황이네요. 저는 올해부터 다트를 공부하기로 마음먹었습니다. 다트가 자체적인 런타임을 가지고 있다는 부분이 정말 매력적으로 느껴지더군요. 웹의 범주를 넘어서는 가능성을 열어두었다는 생각이 듭니다. VM위에서는 어느 정도의 성능이 나올지 벌써부터 기대되는군요.

Comments

Got something to add? You can just leave a comment.

Your Reaction Time!

captcha

avatar