티스토리 뷰
반응형
Springboot든 뭐든, 웹서비스 중 javascript 구문을 입력받아 서버단에서 처리하는 경우가 있다.
그럴때 유용하게 사용할 수 있는 J2V8(V8Engine)라는 Java 바인딩 세트가 있다.
아래는 Java로 작성된 함수를 javascript구문으로 실행하는 예제이다.
J2V8의 registerJavaMethod와 JavaCallback를 사용하였고 간단하게 사칙연산의 예를 들었다.
좀 더 자세한 정보는 여기를 참고하면 된다.
import com.eclipsesource.v8.*;
public class ArithmeticCalculator {
public static void main(String[] args) {
// V8.createV8Runtime()을 사용하여 V8 런타임을 생성
try (V8 v8 = V8.createV8Runtime()) {
// registerJavaMethod 메서드를 사용하여
// 4개의 Java 메서드(더하기, 빼기, 곱하기 및 나누기)를 등록
v8.registerJavaMethod(new AdditionCallback(), "add");
v8.registerJavaMethod(new SubtractionCallback(), "subtract");
v8.registerJavaMethod(new MultiplicationCallback(), "multiply");
v8.registerJavaMethod(new DivisionCallback(), "divide");
// JavaScript code
String script = "var result = add(5, 3);\n" +
"result = subtract(result, 2);\n" +
"result = multiply(result, 4);\n" +
"result = divide(result, 2);\n" +
"result;";
// 자바스크립트코드 실행 후 결과를 변수(result)에 저장
int result = v8.executeIntegerScript(script);
System.out.println("Result: " + result);
}
}
// JavaCallback 인터페이스를 구현하는 내부 클래스(AdditionCallback,
// SubtractionCallback, MultiplicationCallback 및 DivisionCallback) 구현
// 각 콜백은 해당 산술 연산을 수행하고 결과를 반환
// JavaCallback for addition
private static class AdditionCallback implements JavaCallback {
public Object invoke(V8Object receiver, V8Array parameters) {
int a = parameters.getInteger(0);
int b = parameters.getInteger(1);
return a + b;
}
}
// JavaCallback for subtraction
private static class SubtractionCallback implements JavaCallback {
public Object invoke(V8Object receiver, V8Array parameters) {
int a = parameters.getInteger(0);
int b = parameters.getInteger(1);
return a - b;
}
}
// JavaCallback for multiplication
private static class MultiplicationCallback implements JavaCallback {
public Object invoke(V8Object receiver, V8Array parameters) {
int a = parameters.getInteger(0);
int b = parameters.getInteger(1);
return a * b;
}
}
// JavaCallback for division
private static class DivisionCallback implements JavaCallback {
public Object invoke(V8Object receiver, V8Array parameters) {
int a = parameters.getInteger(0);
int b = parameters.getInteger(1);
return a / b;
}
}
}
위 프로그램을 실행하면 JavaScript 코드가 실행되고 다음과 같은 결과가 출력된다.
Result: 18
반응형
'Devolopment > JAVA' 카테고리의 다른 글
사용자지정 어노테이션 생성방법. (선택적 옵션 및 추가속성 정의 방법 포함) (0) | 2023.06.20 |
---|---|
Hexadecimal과 RGB(Red, Green, Blue)로 표현된 색상을 서로 변환하거나 Decimal code로 변형하는 Java 코드 예제 (0) | 2023.06.09 |
수식 문자열을 받아 사칙연산 (괄호, sqrt, abs, power 포함) 수행하는 Java Code (0) | 2023.03.10 |
lucene-analysis-nori 사전교체 방법 (0) | 2020.02.25 |
application.properties (0) | 2020.02.25 |
반응형
최근에 달린 댓글