Java - JSR223 스크립트 API

2020. 3. 6. 01:30소프트웨어 공학/코딩 공부

개요

Java Scripting API (JSR223)프로그램 내부에서 다른 언어로 작성된 스크립트를 실행하는 기능을 제공한다.

Java 1.6부터 출시된 이래 많은 개발자들이 이용하고 있다. javax.script 패키지 안에 API를 확인할 수 있다.

JSR223의 패키지 내용을 조사해보면 세 가지 구성요소를 볼 수 있다.

 

  1. ScriptEngine - 스크립트를 해석하고 실행한다.
  2. ScriptEngineManager - 스크립트 엔진을 색인, 제공한다.
  3. ScriptEngineFactory - 엔진 구현에 필요한 인터페이스

사실 ScriptEngine은 추상 클래스이고, 이를 구현한 스크립트 엔진을 따로 설치해야 한다.

먼저 빌드툴이나 IDE 등 의존성 관리 도구를 통해 스크립트 엔진을 설치하자.

(Nashorn 엔진을 사용할 경우 별도의 설치가 필요 없다.)

 


스크립트 엔진

사용하려는 스크립트 언어에 맞는 엔진을 선택하면 된다. 인터넷을 뒤져보면 아래 목록에 없는 것도 많이 있다.

 

Nashorn

JavaScript를 지원하는 엔진이다. Java 런타임 환경에 기본 내장되어 있다.

하지만 Java 11부터 deprecate 되었고, 차후 버전에서 삭제될 예정이다.

 

GraalJS

Oracle이 최근에 개발한 JavaScript 전용 엔진이며 Nashorn을 대체할 것으로 보인다.

실행 환경에서 GraalVM Javascript 설치가 요구된다 (우회방법 있음).

▶ Maven 저장소

 

Groovy-jsr223

Groovy 언어를 스크립트로 사용할 수 있는 엔진이다.

▶ Maven 저장소

 


사용 예제

스크립트 엔진 초기화

public static void main(String[] args) {
    /*
     * 생성자 인자값으로 ClassLoader를 넘긴다면
     * 그곳에서 스크립트 엔진을 불러올 것이다.
     */
    ScriptEngineManager man = new ScriptEngineManager();
    
    // 필자는 Groovy-jsr223 엔진을 선택하였다.
    ScriptEngine engine = man.getEngineByName("groovy");
}

ScriptEngineManager는 스크립트 엔진을 색인 후 ScriptEngine 객체를 반환한다.

 

스크립트 실행

private void evaluateScript() {
    ScriptEngine engine = ...
    
    try {
        engine.eval("println('Hello world')")
    } catch (ScriptException e) {
        e.printStackTrace();
    }
}

ScriptEngine#eval(String script) - String으로 주어진 스크립트를 실행한다.

ScriptEngine#eval(Reader reader) - Reader로 스크립트를 실행한다. 활용 예: FileReader

 

 

바인딩, 스크립트 문맥

To be continued...

'소프트웨어 공학 > 코딩 공부' 카테고리의 다른 글

3-3. Kotlin 클래스 추상화  (0) 2020.03.04
3-2. Kotlin 클래스 상속  (1) 2020.03.03
3-1. Kotlin 클래스 생성자  (0) 2020.03.03
3. Kotlin 클래스  (0) 2020.03.03
2. Kotlin 자료형  (1) 2020.03.02