카테고리 없음

[dW] 동적인 언어를 동적으로 호출하기, Part 1: 자바 스크립팅 API (한글)

버리야 2008. 4. 30. 10:35
반응형
Java SE 6에 추가된 패키지중에 자바 코드에서 스크립팅 언어를 런타임 시에 호출하도록 도와주는 javax.script 패키지가 있다. 그렇구나!


동적인 언어를 동적으로 호출하기, Part 1: 자바 스크립팅 API (한글)

이 문서에서 코드를 다운로드 받아서 실행해보면 쉽게 이해가 된다. 내부는 잘은..모르겠지만,

이 패키지는 다른 스크립트 언어로 작성된 것을 공통 API를 사용하여 호출될 수 있도록 하는 class와 interface를 제공하기에 인터페이스를 통해 JVM안에서 스크립팅 코드를 작성할 수 있고 실행할 수 있다.

스크립팅 패키지를 사용할 수 있는 경우는

  • 완벽한 규칙 엔진에 의존하지 않고, 자바 언어보다 단순한 언어로 비즈니스 규칙을 작성한다.
  • 플러그인 아키텍처를 생성하여 사용자들이 즉석에서 애플리케이션을 커스터마이징 할 수 있도록 한다.
  • 기존 스크립트를 텍스트 파일들을 처리하거나 변형하는 스크립트 같은 자바 애플리케이션에 통합시킨다.
  • 프로퍼티 파일 대신 완전한 프로그래밍 언어를 사용하여 애플리케이션의 런타임 작동을 외부에서 설정한다.
  • 도메인 스팩의 언어를 자바 애플리케이션에 추가한다.
  • 스크립팅 언어를 사용하면서, 자바 애플리케이션을 프로토타이핑 한다.
  • 스크립팅 언어로 애플리케이션 테스트 코드를 작성한다.


중요 클래스와 인터페이스

import javax.script.*;
public class EvalScript {
public static void main(String[] args) throws Exception {
// create a script engine manager
ScriptEngineManager factory = new ScriptEngineManager();
// create a JavaScript engine
ScriptEngine engine = factory.getEngineByName("JavaScript");
// evaluate JavaScript code from String
engine.eval("print('Hello, World')");
}
}


ScriptEngineManager(Class) : 스크립트 엔진을 간접적으로 찾고 생성
스크립트-엔진 매니저들이 인스턴스화 되면, 등록된 모든 javax.script.ScriptEngineFactory 구현을 classpath에서 찾는다.

ScriptEngine(Interface) : 코드에선 ScriptEngine 인스턴스를 사용하여 스크립트를 실행하는데 스크립팅 코드와 기반 언어 인터프리터 또는 코드를 실행하는 컴파일러 사이의 중개자로서 작동한다.

ScriptEngine의 인스턴스를 이용하여 Java 메소드 안에서 JavaScript나 Ruby의 function 코드를 정의할 수도 있고 function을 통해 수행된 결과를 eval함수를 통해 출력창에 뿌릴수도 있다.
또, 스크립팅 코드에서 자바 메소드를 호출할 수도 있다.

Java Scripting Programmer's Guide
http://java.sun.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html

Script Engines in this project (so far!)
https://scripting.dev.java.net/


반응형