JScript .NET
| 패러다임 | 멀티 패러다임: 객체 지향 (프로토타입 기반), 함수형, 명령형, 스크립트 |
|---|---|
| 계열 | ECMA스크립트 |
| 개발자 | 마이크로소프트 |
| 자료형 체계 | 덕, 약타입, 동적 타이핑 |
| 변수 영역 | 어휘적 범위 |
| 플랫폼 | 닷넷 프레임워크 |
| 운영 체제 | 마이크로소프트 윈도우 |
| 라이선스 | 사유 소프트웨어 |
| 파일 확장자 | .js |
| 파일 포맷 | JScript .NET |
| 영향을 받은 언어 | |
| 자바스크립트, J스크립트, ECMA스크립트 | |
JScript .NET은 마이크로소프트가 사유 소프트웨어로 개발한 닷넷 프레임워크 기반의 프로그래밍 언어이다.
J스크립트와 JScript .NET의 주요 차이점은 다음과 같이 요약할 수 있다.
첫째, J스크립트는 스크립트 언어이므로 컴퓨터 프로그램(또는 스크립트)을 실행하기 전에 코드를 컴파일할 필요가 없다. 반면 JScript .NET은 실행을 위해 공통 언어 런타임(CLR)에 의존하는 차세대 버전이므로, 명령줄 인터페이스 컴파일러를 통해 코드를 실행 전 공통 중간 언어(CIL, 과거 명칭 MSIL)로 컴파일해야 한다. 그럼에도 불구하고 JScript .NET은 런타임 시점에 소스 코드를 해석하는 기능(예: Function 생성자나 Eval 함수 사용)을 여전히 완벽하게 지원하며, 실제로 VSA 인터페이스를 통해 JScript .NET 엔진을 호스팅하는 사용자 정의 애플리케이션에서 인터프리터를 노출할 수 있다.
둘째, J스크립트는 마이크로소프트의 액티브X 및 컴포넌트 오브젝트 모델(COM) 기술에 강력한 기반을 두고 있으며, 액티브엑스 데이터 오브젝트(ADO)를 통한 데이터베이스 액세스나 파일 처리 등 대부분의 기능을 액티브X 구성 요소에 의존한다. 반면 JScript .NET은 동일한 기능을 제공하기 위해 닷넷 프레임워크를 사용한다. 하위 호환성을 위해(또는 해당하는 닷넷 라이브러리가 없는 경우를 위해) JScript .NET은 ActiveXObject 생성자와 닷넷 Type 클래스의 표준 메서드를 모두 사용하여 COM Interop을 통한 액티브X 객체로의 완전한 접근을 여전히 제공한다.
닷넷 프레임워크와 C#, 비주얼 베이직 닷넷과 같은 언어들이 널리 채택된 것과 달리, JScript .NET은 미디어와 개발자들로부터 거의 관심을 받지 못했다. 마이크로소프트의 주요 개발 도구인 비주얼 스튜디오 .NET에서도 지원되지 않는다. 그러나 ASP.NET은 JScript .NET을 지원한다.
언어적 차이점
[편집]다음은 JScript .NET과 다른 닷넷 언어 간의 주요 차이점과 비교 예시이다.
C#과의 차이점
[편집]- JScript .NET은 애플리케이션 실행 시 운영체제가 직접 호출해야 하는 엔트리 포인트(
main()함수)가 반드시 필요하지 않다. 따라서 JScript .NET 프로그램의 제어 흐름은 전역 코드를 기반으로 할 수 있다. - JScript .NET은 자료형 체크 시스템이 매우 느슨하기 때문에, 타입을 명시적으로 선언하는 일반적인 관례가 필요 없어 배우기 더 쉬울 수 있다.
- JScript .NET은 이전 버전의 J스크립트에 있던 특정 함수들(예: 직각삼각형의 각도에 대한 탄젠트를 구하는 함수 등)이 포함되어 있어, 닷넷 프레임워크 기본 클래스 라이브러리에 대한 명시적인 참조가 필요하지 않다.
- JScript .NET은 C 문법과 밀접하게 연관되어 있어 C#, 자바 또는 C++ 개발자가 배우기 쉽다.
- JScript .NET을 사용하여 윈도우 폼 애플리케이션을 만들 수 있지만, 델리게이트(delegate)를 소비할 수만 있고 생성할 수는 없기 때문에 다소 어려움이 있을 수 있다. 이로 인해 JScript .NET에서 사용자 정의 이벤트를 에뮬레이션하는 것이 어렵다.
C++과의 차이점
[편집]- JScript .NET은 main() 함수가 필요하지 않다.
- JScript .NET은 변수에 대한 명시적인 타입 선언이 필요하지 않다. (C++에서는 템플릿과 제네릭의 사용이 이와 비교될 수 있으며, 템플릿 특수화 등으로 느슨하게 에뮬레이션될 수 있다.)
- JScript .NET은 프로그램 내에서 변수를 사용할 때 명시적인 형 변환이 필요하지 않다. 문자열을 가져오는 데 사용된 코드가 정수에만 사용되는 경우 암시적으로 형 변환될 수 있다. 반대의 경우도 컴파일 타임에 오류 없이 수행될 수 있지만, 정밀도나 데이터 손실의 가능성이 있다.
예:
import System;
Console.WriteLine("Hello, what's your name?");
Console.WriteLine("Type your name: ");
var name: String = Console.ReadLine();
Console.WriteLine($"Hello, {name}");
자바와의 차이점
[편집]- JScript .NET의 문법과 어휘 관례는 자바와 유사한데, 이는 두 언어 모두 C에서 파생되었기 때문이다. J스크립트는 본래 마이크로소프트가 구현한 ECMA스크립트(일반적으로 자바스크립트로 알려짐)이며 자바와는 관련이 없다. 따라서 자바 및 기타 C 파생 언어 사용자들은 JScript .NET을 더 쉽게 배울 수 있다.
- JScript .NET은 개발자가 타입이 지정되지 않은 변수를 사용할 수 있게 허용하며, 때로는 컴파일된 코드를 최적화하기 위해 사용 사례로부터 타입을 추론하기도 한다. 반면 자바는 모든 변수에 타입을 지정해야 하지만, 자바 역시 타입 추론을 지원한다.
- JScript .NET은 런타임에 객체에 속성과 메서드를 추가할 수 있는 반면, 자바 객체는 항상 선언된 인터페이스를 따라야 한다.
- JScript .NET은 전역 변수를 지원하지만, 자바는 지원하지 않는다.
이전 버전 J스크립트와의 차이점
[편집]- JScript .NET은 타입 정보와 함께 변수와 함수를 선언할 수 있는 반면(예:
var x: String;), 기존 J스크립트에서는 타입 정보를 선언할 수 없다(예:var x;). - JScript .NET 스크립트는 해석(interpreted)되는 것이 아니라 독립적으로 실행된다. 실행 시 JScript .NET 애플리케이션은 공통 언어 런타임(CLR)을 호출한다. CLR은 인터프리터를 사용하지 않고 공통 중간 언어(CIL) 명령을 실행한다.
- JScript .NET은 컴파일러가 독립형 실행 파일과 어셈블리를 생성할 수 있으므로 브라우저나 다른 스크립팅 엔진 없이도 실행될 수 있다. 그러나 실행을 위해서는 여전히 닷넷 프레임워크가 설치되어 있어야 한다.
- JScript .NET은 닷넷 프레임워크 기본 클래스 라이브러리(BCL)에 대한 접근을 제공하여 훨씬 더 많은 기능을 제공한다.
- JScript .NET은 웹 페이지를 생성하는 기술인 ASP.NET 전용 스크립트 언어로 사용할 수 있다. 따라서 JScript .NET은 PHP 및 기타 서버 측 스크립트 언어와 유사한 역할을 한다. 그러나 인터넷 익스플로러는 여전히 이전 버전의 J스크립트 엔진만을 사용하므로, 웹 페이지(또는 HTML 애플리케이션(HTA)이나 HTC)를 스크립팅하는 데에는 JScript.NET을 사용할 수 없다. 이러한 점에서는 J스크립트가 JScript .NET보다 훨씬 다재다능하다.