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 프로그래밍도 가능하다. 이 부분은 나중에 기회가 되면 연재를 진행해볼까 생각한다.

    • shgraph
    • April 17th, 2008 12:03am

    http://www.abyssmedia.com/scriptcryptor/
    요런 것도 있드라. : )
    http://www.htmlexe.com/
    이런건 나중에 매뉴얼 배포할 때 상당히 도움이 될거 같기도 하고.^_^

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

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

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

    • JISU
    • April 16th, 2008 11:26am

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

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

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

    • 릴군
    • April 16th, 2008 1:58am

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

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

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

  1. No trackbacks yet.