티스토리 뷰

반응형

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

 

반응형
반응형
최근에 달린 댓글