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

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

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

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

  • ๊ธฐ๋ณธ ์ธ์ฝ”๋”ฉ์€ UTF-8์ž…๋‹ˆ๋‹ค. ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” Java API๋Š” ์ด์ œ ์‹œ์Šคํ…œ ์„ค์ • ๋ฐ ๋กœ์ผ€์ผ ์„ค์ •์— ๊ด€๊ณ„์—†์ด ๋ชจ๋“  ํ”Œ๋žซํผ์—์„œ ๊ธฐ๋ณธ์ ์œผ๋กœ UTF-8์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ๋กœ์ผ€์ผ์— ๋”ฐ๋ผ ์ธ์ฝ”๋”ฉ์ด ์„ ํƒ๋˜๋Š” ์ด์ „ ๋™์ž‘์œผ๋กœ ๋˜๋Œ๋ฆฌ๋ ค๋ฉด "-Dfile.encoding=COMPAT" ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŒจํ‚ค์ง€์—๋Š” jwebserver ์œ ํ‹ธ๋ฆฌํ‹ฐ์™€ ์ •์  ์ฝ˜ํ…์ธ  ์ œ๊ณต์„ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ http ์„œ๋ฒ„ ๊ตฌํ˜„๊ณผ ํ•จ๊ป˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ API๊ฐ€ ํฌํ•จ๋œ com.sun.net.httpserver ํŒจํ‚ค์ง€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค(CGI ๋ฐ ์„œ๋ธ”๋ฆฟ๊ณผ ์œ ์‚ฌํ•œ ํ•ธ๋“ค๋Ÿฌ๋Š” ์ง€์›๋˜์ง€ ์•Š์Œ). ๋‚ด์žฅ๋œ HTTP ์„œ๋ฒ„๋Š” ์›Œํฌ๋กœ๋“œ์— ์ตœ์ ํ™”๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉฐ ์ฃผ๋กœ ํ”„๋กœ์ ํŠธ ํ”„๋กœํ† ํƒ€์ž… ์ œ์ž‘, ๋””๋ฒ„๊น… ๋ฐ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์— ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ์•ก์„ธ์Šค ์ œ์–ด ๋ฐ ์ธ์ฆ์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • JavaDoc์€ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋„๊ตฌ, ๊ตฌ๋ฌธ ๊ฐ•์กฐ ๋ฐ IDE ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” API ๋ฌธ์„œ์— ์ž‘์—… ์˜ˆ์ œ์™€ ์ฝ”๋“œ ์กฐ๊ฐ์„ ํฌํ•จํ•  ์ˆ˜ ์žˆ๋Š” "@snippet" ํƒœ๊ทธ์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ž˜์Šค์˜ ๋‚ด๋ถ€ ๊ตฌ์กฐ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋Š” ๋ฌผ๋ก  ๋ฉ”์†Œ๋“œ, ํ•„๋“œ ๋ฐ ํด๋ž˜์Šค ์ƒ์„ฑ์ž์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ java.lang.reflect API(Core Reflection)์˜ ๊ตฌํ˜„์ด ์žฌ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. java.lang.reflect API ์ž์ฒด๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ์ด์ œ ๋ฐ”์ดํŠธ์ฝ”๋“œ ์ƒ์„ฑ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  java.lang.invoke ๋ชจ๋“ˆ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ ํ•ธ๋“ค์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ณ€๊ฒฝ์„ ํ†ตํ•ด ์šฐ๋ฆฌ๋Š” java.lang.reflect ๋ฐ java.lang.invoke์˜ ๊ตฌํ˜„์„ ํ†ตํ•ฉํ•˜๊ณ  ์œ ์ง€ ๊ด€๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
  • x86_64 ๋ฐ AArch64 ํ”„๋กœ์„ธ์„œ์—์„œ ๋ฒกํ„ฐ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰๋˜๊ณ  ์ž‘์—…์„ ์—ฌ๋Ÿฌ ๊ฐ’(SIMD)์— ๋™์‹œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒกํ„ฐ ๊ณ„์‚ฐ์„ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” Vector API์˜ ์„ธ ๋ฒˆ์งธ ๋ฏธ๋ฆฌ ๋ณด๊ธฐ๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์Šค์นผ๋ผ ์ž‘์—…์˜ ์ž๋™ ๋ฒกํ„ฐํ™”๋ฅผ ์œ„ํ•ด HotSpot JIT ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ๊ณผ ๋‹ฌ๋ฆฌ ์ƒˆ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ‘๋ ฌ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋ฒกํ„ฐํ™”๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ˜ธ์ŠคํŠธ ์ด๋ฆ„ ๋ฐ IP ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•œ SPI ์ธํ„ฐํŽ˜์ด์Šค(์„œ๋น„์Šค ์ œ๊ณต์ž ์ธํ„ฐํŽ˜์ด์Šค)๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์šด์˜ ์ฒด์ œ์—์„œ ์ œ๊ณตํ•˜๋Š” ํ•ธ๋“ค๋Ÿฌ์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์€ java.net.InetAddress์˜ ๋Œ€์ฒด ํ™•์ธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Foreign Function & Memory API์˜ ๋‘ ๋ฒˆ์งธ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ€ ์ œ๊ณต๋˜์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด Java ๋Ÿฐํƒ€์ž„ ์™ธ๋ถ€์˜ ์ฝ”๋“œ ๋ฐ ๋ฐ์ดํ„ฐ์™€ ์ƒํ˜ธ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด JVM์ด ์•„๋‹Œ ํ•จ์ˆ˜๋ฅผ ํšจ์œจ์ ์œผ๋กœ ํ˜ธ์ถœํ•˜๊ณ  JVM์ด ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด JNI๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ ๋„ ์™ธ๋ถ€ ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ํ”„๋กœ์„ธ์Šค ๋ฐ์ดํ„ฐ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • "์Šค์œ„์น˜" ํ‘œํ˜„์‹์—์„œ ํŒจํ„ด ์ผ์น˜์˜ ๋‘ ๋ฒˆ์งธ ์‹คํ—˜์  ๊ตฌํ˜„์ด ์ถ”๊ฐ€๋˜์–ด ์ •ํ™•ํ•œ ๊ฐ’ ๋Œ€์‹  "์ผ€์ด์Šค" ๋ ˆ์ด๋ธ”์— ์œ ์—ฐํ•œ ํŒจํ„ด์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์œผ๋ฉฐ, ์ด์ „์—๋Š” ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ๋˜ ์ผ๋ จ์˜ ๊ฐ’์„ ํ•œ ๋ฒˆ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. "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(); };
  • Object.finalize(), Enum.finalize(), Runtime.runFinalization() ๋ฐ System.runFinalization()๊ณผ ๊ฐ™์€ ๋งˆ๋ฌด๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜ ๋ฐ ๊ด€๋ จ ๋ฉ”์„œ๋“œ๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉฐ ํ–ฅํ›„ ๋ฆด๋ฆฌ์Šค์—์„œ๋Š” ๋น„ํ™œ์„ฑํ™”๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.
  • ZGC(Z Garbage Collector), SerialGC ๋ฐ ParallelGC ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ๋Š” ํ–‰ ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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