티스토리 뷰
JAVA6 부터 자바 스크립트 엔진을 기본적으로 지원한다.
(ps, 안드로이드에서는 자바 스크립트 엔진이 직접 포함되지 않는다. 그렇기 때문에 RhinoScriptEngine 프로젝트를 직접 적용해야 한다. https://github.com/mozilla/rhino)
JAVA8 미만은 RhinoScriptEngine 을 사용하며, 8 버전에서는 NashornScriptEngine 을 사용한다.
하지만 사용방법은 동일하다.
물론 각 브라우저에서 사용할 수 있는 자바 스크립트 API 는 제공되지 않는다.
아래 예제는 콘솔을 통하여 두 수를 입력 받아 각각 함수와 객체를 이용하여 덧셈을 하고 그 결과 값을 출력해 주는 코드다.
test.js :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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 를 입맛대로 만들어서 적재적소에 사용할 수 있다.
물론 떨어지는 성능은 감안해야 한다.
Preview:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | 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
'개발 관련 > Java' 카테고리의 다른 글
[이클립스] 4K 해상도에서 아이콘이 작게 나오는 문제 해결 (2) | 2019.06.30 |
---|---|
HTTP 주소를 URL 인코딩하기. (0) | 2017.08.31 |
스트링 엔코딩 변환 - euc-kr <---> utf-8 (3) | 2016.03.07 |
JAVA 텍스트 파일의 Encoding 정보 가져오기 + String Encoding 변환하기. (1) | 2015.11.18 |
Guava 사용 요약 슬라이드. (0) | 2015.04.17 |
- Total
- Today
- Yesterday
- oled
- HC-06
- ndk
- activity
- json
- 안드로이드
- Cheapduino
- 개발
- 병렬 프로그래밍
- 블루투스
- ENC28J60
- Iot
- Android
- 안드로이드 개발
- 아두이노
- 스마트 무드등
- 이더넷
- 칩두이노
- bluetooth
- ESP8266
- arduino
- 알리익스프레스
- 침블락
- ATtiny85
- 부트로더
- WS2812B
- NeoPixel
- Java
- noidemcu
- 가습기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |