์ž๋ฐ” SE 19 ๋ฆด๋ฆฌ์Šค

19๊ฐœ์›”๊ฐ„์˜ ๊ฐœ๋ฐœ ๋์— Oracle์€ OpenJDK ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์ฐธ์กฐ ๊ตฌํ˜„์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” Java SE 19(Java Platform, Standard Edition 19) ํ”Œ๋žซํผ์„ ์ถœ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์ผ๋ถ€ ๊ธฐ๋Šฅ์ด ์ œ๊ฑฐ๋œ ๊ฒƒ์„ ์ œ์™ธํ•˜๊ณ  Java SE 19์€ Java ํ”Œ๋žซํผ์˜ ์ด์ „ ๋ฆด๋ฆฌ์Šค์™€์˜ ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์— ์ž‘์„ฑ๋œ ๋Œ€๋ถ€๋ถ„์˜ Java ํ”„๋กœ์ ํŠธ๋Š” ์ƒˆ ๋ฒ„์ „์—์„œ ์‹คํ–‰๋  ๋•Œ ์ˆ˜์ • ์—†์ด ๊ณ„์† ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Java SE 86(JDK, JRE ๋ฐ Server JRE)์˜ ๋ฐ”๋กœ ์„ค์น˜ ๊ฐ€๋Šฅํ•œ ๋นŒ๋“œ๋Š” Linux(x64_64, AArch86), Windows(x64_86) ๋ฐ macOS(x64_64, AArch19)์šฉ์œผ๋กœ ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. OpenJDK ํ”„๋กœ์ ํŠธ์—์„œ ๊ฐœ๋ฐœํ•œ Java 2 ์ฐธ์กฐ ๊ตฌํ˜„์€ ์ƒ์šฉ ์ œํ’ˆ์— ๋Œ€ํ•œ ๋™์  ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•˜๊ธฐ ์œ„ํ•ด GNU ClassPath ์˜ˆ์™ธ๊ฐ€ ์žˆ๋Š” GPLvXNUMX ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ์™„์ „ํžˆ ๊ฐœ๋ฐฉ๋ฉ๋‹ˆ๋‹ค.

Java SE 19์€ ์ผ๋ฐ˜ ์ง€์› ๋ฆด๋ฆฌ์Šค๋กœ ๋ถ„๋ฅ˜๋˜๋ฉฐ ๋‹ค์Œ ๋ฆด๋ฆฌ์Šค ์ „์— ์—…๋ฐ์ดํŠธ๊ฐ€ ๋ฆด๋ฆฌ์Šค๋ฉ๋‹ˆ๋‹ค. ์žฅ๊ธฐ ์ง€์›(LTS) ๋ถ„๊ธฐ๋Š” Java SE 17์ด์–ด์•ผ ํ•˜๋ฉฐ 2029๋…„๊นŒ์ง€ ์—…๋ฐ์ดํŠธ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค. Java 10 ๋ฆด๋ฆฌ์Šค๋ถ€ํ„ฐ ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒˆ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋กœ ์ „ํ™˜๋˜์–ด ์ƒˆ ๋ฆด๋ฆฌ์Šค ํ˜•์„ฑ ์ฃผ๊ธฐ๊ฐ€ ๋” ์งง์•„์กŒ๋‹ค๋Š” ์ ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค. ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ์ด์ œ ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ๋˜๋Š” ํ•˜๋‚˜์˜ ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์—์„œ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜๋Š” ์ด๋ฏธ ์™„๋ฃŒ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ†ตํ•ฉํ•˜๊ณ  ์ƒˆ ๋ฆด๋ฆฌ์Šค๋ฅผ ์•ˆ์ •ํ™”ํ•˜๊ธฐ ์œ„ํ•ด XNUMX๊ฐœ์›”๋งˆ๋‹ค ๋ธŒ๋žœ์น˜๊ฐ€ ๋ถ„๊ธฐ๋ฉ๋‹ˆ๋‹ค.

Java 19์˜ ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ ˆ์ฝ”๋“œ ํด๋ž˜์Šค์˜ ๊ฐ’์„ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Java 16์— ๋„์ž…๋œ ํŒจํ„ด ์ผ์น˜ ๊ธฐ๋Šฅ์„ ํ™•์žฅํ•˜์—ฌ ๋ ˆ์ฝ”๋“œ ํŒจํ„ด์— ๋Œ€ํ•œ ์˜ˆ๋น„ ์ง€์›์ด ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. Record Point(int x, int y) {} void printSum(Object o) { if (o instanceof Point(int x, int y)) { System.out.println(x+y); } }
  • Linux ๋นŒ๋“œ๋Š” RISC-V ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  JVM ์™ธ๋ถ€ ๋ฉ”๋ชจ๋ฆฌ์— ์•ก์„ธ์Šคํ•˜์—ฌ Java ํ”„๋กœ๊ทธ๋žจ๊ณผ ์™ธ๋ถ€ ์ฝ”๋“œ ๋ฐ ๋ฐ์ดํ„ฐ์˜ ์ƒํ˜ธ ์ž‘์šฉ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” FFM(์™ธ๋ถ€ ํ•จ์ˆ˜ ๋ฐ ๋ฉ”๋ชจ๋ฆฌ) API์— ๋Œ€ํ•œ ์˜ˆ๋น„ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ณ ์„ฑ๋Šฅ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ž‘์„ฑ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ํฌ๊ฒŒ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๊ฒฝ๋Ÿ‰ ์Šค๋ ˆ๋“œ์ธ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • x86_64 ๋ฐ AArch64 ํ”„๋กœ์„ธ์„œ์—์„œ ๋ฒกํ„ฐ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰๋˜๊ณ  ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๊ฐ’(SIMD)์— ๋™์‹œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒกํ„ฐ ๊ณ„์‚ฐ์„ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Vector API์˜ ๋„ค ๋ฒˆ์งธ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์Šค์นผ๋ผ ์ž‘์—…์˜ ์ž๋™ ๋ฒกํ„ฐํ™”๋ฅผ ์œ„ํ•ด HotSpot JIT ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ๊ณผ ๋‹ฌ๋ฆฌ ์ƒˆ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ‘๋ ฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ฒกํ„ฐํ™”๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • "switch" ํ‘œํ˜„์‹์—์„œ ํŒจํ„ด ์ผ์น˜์˜ ์„ธ ๋ฒˆ์งธ ์‹คํ—˜์  ๊ตฌํ˜„์ด ์ถ”๊ฐ€๋˜์–ด "case" ๋ ˆ์ด๋ธ”์— ์ •ํ™•ํ•œ ๊ฐ’์ด ์•„๋‹Œ ์ผ๋ จ์˜ ๊ฐ’์„ ํ•œ ๋ฒˆ์— ํฌ๊ด„ํ•˜๋Š” ์œ ์—ฐํ•œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. "if...else" ํ‘œํ˜„์‹์˜ ๋ฒˆ๊ฑฐ๋กœ์šด ์ฒด์ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ์ฒด o = 123L; ๋ฌธ์ž์—ด ํ˜•์‹ = ์Šค์œ„์น˜ (o) { ์ผ€์ด์Šค ์ •์ˆ˜ i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); ๊ธฐ๋ณธ๊ฐ’ -> o.toString(); };
  • ์„œ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋‹จ์ผ ๋ธ”๋ก์œผ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” ๊ตฌ์กฐ์  ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์‹คํ—˜์  API๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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