item 66 Jung incheol - JAVA-JIKIMI/EFFECTIVE-JAVA3 GitHub Wiki
Effective Java 3e ์์ดํ 66๋ฅผ ์์ฝํ ๋ด์ฉ ์ ๋๋ค.
์๋ฐ ๋ค์ดํฐ๋ธ ์ธํฐํ์ด์ค(JNI : Java Native Interface
)๋ ์๋ฐ ํ๋ก๊ทธ๋จ์ด ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ธฐ์ ์ด๋ค.
package com.example.jni;
public class JNIJava {
static {
System.loadLibrary("libJNI_CPP");
}
// Obviously, native methods may not have a body defined in Java
public native void printString(String name);
public static native double average(int[] nums);
public static void main(final String[] args) {
JNIJava jniJava = new JNIJava();
jniJava.printString("Invoked C++ 'printString' from Java");
double d = average(new int[]{1, 2, 3, 4, 7});
System.out.println("Got result from C++ 'average': " + d);
}
}
๋ค์ดํฐ๋ธ ๋ฉ์๋์ ์ฃผ์ ์ฐ์์ ๋ค์ ์ธ ๊ฐ์ง๋ค.
- ๋ ์ง์คํธ๋ฆฌ ๊ฐ์
ํ๋ซํผ
ํนํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ค ๋ค์ดํฐ๋ธ
์ฝ๋๋ก ์์ฑ๋ ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค์ฑ๋ฅ ๊ฐ์
์ ๋ชฉ์ ์ผ๋ก ์ฑ๋ฅ์ ๊ฒฐ์ ์ ์ธ ์ํฅ์ ์ฃผ๋ ์์ญ๋ง ๋ฐ๋ก ๋ค์ดํฐ๋ธ ์ธ์ด๋ก ์์ฑํ๋ค.
์๋ฐ๊ฐ ์ฑ์ํด๊ฐ๋ฉด์ (OS
๊ฐ์) ํ๋ถ ํ๋ซํผ์ ๊ธฐ๋ฅ๋ค์ ์ ์ฐจ ํก์ํ๊ณ ์๋ค. ๊ทธ๋์ ๋ค์ดํฐ๋ธ ๋ฉ์๋
๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ๊ณ์ ์ค์ด๋ค๊ณ ์๋ค. ์์ปจ๋ ์๋ฐ 9์ ์๋ก process API
๋ฅผ ์ถ๊ฐํด OS ํ๋ก์ธ์ค์ ์ ๊ทผํ๋ ๊ธธ์ ์ด์ด์ฃผ์๋ค. ๋ค์์ Process API๋ฅผ ์ฌ์ฉํ ์์ ์ด๋ค.
public class RuntimeTest {
public static void main(String[] args) throws IOException, InterrupedException {
Runtime rt = Runtime.getRuntime();
Process pc = null;
try {
//์ธ๋ถ ํ๋ก์ธ์ค ์คํ
pc = rt.exec("์คํ ํ ํ๋ก๊ทธ๋จ ๊ฒฝ๋ก ๋๋ ๋ช
๋ น์ด");
System.out.println("Microsoft Excel Excute!!");
} catch (IOException e) {
e.printStackTrace();
} finally {
// ๋ช
๋ น์ด ์ข
๋ฃ์ ๊น์ง ๋๊ธฐ
pc.waitFor();
// ๋ช
๋ น์ด ์ข
๋ฃ์ ํ์ ํ๋ก์ธ์ค ์ ๊ฑฐ
pc.destroy();
}
}
}
์ฑ๋ฅ์ ๊ฐ์ ํ ๋ชฉ์ ์ผ๋ก ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฑฐ์ ๊ถ์ฅํ์ง ์๋๋ค.
์์ปจ๋ java.math
๊ฐ ์ฒ์ ์ถ๊ฐ๋ ์๋ฐ 1.1
์์ BigInteger
๋ C๋ก ์์ฑํ ๊ณ ์ฑ๋ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์์งํ๋ค. ๊ทธ๋ฌ๋ค ์๋ฐ 3
๋ ์์ ์๋ฐ
๋ก ๋ค์ ๊ตฌํ๋๋ฉด์ ์ธ์ฌํ ํ๋ํ ๊ฒฐ๊ณผ, ์๋์ ๋ค์ดํฐ๋ธ ๊ตฌํ๋ณด๋ค๋ ๋ ๋นจ๋ผ์ก๋ค.
๋ค์ดํฐ๋ธ ๋ฉ์๋์๋ ์ฌ๊ฐํ ๋จ์
์ด ์๋ค. ๋ค์ดํฐ๋ธ ์ธ์ด๊ฐ ์์ ํ์ง ์์ผ๋ฏ๋ก ๋ค์ดํฐ๋ธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ์ ํ๋ฆฌ์ผ์ด์
๋ ๋ฉ๋ชจ๋ฆฌ ํผ์ ์ค๋ฅ
๋ก๋ถํฐ ๋ ์ด์ ์์ ํ์ง ์๋ค.
- ์๋ฐ๋ณด๋ค ํ๋ซํผ์ ๋ง์ด ํ์ ์ด์์ฑ๋ ๋ฎ๋ค
- ๋๋ฒ๊น ๋ ๋ ์ด๋ ต๋ค
- ์ฃผ์ํ์ง ์์ผ๋ฉด ์๋๊ฐ ์คํ๋ ค ๋๋ ค์ง ์๋ ์๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๋ค์ดํฐ๋ธ ๋ฉ๋ชจ๋ฆฌ๋ ์๋ ํ์ํ์ง ๋ชปํ๋ค.
- ์ถ์ ํ ์ ์๋ค.
- ๋ค์ดํฐ๋ธ ๋ฉ์๋์ ์๋ฐ ์ฝ๋ ์ฌ์ด์ '์ ์ฐฉ ์ฝ๋(glue code)'๋ฅผ ์์ฑํด์ผ ํ๋๋ฐ, ์ด๋ ๊ท์ฐฎ์ ์์ ์ด๊ธฐ๋ ํ๊ฑฐ๋์ ๊ฐ๋ ์ฑ๋ ๋จ์ด์ง๋ค.
์ ๋ฆฌ
๋ค์ดํฐ๋ธ ๋ฉ์๋
๋ฅผ ์ฌ์ฉํ๋ ค๊ฑฐ๋ ํ๋ฒ ๋ ์๊ฐํ๋ผ. ๋ค์ดํฐ๋ธ ๋ฉ์๋๊ฐ ์ฑ๋ฅ์ ๊ฐ์ ํด์ฃผ๋ ์ผ์ ๋ง์ง ์๋ค. ์ ์์ค ์์์ด๋ ๋ค์ดํฐ๋ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด์ผ๋ง ํด์ ์ด์ฉ ์ ์๋๋ผ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ ์ต์ํ๋ง ์ฌ์ฉํ๊ณ ์ฒ ์ ํ ํ
์คํธํ๋ผ.