JavaScript로 Windows 프로그래밍을 해보자!

.NET Framework 은 C#, VB# 등의 여러 언어를 지원하는데, 이 중에는 JScript.NET 도 포함되어있다. JScript.NET은 JScript의 .NET 버전으로 기존의 JScript에 비해 그 범위나 성능이 대폭 향상되었다고 할 수 있다. 특히 눈에 띄는 변화는 실행파일로 컴파일 할 수 있다는 점이다.

JScript.NET 의 문법은 현재 브라우저에서 사용되는 JavaScript 혹은 JScript 보다 더 객체 지향적이고 조금 더 프로그램스럽다(?). 예를 들면, 이런 문법도 가능하다.

import System;

package Test {
	public final class newClass {
	const word:String = "word";

	private var prop:int = 3;

		public function newClass() {
			prop = prop + 5;
		}
		private function somePrivate() {
		}
		public static imStatic() {
		}
	}
}

위 코드에서 보다시피, 외부 라이브러리를 가져올 수도 있으며, package 이름을 정할 수도 있고, 완벽한 class 문법을 지원하며 심지어 static 문법도 지원하며, 상수, private 멤버, this의 생략 등도 지원한다. 웹 브라우저에서 사용하던 JavaScript 만 기억하고 있던 사람이라면 상당히 놀랄만한 일이다. 여전히 weak type언어라는 점은 변함이 없지만, 최근의 ActionScript 처럼 명시적으로 타입을 정해줄 수도 있다.

var i:int = 3;
var strings:String[] = ["a","b","c"];

Hello, world!

백독이 불여일타! (백번 읽는 것이 한번 타이핑 하니만 못하다) 라는 옛 성현들의 말씀에 따라 실제로 Hello, world 프로그램을 작성해서 컴파일까지 해보도록 하자. .NET과 마찬가지로 콘솔 프로그래밍을 위해서는 System 패키지를 가져와야한다.

import System;

참고로, C#, Java 등과 다르게 JScript.NET 에는 main() 이 없다. 그냥 전역 객체 작성하듯이 작성하면 된다. 즉, 이런 식으로 Hello, world 를 뿌려도 된다는 것이다.

import System;
.
Console.Write("Hello, world!");

하지만, 역시 뭔가 뽀대가 안난다. 앞으로의 진행을 위해서라도 class 사용하는 법을 익혀두도록 하자.

import System;

package Test {
	public class myTest {
		public function myTest() {
			Console.Write("Hello, world!");
		}
	}
}

new Test.myTest();

이제 간단한(?) 형태의 기본 프로그램이 완료되었다. 이 프로그램을 컴파일하도록 해보자. 먼저 이 프로그램을 hello.js 라는 이름으로 저장한다.

앞서 말했듯이 지금 우리가 작성하고 있는 것은 .NET 프로그램이다. 따라서 .NET Framework 이 설치되어 있어야 앞으로의 과정을 따라할 수 있다. 물론, 컴파일을 위해서는 SDK를 설치해야 한다. 1.0 이상이면 모두 해당 기능을 가지고 있으나 이왕이면 최신 버전을 이용하는 편이 좋을 것 같으니 .NET Framework 3.5 버전을 다운로드 받도록 한다. 참고로, Windows Vista 에서는 3.5 버전만 사용가능하다.

설치가 완료되었다면, 다음 경로에서 jsc 파일을 발견할 수 있을 것이다.

C:\Windows\Microsoft.NET\Framework\v2.0.50727\jsc.exe

바로 이 jsc 파일이 JScript를 실행 파일로 만들어 줄 JScript Compiler 이다. 세부 버전은 다를 수 있으나 아마도 경로는 비슷할 것이라고 생각한다. 참고로 64비트버전에는 Framework\ 대신 Framework64\ 를 입력하면 가능하다. 그럼 이제 이 파일을 실행해보자. 무어라 무어라 하면서 도움말이 주욱 나온다. 간단하게 다음과 같이 실행할 수 있다.

jsc /t:exe hello.js

/t 는 결과물의 타입을 정해주는 옵션으로 exe 면 콘솔 프로그램, winexe 면 Windows 응용프로그램, library 면 dll 파일을 생성한다.

이제, 폴더에 hello.exe가 생겼을 것이다. 실행해보면 물론 너무도 당연하지만 이런 식의 화면을 얻을 수 있다.

D:\OwnUtil>hello
Hello, World

이상으로 JavaScript (정확하게는 JScript) 를 이용해서 Windows 실행파일을 만드는 법을 알아보았다. .NET 은 MS의 최대 강점인 MSDN을 통한 문서화가 잘 되어 있어 문법적인 요소만 극복을 하면 생각보다 어렵지 않게 접근할 수 있다. 또한, 대부분의 예제에 JScript.NET도 포함해주고 있어 JScript 문법이 더 익숙한 웹 개발자들에게는 좋은 놀이거리가 될 수도 있을 것이다.

위의 /t 스위치에서 보았듯 JScript.NET 으로도 당연히 Windows GUI 프로그래밍도 가능하다. 이 부분은 나중에 기회가 되면 연재를 진행해볼까 생각한다.

  1. 문법이 상당히 액션스크립트3 와 비슷하네요..(아니 똑같나(?) 변수선언은 완전 똑같네요.)

    라기보다 역시 자바식으로 되어있군요.그전에 객체지향이겠지요..

    1. 정확히는 ECMA Script 스펙이지. 그러니까 AS3 하고도 비슷한거고(같은 거겠지). 하지만 MS측에서 공식적으로 JScript.NET이 ECMA Script v4를 구현했다고 하지 않는 것으로 봐서는 ECMAScript 참고해서 그냥 자체적으로 확장한 것 같아.

  2. JScript 로 하는 것이,
    자바스크립트 개발자 와 자바개발자중
    누구에게 더 유리한 것일까요?

    자바개발자에게 더 친숙한 것이면,

    윈도우즈 프로그래밍 하고자 할경우,
    그냥 자바로 GUI프로그램하는 것이 낳은건 아니지 모르겠군요.

    1. 아… 첫번째 것이 처음 에디트플러스 플러그인 만든다고 할 때 만들려고 했던 것인데.. 역시 있었군요 ;; 제가 한 것은 .NET 기반인데, 위의 것은 WSCript를 실행해주는 형태인 것 같아요.

      차이라면… .NET 기반이면 꽤 강력하다? .NET 객체를 다 쓸 수 있으니까, C#으로 할 수 있는 것은 JScript.NET 으로도 거의 다 가능해요. 대신 .NET 이 있어야 한다, JScript와는 달리 은근히 걸리적 거리는게 좀 있다. 정도겠고..

      scriptcruptor의 장점이나 단점은 .NET과는 반대겠죠. ^^ Native 라던지, JScript 고유의 문법이라던지 하는 것들이요.

댓글을 남겨주세요