1. Python
자바에서 파이썬을 사용하려면 자이썬(Jython)을 다운받아야 한다. 자이썬은 자바 플랫폼에서 사용하는 파이썬, 즉 자바 언어로 만들어진 파이썬이다. https://www.jython.org/download의 주소에서 jar파일을 다운받고 프로젝트에 추가시키는 것으로 간단하게 사용 가능하다.
예시코드1 : 자바와 파이썬을 같이 사용
import org.python.util.PythonInterpreter;
public class main {
private static PythonInterpreter interpreter;
public static void main(String[] args) {
interpreter = new PythonInterpreter();
interpreter.exec("from java.lang import System");
interpreter.exec("s = 'Hello World'");
interpreter.exec("System.out.println(s)");
interpreter.exec("print(s)");
interpreter.exec("print(s[1:-1])");
}
}
이 경우 출력되는 값은
Hello World
Hello World
ello Worl
이다.
예시코드2: 파이썬 파일(.py) 가져와서 사용하기
import org.python.util.PythonInterpreter;
public class main {
private static PythonInterpreter interpreter;
public static void main(String[] args) {
interpreter = new PythonInterpreter();
interpreter.execfile("test.py");
interpreter.exec("print(sum(7,8))");
}
}
이 경우 test.py의 sum이라는 메소드를 사용할 수 있게 된다.
2. C/C++
자바에서 C/C++언어를 사용하려면 JNI(Java Native Interface)가 필요하다. JNI는 자바로 구현하기 어려운 기능을 C/C++에서 구현할 때 주로 사용되는데, JNI의 사용법은 앞의 자이썬과 달리 꽤나 번거롭다. 콘솔에 "Hello World"를 출력하는 간단한 예시를 살펴보자.
먼저 자바 코드를 생성해준다.
public class JNI {
static {
System.loadLibrary("JNI");
}
private native void printHelloWorld();
public static void main(String[] args){
JNI jni = new JNI();
jni.printHelloWorld();
}
}
static 초기화 블럭으로 나중에 만들 dll파일을 불러온다. 또한 native 메소드를 만들어줘야 하는데, native 키워드는 JNI를 사용할 때 사용되는 키워드다. native 메소드는 dll 파일에 존재하는 실제로 구현된 함수를 호출하기 위해 존재하는 메소드이고, 구현을 하지 않는다. 이대로 컴파일을 하면 dll파일이 없어서 에러가 컴파일 에러가 발생한다.
다음으로는 C언어 코드에 사용될 헤더 파일을 만든다. 만드는 방법은 프로젝트 경로의 bin폴더에 cmd로 javah "패키지명"."클래스명" 을 입력하면 된다. 제대로 컴파일이 된다면 bin폴더 안에 "패키지명"_"클래스명".h 파일이 생성된다.
그 다음에는 Visual Studio를 사용해 빈 프로젝트를 생성한다. 이때 지정한 프로젝트 명이 dll파일의 이름이 된다. 프로젝트를 생성했다면 앞에서 만든 헤더파일을 추가한다. 헤더파일을 추가할 때는 헤더 파일을 우클릭하여 작업해야 한다.
솔루션 탐색기의 프로젯트 속성으로 들어가서 프로젝트 기본값 - 구성 형식과 일반 - 대상확장명을 다음과 같이 변경한다.
C/C++를 클릭하고 추가 포함 디렉토리에 다음과 같이 입력한다. 단, jdk의 버전에 따라 jdk폴더명은 달라질 수 있다.
이전에 만든 헤더파일에 있는 함수 정보를 복사하여 파라미터를 다음과 같이 맞춰준다.
#include <stdio.h>
#include <jni.h>
#include "jni_JNI.h"
JNIEXPORT void JNICALL Java_jni_JNI_printHelloWorld(JNIEnv *env, jObject jobj) {
printf("Hello World");
}
코드를 컴파일 한 후 dll파일을 찾는다. 컴파일하면 정보가 출력되는 곳에 dll이 생성된 path가 나온다.
마지막으로 dll파일을 자바 프로젝트에 넣고 자바 코드를 컴파일하면 Hello World가 출력된다.
JNI는 이렇게 사용하기 번거롭지만 이러한 JNI를 쉽게 사용할 수 있게 하는 라이브러리가 여럿 존재한다.
- HawtJNI(https://github.com/fusesource/hawtjni)
- JNIWrapper(http://www.teamdev.com/jniwrapper/)
- JNIEasy(http://www.innowhere.com/jnieasy/?st=jnieasy_products#!st=jnieasy_products)
출처: https://thisisspear.tistory.com/10(Jython), https://mommoo.tistory.com/71(JNI)
'프로그래밍 정보&자료' 카테고리의 다른 글
Lombok 라이브러리의 기능들 (0) | 2019.11.10 |
---|---|
자바 Annotation (0) | 2019.10.20 |
자바 메모리 관련 자료 (0) | 2019.10.13 |