JPype
를 이용하면 python 에서 java 라이브러리를 이용할 수 있다.
기존 프로젝트에서 자바로 만들어놓은게 있고 굳이 파이썬으로 다시 만들어 쓸 시간이 없을때 jpype를 유용하게 쓰고있는데, 성능 이슈가 없는 작업이나 후딱 치워버리고싶은 일회성 작업을 하는데 진짜 도움이 많이 된다. 암복호화같은것들?
java는 python 보다는 오래전부터 인기가 있던 언어여서 그런지 인터넷을 뒤져보면 java로 만들어진 라이브러리는 있는데 python 버전은 없는 경우도 종종 있는거같아서 이럴때 쓰는것도 좋을 것 같다.
다음과 같이 문자열을 거꾸로 뒤집는 java 코드를 python 에서 가져다쓰고싶다면
vim ReverseString.java
package net.oboki.utils;
public class ReverseString {
public static String reverse(String str){
StringBuffer buf = new StringBuffer();
for(int i = str.length()-1; i>=0; i--){
buf.append(str.charAt(i));
}
return buf.toString();
}
}
javac -d . ReverseString.java; jar -cvf oboki-utils.jar net/
명령으로 컴파일하고 jar 아카이브로 만들어놓은 뒤
다음과 같이 python 함수로 재탄생시킬 수 있다.
vim reverse_string.py
import jpype # pip3 install JPype1
classpath = 'oboki-utils.jar'
jpype.startJVM(
jpype.getDefaultJVMPath(),
"-Djava.class.path={classpath}".format(classpath=classpath),
convertStrings=True,
)
jpkg = jpype.JPackage('net.oboki.utils')
ReverseString = jpkg.ReverseString()
def reverse_string(s):
return ReverseString.reverse(s)
다음과 같이 파이썬 라이브러리를 불러와서 써보면 정상적으로 동작한다.
# python
Python 3.6.10 (default, Aug 31 2020, 11:01:13)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import reverse_string
>>> reverse_string.reverse_string('oboki')
'ikobo'
>>>
이런 식으로 가져다 쓰고 싶은 java library 가 간단한 스태틱 메소드이면서 입출력 자료형 타입이 기본 자료형일때는 쉽게 파이썬 함수로 가져다가 쓸 수 있다.
자세한 사용법, 속성들은 공식 매뉴얼에서 참고