JAVA6 부터 자바 스크립트 엔진을 기본적으로 지원한다.
(ps, 안드로이드에서는 자바 스크립트 엔진이 직접 포함되지 않는다. 그렇기 때문에 RhinoScriptEngine 프로젝트를 직접 적용해야 한다. https://github.com/mozilla/rhino)
JAVA8 미만은 RhinoScriptEngine 을 사용하며, 8 버전에서는 NashornScriptEngine 을 사용한다.
하지만 사용방법은 동일하다.
물론 각 브라우저에서 사용할 수 있는 자바 스크립트 API 는 제공되지 않는다.
아래 예제는 콘솔을 통하여 두 수를 입력 받아 각각 함수와 객체를 이용하여 덧셈을 하고 그 결과 값을 출력해 주는 코드다.
test.js :
function calc() {
try {
console.print("첫 번째 값 : ");
var param1 = console.readInt();
console.print("두 번째 값 : ");
var param2 = console.readInt();
} catch(e) {
console.println("32 바이트 정수를 입력해 주세요.");
e.printStackTrace();
return;
}
var result = sum(param1, param2);
var calc = Calculator.newInstance();
console.print("결과 (function 이용) : ");
console.println(param1 + " + " + param2 + " = " + sum(param1, param2));
console.print("결과 (object 이용) : ");
console.println(param1 + " + " + param2 + " = " + calc.sum(param1, param2));
function sum(val1, val2) {
return val1 + val2;
}
}
calc();
위 자바 스크립트 코드를 보면 생소한 API 들이 보일 것이다.
아래 자바 코드 예제에서 보면 객체를 자바 스크립트의 객체 이름을 자바의 객체와 맵핑을 시켜놓았다는 것을 알 수 있을 것이다. 자바 객체의 내부 메소드도 함께 맵핑된다.
즉, 자바 스크립트 API 를 입맛대로 만들어서 적재적소에 사용할 수 있다.
물론 떨어지는 성능은 감안해야 한다.
ScriptTest.java
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
import javax.script.Bindings;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleBindings;
public class ScriptTest {
public static void main(String[] args) throws ScriptException, FileNotFoundException {
File js = new File("./test.js");
FileReader JsfileReader = new FileReader(js);
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("js");
Bindings bindings = new SimpleBindings();
bindings.put("console", new Console());
bindings.put("Calculator", new Calculator());
engine.eval(JsfileReader, bindings);
}
public static class Calculator {
public int sum(int val1, int val2) {
return val1 + val2;
}
public Calculator newInstance() {
return new Calculator();
}
}
public static class Console {
public int readInt() {
Scanner scanner = new Scanner(System.in);
String line = scanner.nextLine();
return Integer.parseInt(line);
}
public void print(String line) {
System.out.print(line);
}
public void println(String line) {
System.out.println(line);
}
}
}
결과는 아래와 같다.
첫 번째 값 : 123
두 번째 값 : 456
결과 (function 이용) : 123 + 456 = 579
결과 (object 이용) : 123 + 456 = 579
출처 : https://dev.re.kr/88
'Back-End > Java' 카테고리의 다른 글
[Java] 자바 byte 단위로 문자열 자르기 (0) | 2023.02.10 |
---|---|
[JAVA]JXLS, POI JAVA에서 Excel 사용하는 구현 방법 및 종류 비교 (0) | 2023.02.09 |
[Java]자바(Java) 한글 초성 검색 (0) | 2023.02.09 |
[Java]자바 한자를 한글로 변환 - UTF-8 (0) | 2023.02.09 |
[Java]ENUM 파헤치기 (0) | 2023.02.09 |