๐ก ์๋ณธ ๊ธ : https://inside.java/2023/12/17/sip093/
Java 18๊ณผ 21 ์ฌ์ด์๋ ๋ง์ ์๋ก์ด ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ง๋ง, ์ผ๋ถ ๊ธฐ๋ฅ์ ์ค๋จ๋ ์์ ์ ๋๋ค. ๋ ์ด์ ์ฌ์ฉ๋์ง ์๊ฑฐ๋ ์ ๊ฑฐ๋ ๋ช ๊ฐ์ง ์ฃผ์ ๊ธฐ๋ฅ์ ๋ํ ๋์์ ๊ฒํ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
Finalization
Java 18 ~ 21 ๊ธฐ๊ฐ ์ฌ์ด์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ ํฐ ๊ธฐ๋ฅ์ finalization์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ Java 18์ ์ผ๋ถ ๋ณํ์์ผ๋ฉฐ, JEP 421์์ ๋ค๋ฃน๋๋ค.
removal of finalization์ด๋?
Java์ removal of finalization์ Java 11๋ถํฐ ๋์ ๋ ๊ธฐ๋ฅ์ผ๋ก, finalize() ๋ฉ์๋๋ฅผ ์ ๊ฑฐํ๋ ๊ธฐ๋ฅ์ ๋๋ค. finalize() ๋ฉ์๋๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๊ฐ์ฒด๋ฅผ ์๊ฑฐํ๊ธฐ ์ ์ ํธ์ถ๋๋ ๋ฉ์๋์ ๋๋ค. finalize() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด์ ์์์ ํด์ ํ๊ฑฐ๋, ๊ฐ์ฒด์ ์ํ๋ฅผ ์ ์ฅํ๋ ๋ฑ์ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ finalize() ๋ฉ์๋์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ด ์์ต๋๋ค.
- finalize() ๋ฉ์๋๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ๊ฐ์ฒด๋ฅผ ์๊ฑฐํ๊ธฐ ์ ์ ํธ์ถ๋๊ธฐ ๋๋ฌธ์, finalize() ๋ฉ์๋๊ฐ ํธ์ถ๋ ์ง ์ฌ๋ถ๋ฅผ ๋ณด์ฅ ํ ์ ์๊ณ ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
๋ฐ๋ผ์, Java 11๋ถํฐ๋ finalize() ๋ฉ์๋๋ฅผ ์ ๊ฑฐํ๊ณ , ๊ฐ์ฒด์ ์์์ ํด์ ํ๊ฑฐ๋, ๊ฐ์ฒด์ ์ํ๋ฅผ ์ ์ฅํ๋ ๋ฑ์ ์์ ์ ์ํํ๋ ค๋ฉด, try-finally ๋ธ๋ก์ด๋ close() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๊ณ ์์ต๋๋ค.
try-finally ๋ธ๋ก์ ์ฌ์ฉํ๋ฉด, ๊ฐ์ฒด์ ์์์ ํด์ ํ๋ ์์ ์ finally ๋ธ๋ก์ ์์ฑํ์ฌ, ๊ฐ์ฒด๊ฐ ์๊ฑฐ๋๊ธฐ ์ ์ ๋ฐ๋์ ์ํํ ์ ์์ต๋๋ค.
close() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด, ๊ฐ์ฒด์ ์์์ ํด์ ํ๋ ์์ ์ close() ๋ฉ์๋์ ์์ํ์ฌ, ๊ฐ์ฒด๊ฐ ์๊ฑฐ๋๊ธฐ ์ ์ ๋ฐ๋์ ์ํํ ์ ์์ต๋๋ค.
removal of finalization์ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- finalize() ๋ฉ์๋์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ ์ ์์ต๋๋ค.
- finalize() ๋ฉ์๋์ ์ฌ์ฉ์ ์ค์ฌ, ์ฝ๋์ ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
removal of finalization์ ๋จ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- finalize() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋ ๊ธฐ์กด ์ฝ๋๊ฐ ์๋ํ์ง ์์ ์ ์์ต๋๋ค.
Finalization์ Java 1.0๋ถํฐ Java์ ๊ธฐ๋ฅ์ด์์ง๋ง, ์๋ํ ๋๋ก ๋์ํ์ง ์์์ต๋๋ค. ๊ทธ ์ด์ ๋ ๋ค์ํ๋ฉฐ, ๊ด์ฌ์ด ์์ผ๋ฉด JEP๋ฅผ ๊ผญ ์ฝ์ด๋ณด์๊ธธ ๋ฐ๋๋๋ค. JEP์๋ finalization์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ํ์ง ์์ ๋ ๋ฐ์ํ๋ ์ค์ ๊ฒฐ๊ณผ๋ ํฌํจ๋์ด ์์ต๋๋ค.
finalization์ด ์ฌ๋ผ์ง ์ด์ ?
finalize() ๋ฉ์๋์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด ๋ง์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์์ง๋ง, ์ฌ์ ํ ์๋ฒฝํ๊ฒ ํด๊ฒฐ๋์ง ์์์ต๋๋ค.
finalize() ๋ฉ์๋์๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ ์ด ์์ต๋๋ค.
- finalize() ๋ฉ์๋๊ฐ ํธ์ถ๋ ์ง ์ฌ๋ถ๋ฅผ ๋ณด์ฅํ ์ ์์ต๋๋ค. finalize() ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
finalize() ๋ฉ์๋์ ๋ฌธ์ ์ ์ ํด๊ฒฐํ๊ธฐ ์ํด, Java ๊ฐ๋ฐ์๋ค์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํด ์์ต๋๋ค.
- finalize() ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ธฐ ์ํด sleep() ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค. finalize() ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ก ํ๊ธฐ ์ํด synchronized ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๊ทธ๋ฌ๋, ์ด๋ฌํ ๋ฐฉ๋ฒ์ finalize() ๋ฉ์๋์ ๋ฌธ์ ์ ์ ์์ ํ ํด๊ฒฐํ์ง ๋ชปํฉ๋๋ค.
- sleep() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด, finalize() ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋๊น์ง ๋ค๋ฅธ ์์ ์ ์ํํ ์ ์๊ธฐ ๋๋ฌธ์, ์ฑ๋ฅ์ด ์ ํ๋ ์ ์์ต๋๋ค.
- synchronized ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด, finalize() ๋ฉ์๋๊ฐ ํธ์ถ๋ ๋ ๊ฐ์ฒด์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์๋๋ก ํ ์ ์์ง๋ง, finalize() ๋ฉ์๋์ ํธ์ถ์ ์ง์ฐ์ํฌ ์ ์์ต๋๋ค.
finalization์ ์ ๊ฑฐํ๊ธฐ ์ํด์๋ ์ฌ๋ฌ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค. ์ฒซ ๋ฒ์งธ์ด์ ๊ฐ์ฅ ์ง์ ์ ์ธ ๋ฐฉ๋ฒ์ ๋ช ๋ น์ค ์ต์ ์ ์ฌ์ฉํ์ฌ finalization์ ์ข ๋ฃํ๋ ๊ฒ์ ๋๋ค. --finalization=disabled์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด JDK ์์ฒด์์ ๋ชจ๋ finalizer๊ฐ ์ข ๋ฃ๋ฉ๋๋ค. ์ฑ์ ๋ฌธ์ ๊ฐ ์๋ค๋ฉด ์์ ์ด ์๋ฃ๋ ๊ฒ์ ๋๋ค.
jdk.FinalizerStatistics์ ์ผ๋ถ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ JRF(JDK Flight Recorder)์ ์๋ก์ด ์ด๋ฒคํธ๋ก ์ ๋ฐ์ดํธ๋ฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด JFR์ ํ์ฑํํฉ๋๋ค:
$ java -XX:StartFlightRecording:filename=recording.jfr ...
jdk.FinancialStatistics์ ์ธ์คํด์ค๋ฅผ ์ถ๋ ฅํ์ธ์:
jfr print --events FinalizerStatistics recording.jfr
JRF์ด๋?
Java 11๋ถํฐ ๋์ ๋ ๊ธฐ๋ฅ์ผ๋ก Java ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ ๊ธฐ๋กํ๋ ๋๊ตฌ์ ๋๋ค. JRF๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ์ค๋ ๋ ํ๋ ๋ฑ์ ๊ธฐ๋กํ ์ ์์ต๋๋ค.
JRF๋ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์ ํ๋ฆฌ์ผ์ด์ ์ ์คํ์ ๊ธฐ๋กํฉ๋๋ค.
- ๊ธฐ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ฌ ์ฑ๋ฅ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ์ค๋ ๋ ํ๋ ๋ฑ์ ํ์ ํ ์ ์์ต๋๋ค.
- ๊ธฐ๋ก๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
JRF๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ฝ์์์ JFR ๋ช ๋ น์ ์ฌ์ฉํ์ฌ JFR์ ์์ํ๊ณ ์ข ๋ฃํ ์ ์์ต๋๋ค.
- Java ์ ํ๋ฆฌ์ผ์ด์ ์ JFR์ ํตํฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์์๋ ๋ ์๋์ผ๋ก JFR์ ์์ํ ์ ์์ต๋๋ค.
์ด๋ ๋ณ๊ฒฝ์ ํ์ํ ์์ ๋ถ๋ถ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๋ง์ฝ ๋์ ์ฝ๋์์ finalize()๋ฅผ ์ ๊ฑฐํด์ผ ํ ์ฝ๋๊ฐ ์๋ค๋ฉด ๊ณ ๋ คํด์ผ ํ ๋ช ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค.
ํ์ฌ finalize()๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ ํด๋์ค๋ค์ Closeable ๋๋ AutoCloseable ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋๋ก ์์ ํ๊ณ , ๋ฆฌ์์ค ํด์ ๋์์ ํด๋น ์ธํฐํ์ด์ค์ close() ๋ฉ์๋๋ก ์ฎ๊ธฐ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด try-with-resources ๋ธ๋ก์ด ๋๋ ๋ ๋ฆฌ์์ค๊ฐ ์ฆ์ ํด์ ๋ ์ ์์ต๋๋ค.
try(MyCloseableResource res = new MyCloseableResource(){
...
}
๋ง์ฝ ์ด๋ ๊ฒ ํด๊ฒฐ๋์ง ์๋๋ค๋ฉด JDK 9์ ์ถ๊ฐ๋ Cleaner API๋ฅผ ์ฌ์ฉํด ๋ณด์ธ์. Rodger Riggs๋ Cleaner API ์ฌ์ฉ ๋ฐฉ๋ฒ์ ๋ํ ํ๋ฅญํ ๊ธฐ์ฌ๋ฅผ ์์ฑํ์ต๋๋ค.
Closeable๊ณผ AutoCloseable์ด๋?
์์์ ์ด์ผ๊ธฐ ํ finalize() ๋ฉ์๋์ ๋ฌธ์ ์ ์ผ๋ก ์ธํด Java 7๋ถํฐ Closeable ์ธํฐํ์ด์ค๊ฐ ๋์ ๋์์ต๋๋ค. ํด๋น ์ธํฐํ์ด์ค๋ close() ๋ฉ์๋๋ฅผ ์ ์ํ๊ณ ์์ต๋๋ค. close() ๋ฉ์๋๋ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ ์์ ์ ์ํํฉ๋๋ค.
Java9 ๋ถํฐ๋ AutoCloseable ์ธํฐํ์ด์ค๊ฐ ๋์ ๋์์ต๋๋ค. ํด๋น ์ธํฐํ์ด์ค๋ Closeable ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ๊ณ ์์ต๋๋ค.
๋ค์์ Closeable์ ์ฌ์ฉํ๋ ์์ ์ ๋๋ค.
์ ์ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ์ธํฐํ์ด์ค Closeable์ ํ์ฅํ๊ณ ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ์ธํฐํ์ด์ค ์ฌ์ฉ try-with-resources ๋ธ๋ก์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ์์ ํ๊ฒ ํด์ ํ ์ ์์ต๋๋ค. try-with-resources ๋ธ๋ก์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค๋ฅผ ์์ ํ๊ฒ ํด์ ํ ์ ์์ต๋๋ค.
public class MyClass implements Closeable {
public void close() throws Exception {
// ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ ์์
์ ์ํํฉ๋๋ค.
}
public static void main(String[] args) throws Exception {
MyClass myClass = new MyClass();
try {
// ...
} finally {
myClass.close();
}
}
}
๋ค์์ AutoCloseable์ ์ฌ์ฉํ๋ ์์ ์ ๋๋ค.
public class MyClass implements AutoCloseable {
public void close() throws Exception {
// ๋ฆฌ์์ค๋ฅผ ํด์ ํ๋ ์์
์ ์ํํฉ๋๋ค.
}
public static void main(String[] args) throws Exception {
try (MyClass myClass = new MyClass()) {
// ...
}
}
}
Locales
JBS ์ด์ JDK-8282819์์ JDK 19์์๋ถํฐ java.util.Locale์ ์์ฑ์๊ฐ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ์์ฑ์ ๋์ ์ ์ ์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๊ฐ์ฅ ์ง์ ์ ์ผ๋ก ๋์ฒดํ ๋ฐฉ๋ฒ์ .of ๋ฉ์๋์ ๋๋ค:
- Locale Locale.of(String)
- Locale Locale.of(String, String)
- Locale Locale.of(String, String, String)
forLanguageTag ๋ฉ์๋๋ ์์ต๋๋ค:
- Locale Locale.forLanguageTag(String)
๊ทธ๋ฆฌ๊ณ Locale.Builder๋ ์์ต๋๋ค.
Locale.of() ๋ฉ์๋๋?
Locale.of() ๋ฉ์๋๋ Java์์ ๋ก์ผ์ผ์ ์์ฑํ๋ ๋ฉ์๋์ ๋๋ค. ๋ก์ผ์ผ์ ๊ตญ๊ฐ, ์ธ์ด, ์ง์ญ ์ ๋ณด๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด์ ๋๋ค.Locale.of() ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ ํ์์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
Locale locale = Locale.of(language, country, variant);
- language๋ ์ธ์ด ์ฝ๋์ ๋๋ค. ์๋ฅผ ๋ค์ด, "en"์ ์์ด, "ko"๋ ํ๊ตญ์ด์ ๋๋ค.
- country๋ ๊ตญ๊ฐ ์ฝ๋์ ๋๋ค. ์๋ฅผ ๋ค์ด, "US"๋ ๋ฏธ๊ตญ, "KR"์ ํ๊ตญ์ ๋๋ค.
- variant๋ ์ง์ญ ๋ณํ์ ๋๋ค. ์๋ฅผ ๋ค์ด, "en-US"๋ ๋ฏธ๊ตญ ์์ด, "ko-KR"์ ํ๊ตญ์ด์ ๋๋ค.
Locale.of() ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ null์ ๋ฐํํฉ๋๋ค.
- language ๋๋ country๊ฐ null์ธ ๊ฒฝ์ฐ
- language ๋๋ country๊ฐ ์๋ชป๋ ํ์์ธ ๊ฒฝ์ฐ
Locale locale = Locale.of("ko", "KR"); System.out.println(locale); // ko_KR
Locale.forLanguageTag ๋ฉ์๋๋?
IETF BCP 47 ์ธ์ด ํ๊ทธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Locale ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋ฉ์๋๋ก์จ, BCP 47์ ์ธ์ด, ์ง์ญ, ๋ณํ ๋ฑ๊ณผ ๊ฐ์ ์ธ์ด ์ ๋ณด๋ฅผ ํํํ๊ธฐ ์ํ ํ์คํ๋ ๋ฐฉ์์ ์ ๊ณตํ๋ ์ธํฐ๋ท ํ์ค์ ๋๋ค.
Locale locale = Locale.forLanguageTag(languageTag);
๋งค๊ฐ๋ณ์:
- languageTag: IETF BCP 47 ํ์์ ์ธ์ด ํ๊ทธ์ ๋๋ค. ์๋ฅผ ๋ค์ด, "en-US", "ko-KR", "zh-Hans-CN" ๋ฑ์ด ์์ต๋๋ค.
// ํ๊ตญ์ด ๋ก์ผ์ผ ์์ฑ Locale koLocale = Locale.forLanguageTag("ko-KR");
ํน์ง:
- ๋ค์ํ ์ธ์ด ์ ๋ณด๋ฅผ ์ ํํ๊ฒ ํํํ ์ ์์ต๋๋ค.
- ์ ๋์ฝ๋ CLDR(Common Locale Data Repository)์์ ๋ก์ผ์ผ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
- Java 7๋ถํฐ ๋์ ๋์์ต๋๋ค.
Locale.Builder๋?
Locale ๊ฐ์ฒด๋ฅผ ์์ฑํ๋๋ฐ ์ฌ์ฉํ๋ ํด๋์ค๋ก, ์ธ์ด, ๊ตญ๊ฐ, ๋ณํ๊ณผ ๊ฐ์ ๋ก์ผ์ผ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ค์ ํ์ฌ ์ ์ฐํ๊ฒ ๋ก์ผ์ผ์ ์์ฑํ ์ ์์ต๋๋ค.ํน์ง:
- ์ฒด์ด๋ ๋ฐฉ์: ๋ฉ์๋๋ฅผ ์ฐ์์ ์ผ๋ก ํธ์ถํ์ฌ ๋ก์ผ์ผ ๊ตฌ์ฑ ์์๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
- ์ ํจ์ฑ ๊ฒ์ฌ: ์ค์ ํ ๊ฐ์ด ์ ํจํ์ง ํ์ธํ์ฌ ์๋ชป๋ ๋ก์ผ์ผ ์์ฑ์ ๋ฐฉ์งํฉ๋๋ค.
- BCP 47 ํธํ: ์์ฑ๋ ๋ก์ผ์ผ ๊ฐ์ฒด๋ IETF BCP 47 ํ์ค์ ์ค์ํฉ๋๋ค.
Locale koLocale = new Locale.Builder().setLanguage("ko").setRegion("KR").setVariant("POSIX").build();
์ฅ์ :
- ์ง๊ด์ ์ด๊ณ ์ ์ฐํ ๋ก์ผ์ผ ์์ฑ ๋ฐฉ์์ ์ ๊ณตํฉ๋๋ค.
- ๋ก์ผ์ผ ๊ตฌ์ฑ ์์์ ์ ํจ์ฑ์ ๊ฒ์ฌํ์ฌ ์๋ชป๋ ๋ก์ผ์ผ ์์ฑ์ ๋ฐฉ์งํฉ๋๋ค.
- BCP 47 ํ์ค์ ์ค์ํ๋ฏ๋ก ๋ค์ํ ์ธ์ด ์ ๋ณด๋ฅผ ์ ํํ๊ฒ ํํํ ์ ์์ต๋๋ค.
COMPAT ๊ณต๊ธ์ ์ ๊ฑฐ์ ๋ํ ๊ฒฝ๊ณ ๋ฐ์(JDK-8304982)
JDK 9๋ฒ์ ๋ถํฐ Java์ default Locale ๋ฐ์ดํฐ์ ๋ํด์ COMPAT์์ CLDR๋ก ๋ณ๊ฒฝํ์ต๋๋ค. ์ด ๋ณ๊ฒฝ ์ฌํญ์ JEP 262 ์ ์์์์ ๋ค๋ฃจ์ด์ก์ต๋๋ค. BS ์ด์ JDK-8304982์ ๋ฐ๋ฅด๋ฉด, COMPAT ๋ฐฉ์์ด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ๋ฐ์ํ๋๋ก ๋์ด ์์ต๋๋ค. COMPAT๋ JDK 22๋ฒ์ ๋ถํฐ ์ ๊ฑฐ๋ ์ ์์ต๋๋ค.
COMPAT์ CLDR์ด๋?
๋ชจ๋ Java์์ ๋ก์ผ์ผ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ฐ๋ ์ผOMPAT๋ Java 9 ์ด์ ๋ฒ์ ์ ์ฌ์ฉ๋๋ Locale ๋ฐ์ดํฐ ์ฒ๋ฆฌ. ๋ฐฉ์์ด๋ฉฐ, CLDR๋ Unicode Common Locale Data Repository์ ์ฝ์๋ก, ๋ค์ํ ์ธ์ด์ ๋ฌธํ๊ถ์ Locale ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ ์คํ ์์ค ํ๋ก์ ํธ์ ๋๋ค. Java 9๋ถํฐ ๊ธฐ๋ณธ Locale ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋๊ณ ์์ต๋๋ค.
๊ธฐ๋ฅ COMPAT CLDR ๋ก์ผ์ผ ๋ฐ์ดํฐ์ ์ถ์ฒ JDK CLDR ์ง์ํ๋ ์ธ์ด ๋ฐ ๋ฌธํ๊ถ ์ ํ์ ๊ด๋ฒ์ ์ ํ์ฑ ์๋์ ์ผ๋ก ๋ฎ์ ์๋์ ์ผ๋ก ๋์ ํธํ์ฑ Java 9 ์ด์ ๋ฒ์ ๊ณผ ํธํ๋จ Java 9 ์ด์ ๋ฒ์ ๊ณผ ํธํ๋์ง ์์ JDK 9๋ถํฐ Java๋ ๊ธฐ๋ณธ์ ์ผ๋ก CLDR๋ฅผ ์ฌ์ฉํ์ฌ ๋ก์ผ์ผ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ CLDR๊ฐ COMPAT๋ณด๋ค ๋ ์ ํํ๊ณ ๊ด๋ฒ์ํ ์ธ์ด ๋ฐ ๋ฌธํ๊ถ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฌ๋ COMPAT๋ ์ฌ์ ํ Java์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. java.locale.providers=COMPAT ์์คํ ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ์ฌ COMPAT๋ฅผ ๊ธฐ๋ณธ ๋ก์ผ์ผ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ฐฉ์์ผ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
JAR index ๊ธฐ๋ฅ ์ ๊ฑฐ (JDK-8302819)
JAR index ๊ธฐ๋ฅ์ JDK 21์์ ์ ๊ฑฐ๋์์ต๋๋ค. JAR index ๊ธฐ๋ฅ์ ์ฃผ๋ก ์ ํ๋ฆฟ(applets)์ ์ฑ๋ฅ์ ๋์ด๊ธฐ ์ํด ์ฌ์ฉ๋์๋ ๊ธฐ์ ๋ก์จ, ํ์ฌ๋ ๊ณผ๊ฑฐ์ ๊ธฐ์ ์ ๋๋ค. ๋ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ๋ค์ด ์กด์ฌํฉ๋๋ค. JAR index ๊ธฐ๋ฅ์ ๋ํ ๋์ฒด ๊ธฐ๋ฅ์ ์์ผ๋ฉฐ, i, -generate-index๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค.
์ฐธ์กฐ: JDK-8302819
JAR index ๊ธฐ๋ฅ์ด๋?
Java Archive(JAR) ํ์ผ์ ๋ด์ฉ์ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. JAR ํ์ผ์ Java ํด๋์ค, ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ, ์ด๋ฏธ์ง, ํ ์คํธ ํ์ผ ๋ฑ๊ณผ ๊ฐ์ ๋ค์ํ ํ์ผ๋ค์ ํ๋๋ก ๋ฌถ์ ํ์ผ์ ๋๋ค. JAR index ๊ธฐ๋ฅ์ JAR ํ์ผ์ ๋ด์ฉ์ ์ธ๋ฑ์ฑํ์ฌ, ํน์ ํ์ผ์ ์ฐพ์ ๋ ๊ธฐ์กด์ jar ๋ช ๋ น์ด๋ณด๋ค ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์๋๋ก ํฉ๋๋ค. JAR index ๊ธฐ๋ฅ์ Java 7๋ถํฐ ๋์ ๋์์ผ๋ฉฐ, JAR ํ์ผ์ ์์ฑํ ๋ jar -i ์ต์ ์ ์ฌ์ฉํ์ฌ ํ์ฑํํ ์ ์์ต๋๋ค.
JAR index ๊ธฐ๋ฅ์ ์ฅ์
- JAR ํ์ผ์ ๋ด์ฉ์ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ์ ์์ต๋๋ค.
- JAR ํ์ผ์ ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
- JAR ํ์ผ์ ์์ถ๋ฅ ์ ๋์ผ ์ ์์ต๋๋ค.
JAR index ๊ธฐ๋ฅ์ ๋จ์
- JAR ํ์ผ์ ์์ฑํ ๋ ์๊ฐ์ด ๋ ์ค๋ ๊ฑธ๋ฆฝ๋๋ค.
- JAR ํ์ผ์ ์ฝ์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
JAR index ๊ธฐ๋ฅ์ ์ฌ์ฉ ๋ฐฉ๋ฒ
JAR index ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก JAR ํ์ผ์ ์์ฑํ๋ฉด ๋ฉ๋๋ค.
jar -i [jar_file]
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด JAR ํ์ผ์ ์์ฑํ๋ฉด JAR index ๊ธฐ๋ฅ์ด ํ์ฑํ๋ฉ๋๋ค.
jar -i my-jar.jar
JAR index ๊ธฐ๋ฅ์ด ํ์ฑํ๋ JAR ํ์ผ์ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฉ์์ง๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
Index created for my-jar.jar
JAR index ๊ธฐ๋ฅ์ด ํ์ฑํ๋ JAR ํ์ผ์ ์ฌ์ฉํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก JAR ํ์ผ์ ์ฝ์ผ๋ฉด ๋ฉ๋๋ค.
jar -xf [jar_file]
์๋ฅผ ๋ค์ด, ๋ค์๊ณผ ๊ฐ์ด JAR ํ์ผ์ ์ฝ์ผ๋ฉด JAR index ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ํ์ผ์ ๋น ๋ฅด๊ฒ ์ฐพ์ ์ ์์ต๋๋ค.
jar -xf my-jar.jar
์ฆ๊ฑฐ์ด ์ฝ๋ฉํ์ธ์!