22๊ฐ์๊ฐ์ ๊ฐ๋ฐ ๋์ Oracle์ OpenJDK ์คํ ์์ค ํ๋ก์ ํธ๋ฅผ ์ฐธ์กฐ ๊ตฌํ์ผ๋ก ์ฌ์ฉํ๋ Java SE 22(Java Platform, Standard Edition 22) ํ๋ซํผ์ ์ถ์ํ์ต๋๋ค. ์ฌ์ฉ๋์ง ์๋ ์ผ๋ถ ๊ธฐ๋ฅ์ด ์ ๊ฑฐ๋ ๊ฒ์ ์ ์ธํ๊ณ Java SE 22์ Java ํ๋ซํผ์ ์ด์ ๋ฆด๋ฆฌ์ค์์ ํ์ ํธํ์ฑ์ ์ ์งํฉ๋๋ค. ์ด์ ์ ์์ฑ๋ ๋๋ถ๋ถ์ Java ํ๋ก์ ํธ๋ ์ ๋ฒ์ ์์ ์คํ๋ ๋ ์์ ์์ด ๊ณ์ ์๋ํฉ๋๋ค. Java SE 86(JDK, JRE ๋ฐ Server JRE)์ ๋ฐ๋ก ์ค์น ๊ฐ๋ฅํ ๋น๋๋ Linux(x64_64, AArch86), Windows(x64_86) ๋ฐ macOS(x64_64, AArch22)์ฉ์ผ๋ก ์ค๋น๋์ด ์์ต๋๋ค. OpenJDK ํ๋ก์ ํธ์์ ๊ฐ๋ฐํ Java 2 ์ฐธ์กฐ ๊ตฌํ์ ์์ฉ ์ ํ์ ๋ํ ๋์ ์ฐ๊ฒฐ์ ํ์ฉํ๊ธฐ ์ํด GNU ClassPath ์์ธ๊ฐ ์๋ GPLvXNUMX ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ์์ ํ ๊ฐ๋ฐฉ๋ฉ๋๋ค.
Java SE 22๋ ์ผ๋ฐ ์ง์ ๋ฆด๋ฆฌ์ค๋ก ๋ถ๋ฅ๋๋ฉฐ ๋ค์ ๋ฆด๋ฆฌ์ค๊น์ง ๊ณ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ ์์ ์ ๋๋ค. LTS(์ฅ๊ธฐ ์ง์) ๋ถ๊ธฐ๋ ๊ฐ๊ฐ 21๋ ๊ณผ 17๋ ๊น์ง ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ ์ ์๋ Java SE 2031 ๋๋ Java SE 2029์ด์ด์ผ ํฉ๋๋ค(์ผ๋ฐ์ ์ผ๋ก 2028๋ ๊ณผ 2026๋ ๊น์ง ์ฌ์ฉ ๊ฐ๋ฅ). Java SE 11์ LTS ๋ถ๊ธฐ์ ๋ํ ๊ณต๊ฐ ์ง์์ ์ง๋ 2032์์ ์ข ๋ฃ๋์์ง๋ง ํ์ฅ ์ง์์ 8๋ ๊น์ง ๊ณ์๋ฉ๋๋ค. Java SE 2030์ LTS ๋ถ๊ธฐ์ ๋ํ ํ์ฅ ์ง์์ XNUMX๋ ๊น์ง ๊ณ์๋ฉ๋๋ค.
Java 10 ๋ฆด๋ฆฌ์ค๋ถํฐ ํ๋ก์ ํธ๊ฐ ์๋ก์ด ๊ฐ๋ฐ ํ๋ก์ธ์ค๋ก ์ ํ๋์์ผ๋ฉฐ, ์ด๋ ์ ๋ฆด๋ฆฌ์ค ํ์ฑ ์ฃผ๊ธฐ๊ฐ ๋ ์งง์์ก์์ ์๋ฏธํฉ๋๋ค. ์ด์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ง์์ ์ผ๋ก ์ ๋ฐ์ดํธ๋๋ ํ๋์ ๋ง์คํฐ ๋ธ๋์น์์ ๊ฐ๋ฐ๋ฉ๋๋ค. ์ฌ๊ธฐ์๋ ๊ธฐ์ฑ ๋ณ๊ฒฝ ์ฌํญ์ด ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ๋ฆด๋ฆฌ์ค๋ฅผ ์์ ํํ๊ธฐ ์ํด XNUMX๊ฐ์๋ง๋ค ๋ธ๋์น๊ฐ ๋ถ๊ธฐ๋ฉ๋๋ค.
Java 22์ ์๋ก์ด ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- G1 ๊ฐ๋น์ง ์์ง๊ธฐ์๋ ์์ญ ๊ณ ์ ์ ๋ํ ์ง์์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ์์ Java ๊ฐ์ฒด์ ์์น๋ฅผ โโ์ผ์์ ์ผ๋ก ์์ ํ์ฌ ๊ฐ๋น์ง ์์ง๊ธฐ์ ์ํด ์ด๋๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ์ด๋ฌํ ๊ฐ์ฒด์ ๋ํ ์ฐธ์กฐ๊ฐ Java์ ๋ค์ดํฐ๋ธ ์ฝ๋ ๊ฐ์ ์์ ํ๊ฒ ์ ๋ฌ๋๋๋ก ํ ์ ์์ต๋๋ค. ๊ณ ์ ์ ์ฌ์ฉํ๋ฉด ๋ค์ดํฐ๋ธ ์ฝ๋๋ก JNI(Java Native Interface)์ ์ค์ํ ์์ญ์ ์คํํ ๋ ๋๊ธฐ ์๊ฐ์ ์ค์ด๊ณ ๊ฐ๋น์ง ์์ง ๋นํ์ฑํ๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค(์ด๋ฌํ ์น์ ์ ์คํํ๋ ๋์ JVM์ ๊ฒฝํฉ ์กฐ๊ฑด์ ํผํ๊ธฐ ์ํด ์ด์ ๊ด๋ จ๋ ์ค์ํ ๊ฐ์ฒด๋ฅผ ์ด๋ํด์๋ ์ ๋ฉ๋๋ค). ๊ณ ์ ํ๋ฉด ๊ฐ๋น์ง ์์ง๊ธฐ ๋ณด๊ธฐ์์ ์ค์ํ ๊ฐ์ฒด๊ฐ ์ ๊ฑฐ๋๋ฏ๋ก ๊ณ ์ ๋์ง ์์ ์์ญ์ ๊ณ์ ์ ๋ฆฌํ ์ ์์ต๋๋ค.
- super(...)๋ฅผ ํธ์ถํ๊ธฐ ์ ์ ํํ์์ ์์ฑ์์ ์ง์ ํ ์ ์๋๋ก ์๋น ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ ํํ์์ด ์์ฑ์์ ์ํด ์์ฑ๋ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ์ง ์๋ ๊ฒฝ์ฐ ์์๋ ํด๋์ค ์์ฑ์์์ ๋ถ๋ชจ ํด๋์ค ์์ฑ์๋ฅผ ๋ช ์์ ์ผ๋ก ํธ์ถํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. class Outer { void hello() { System.out.println("Hello"); } ํด๋์ค ๋ด๋ถ { ๋ด๋ถ() { hello(); ๊ฐ๋ ์(); } } }
- FFM(์ธ๋ถ ํจ์ ๋ฐ ๋ฉ๋ชจ๋ฆฌ) API๊ฐ ์์ ํ๋์ด JNI(Java Native Interface)๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํจ์๋ฅผ ํธ์ถํ๊ณ JVM ์ธ๋ถ ๋ฉ๋ชจ๋ฆฌ์ ์ก์ธ์คํ์ฌ Java ํ๋ก๊ทธ๋จ๊ณผ ์ธ๋ถ ์ฝ๋ ๋ฐ ๋ฐ์ดํฐ์ ์ํธ ์์ฉํ ์ ์์ต๋๋ค.
- ๋ช ๋ช ๋์ง ์์ ๋ณ์ ๋ฐ ํจํด ์ผ์น์ ๋ํ ์ง์์ด ํ์ฑํ๋์์ต๋๋ค. ์ฌ์ฉ๋์ง ์์์ง๋ง ํธ์ถ ์ ํ์ํ ๋ณ์ ๋ฐ ํจํด ๋์ ์ด์ "_" ๋ฌธ์๋ฅผ ์ง์ ํ ์ ์์ต๋๋ค. // ๋ฌธ์์ด pageName = ์ค์์น(ํ์ด์ง) { ์ผ์ด์ค GitHubIssuePage(var url, var content, varlinks, int issueNumber) -> โISSUE #โ + issueNumber; ... }; // ์ด์ ๊ฐ๋ฅํฉ๋๋ค. String pageName = switch (page) { case GitHubIssuePage(_, _, _, int issueNumber) -> โISSUE #โ + issueNumber; };
- Java ํด๋์ค ํ์ผ์ ๊ตฌ๋ฌธ ๋ถ์, ์์ฑ ๋ฐ ๋ณํํ๊ธฐ ์ํ Class-File API์ ์๋น ๊ตฌํ์ด ์ ์๋์์ต๋๋ค. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce ์ธ์คํด์คof MethodModel mm && mm.methodName().stringValue(). startWith("debug"))) { classBuilder.with(ce); } } });
- java ์ ํธ๋ฆฌํฐ๋ ์ฌ๋ฌ ์ฝ๋ ํ์ผ ๋๋ ์ฌ์ ์ปดํ์ผ๋ ํด๋์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํํ๋ก ์ ๊ณต๋๋ Java ํ๋ก๊ทธ๋จ์ ์ด๋ฌํ ํ์ผ์ ๋ณ๋๋ก ์ปดํ์ผํ๊ฑฐ๋ ๋น๋ ์์คํ
์ ๊ตฌ์ฑํ์ง ์๊ณ ๋ ์คํํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ๋ค์ํ ํด๋์ค์ ์ฝ๋๊ฐ ๋ณ๋์ ํ์ผ๋ก ๋ถ๋ฆฌ๋ ํ๋ก๊ทธ๋จ์ ๋ ์ฝ๊ฒ ์คํํ ์ ์์ต๋๋ค. Prog.java: ํด๋์ค Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Hello!"); } }
์๋ฅผ ๋ค์ด "Prog.java"์ "Helper.java" ๋ ํ์ผ๋ก ๊ตฌ์ฑ๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ค๋ฉด ์ด์ Prog ํด๋์ค๋ฅผ ์ปดํ์ผํ๊ณ Helper ํด๋์ค์ ๋ํ ์ฐธ์กฐ๋ฅผ ์ ์ํ๋ "java Prog.java"๋ฅผ ์คํํ๋ฉด ์ถฉ๋ถํฉ๋๋ค. Helper ํ์ผ java๋ฅผ ์ฐพ์ ์ปดํ์ผํ๊ณ ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ํธ์ถํฉ๋๋ค.
- ๋ฌธ์์ด ๋ฆฌํฐ๋ด ๋ฐ ํ ์คํธ ๋ธ๋ก ์ธ์๋ ๊ตฌํ๋ ๋ฌธ์์ด ํ ํ๋ฆฟ์ ๋ ๋ฒ์งธ ์๋น ๊ตฌํ์ ์ถ๊ฐํ์ต๋๋ค. ๋ฌธ์์ด ํ ํ๋ฆฟ์ ์ฌ์ฉํ๋ฉด + ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ ํ ์คํธ๋ฅผ ๊ณ์ฐ๋ ํํ์ ๋ฐ ๋ณ์์ ๊ฒฐํฉํ ์ ์์ต๋๋ค. ํํ์ ๋์ฒด๋ ๋์ฒด \{..}๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋๋ฉฐ ๋์ฒด ๊ฐ์ ์ ํ์ฑ์ ํ์ธํ๊ธฐ ์ํด ํน์ ํธ๋ค๋ฌ๋ฅผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, SQL ์์ง์ SQL ์ฝ๋์ ๋์ฒด๋๋ ๊ฐ์ ํ์ธํ๊ณ java.sql.Statement ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅ์ผ๋ก ๋ฐํํ๋ ๋ฐ๋ฉด, JSON ํ๋ก์ธ์๋ JSON ๋์ฒด์ ์ ํ์ฑ์ ๋ชจ๋ํฐ๋งํ๊ณ JsonNode๋ฅผ ๋ฐํํฉ๋๋ค. ๋ฌธ์์ด ์ฟผ๋ฆฌ = "SELECT * FROM Person p WHERE p." + ์์ฑ + " = '" + ๊ฐ + "'"; // ๋ฌธ์ฅ ์ฟผ๋ฆฌ = SQL."""SELECT * FROM Person p WHERE p.\{property} = '\{value}'"""; // ๊ฐ ๋์๋ค
- ๋ฒกํฐ API์ ์ผ๊ณฑ ๋ฒ์งธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ์ถ๊ฐ๋์ด x86_64 ๋ฐ AArch64 ํ๋ก์ธ์์์ ๋ฒกํฐ ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋๋ ๋ฒกํฐ ๊ณ์ฐ์ ์ํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ ์์ ์ ์ฌ๋ฌ ๊ฐ(SIMD)์ ๋์์ ์ ์ฉํ ์ ์์ต๋๋ค. ์ค์นผ๋ผ ์์ ์ ์๋ ๋ฒกํฐํ๋ฅผ ์ํด HotSpot JIT ์ปดํ์ผ๋ฌ์์ ์ ๊ณต๋๋ ๊ธฐ๋ฅ๊ณผ ๋ฌ๋ฆฌ ์ API๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๋ ฌ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ํด ๋ฒกํฐํ๋ฅผ ๋ช ์์ ์ผ๋ก ์ ์ดํ ์ ์์ต๋๋ค.
- ์์ฒด ์ค๊ฐ ์์ ์ ์๋ฅผ ์ง์ํ๋ ํ์ฅ๋ Stream API์ ์๋น ๊ตฌํ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ ๊ธฐ์กด ๋ด์ฅ ์ค๊ฐ ์์ ์ด ์ํ๋ ๋ฐ์ดํฐ ๋ณํ์ ์ถฉ๋ถํ์ง ์์ ๊ฒฝ์ฐ์ ์ ์ฉํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ํธ๋ค๋ฌ๋ ์ฌ์ฉ์ ์ง์ ํธ๋ค๋ฌ๋ฅผ ์ ์ฉํ์ฌ ์คํธ๋ฆผ ์์๋ฅผ ์ฒ๋ฆฌํ๋ ์๋ก์ด ์ค๊ฐ ์์ Stream::gather(Gatherer)๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ๊ฒฐ๋ฉ๋๋ค. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- ๊ตฌ์กฐ์ ๋์์ฑ์ ์ํ ์คํ์ API์ ๋ ๋ฒ์งธ ๋ฒ์ ์ด ํ ์คํธ๋ฅผ ์ํด ์ ์๋์์ต๋๋ค. ์ด ๋ฒ์ ์ ์๋ก ๋ค๋ฅธ ์ค๋ ๋์์ ์คํ๋๋ ์ฌ๋ฌ ์์ ์ ๋จ์ผ ๋ธ๋ก์ผ๋ก ์ฒ๋ฆฌํ์ฌ ๋ฉํฐ ์ค๋ ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋จ์ํํฉ๋๋ค.
- ์์์ ์ผ๋ก ์ ์ธ๋ ํด๋์ค์ ์ด๋ฆ ์๋ "main" ๋ฉ์๋ ์ธ์คํด์ค์ ๋ ๋ฒ์งธ ์๋น ๊ตฌํ์ ์ถ๊ฐํ์ต๋๋ค. ์ด ๊ตฌํ์ ๊ณต๊ฐ/์ ์ ์ ์ธ, ์ธ์ ๋ฐฐ์ด ์ ๋ฌ, ํด๋์ค ์ ์ธ๊ณผ ๊ด๋ จ๋ ๊ธฐํ ์ํฐํฐ๋ฅผ ์๋ตํ ์ ์์ต๋๋ค. // public class HelloWorld { public static void main(String[] args) { System.out.println("Hello world!"); } } // ์ด์ void main() { System.out.println("Hello, World!"); }
- ๋ฒ์๊ฐ ์ง์ ๋ ๊ฐ์ ๋ ๋ฒ์งธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๊ตฌํ์ ์ถ๊ฐํ์ฌ ์ค๋ ๋ ๊ฐ์ ๋ถ๋ณ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ณ ํ์ ์ค๋ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ตํํ ์ ์์ต๋๋ค(๊ฐ์ ์์๋จ). ๋ฒ์ ๊ฐ์ ์ค๋ ๋ ๋ก์ปฌ ๋ณ์ ๋ฉ์ปค๋์ฆ์ ๋์ฒดํ๊ธฐ ์ํด ๊ฐ๋ฐ๋๊ณ ์์ผ๋ฉฐ ๋งค์ฐ ๋ง์ ์์ ๊ฐ์ ์ค๋ ๋(์์ฒ ๋๋ ์๋ฐฑ๋ง ์ค๋ ๋)๋ฅผ ์ฌ์ฉํ ๋ ๋ ํจ์จ์ ์ ๋๋ค. ๋ฒ์ ๊ฐ๊ณผ ์ค๋ ๋ ๋ก์ปฌ ๋ณ์์ ์ฃผ์ ์ฐจ์ด์ ์ ์ ์๋ ํ ๋ฒ ์์ฑ๋๊ณ ๋์ค์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ์ค๋ ๋๊ฐ ์คํ๋๋ ๋์์๋ง ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
- ๋ณ๋ ฌ ๊ฐ๋น์ง ์์ง๊ธฐ๋ ๋๊ท๋ชจ ๊ฐ์ฒด ๋ฐฐ์ด๋ก ์์ ํ ๋ ์ฑ๋ฅ์ด ํฅ์๋์์ต๋๋ค. ์ต์ ํ๋ฅผ ํตํด ๋๊ท๋ชจ ๊ฐ์ฒด ๋ฐฐ์ด์ ์ฌ์ฉํ ์ผ๋ถ ํ ์คํธ์์ ๊ฐ์ฒด ๊ฒ์์ ์์ํ๊ธฐ ์ ์ง์ฐ ์๊ฐ์ 20% ์ค์ผ ์ ์์์ต๋๋ค.
๋ํ ๊ทธ๋ํฝ ์ธํฐํ์ด์ค JavaFX 22๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ฑํ๊ธฐ ์ํ ํ๋ซํผ์ ๋ํ ์
๋ฐ์ดํธ ๊ฒ์๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
์ถ์ฒ : opennet.ru