Java SE 22 ํ”Œ๋žซํผ ๋ฐ OpenJDK 22 ๊ฐœ๋ฐฉํ˜• ์ฐธ์กฐ ๊ตฌํ˜„ ์ถœ์‹œ

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€