โ”€โ” IT โ”โ”€

๋ชจ๋“ˆํ™”, ํ•จ์ˆ˜ํ˜•, ๋™์‹œ์„ฑ! Java์˜ ํ˜„๋Œ€์  ์ง„ํ™” ๊ณผ์ •(JDK 7 ~ 21+ LTS) ์™„๋ฒฝ ์ •๋ฆฌ

DKel 2025. 10. 8. 20:45
๋ฐ˜์‘ํ˜•

๐Ÿš€ Java SE 7 (2011): ์•ˆ์ •ํ™”์™€ ํŽธ์˜์„ฑ ๊ฐœ์„ 

Java 7์€ ์žฅ๊ธฐ๊ฐ„ ๊ฐœ๋ฐœ์ด ์ง€์—ฐ๋œ ํ›„ ์ถœ์‹œ๋˜์–ด, ์ฃผ๋กœ ํ”Œ๋žซํผ์˜ ์•ˆ์ •ํ™”์™€ ๊ฐœ๋ฐœ์ž ํŽธ์˜์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์ดˆ์ ์„ ๋งž์ท„์Šต๋‹ˆ๋‹ค.

1. Project Coin (์–ธ์–ด ์†Œ๊ทœ๋ชจ ๊ฐœ์„ )

  • ๋‹ค์ด์•„๋ชฌ๋“œ ์—ฐ์‚ฐ์ž (<>): ์ œ๋„ค๋ฆญ ์ธ์Šคํ„ด์Šคํ™” ์‹œ ํƒ€์ž… ์ธ์ˆ˜๋ฅผ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
  • try-with-resources ๋ฌธ: AutoCloseable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ์ž์›(ํŒŒ์ผ ์ŠคํŠธ๋ฆผ, ์†Œ์ผ“ ๋“ฑ)์˜ ์ž๋™ ์ข…๋ฃŒ๋ฅผ ๋ณด์žฅํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ€ํ‹ฐ-์บ์น˜(Multi-catch): ํ•˜๋‚˜์˜ catch ๋ธ”๋ก์—์„œ ์—ฌ๋Ÿฌ ์˜ˆ์™ธ ํƒ€์ž…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2. NIO 2.0 (์ƒˆ๋กœ์šด I/O):

  • ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด API๊ฐ€ ๋„์ž…๋˜์–ด, ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ† ๋ฆฌ ๊ด€๋ฆฌ๊ฐ€ ๋” ์œ ์—ฐํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ‘‘ Java SE 8 (2014): ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํ˜๋ช… (LTS)

Java 8์€ ์ž๋ฐ” ์—ญ์‚ฌ์ƒ ๊ฐ€์žฅ ํฐ ๋ณ€ํ™”๋ฅผ ๊ฐ€์ ธ์˜จ ๋ฒ„์ „์œผ๋กœ, ํ˜„๋Œ€์ ์ธ ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ™˜๊ฒฝ์— ์ ํ•ฉํ•œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ๊ณต์‹์ ์œผ๋กœ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค.

1. ๋žŒ๋‹ค ํ‘œํ˜„์‹ (Lambda Expressions)

  • ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด, ์ฝ”๋“œ๊ฐ€ ์งง์•„์ง€๊ณ  ๊ฐ€๋…์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ๊ณณ์— ์ ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2. ์ŠคํŠธ๋ฆผ API (Stream API)

  • ์ปฌ๋ ‰์…˜ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์„ ์–ธ์ (๋ฌด์—‡์„ ํ• ์ง€)์ด๊ณ  ํ•จ์ˆ˜ํ˜• ์Šคํƒ€์ผ๋กœ(์–ด๋–ป๊ฒŒ ํ• ์ง€) ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • filter, map, reduce ๋“ฑ์˜ ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜๊ณผ ์ง‘๊ณ„๊ฐ€ ์šฉ์ดํ•˜๋ฉฐ, ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

3. Default ๋ฉ”์„œ๋“œ

  • ์ธํ„ฐํŽ˜์ด์Šค์— ๊ตฌํ˜„ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋ฉด์„œ, ๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ๊นจ์ง€ ์•Š๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“ฆ Java SE 9 (2017): ๋ชจ๋“ˆํ™”์™€ ํ”Œ๋žซํผ ์žฌ๊ตฌ์„ฑ

Java 9๋Š” ์ž๋ฐ” ํ”Œ๋žซํผ์˜ ํ™•์žฅ์„ฑ, ๋ณด์•ˆ, ์„ฑ๋Šฅ์„ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ํ”Œ๋žซํผ ์ž์ฒด๋ฅผ ๋Œ€๊ทœ๋ชจ๋กœ ์žฌ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“ˆํ™” ํ˜๋ช…(Jigsaw Project)์„ ๊ฐํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

1. ์ž๋ฐ” ํ”Œ๋žซํผ ๋ชจ๋“ˆ ์‹œ์Šคํ…œ (JPMS)

  • JVM, Java API, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ๋…๋ฆฝ์ ์ธ ๋ชจ๋“ˆ(Module)๋กœ ๋ถ„๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ํ”Œ๋žซํผ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ณ , ํ•„์š”ํ•œ ๋ชจ๋“ˆ๋งŒ ํฌํ•จํ•˜๋Š” ๋Ÿฐํƒ€์ž„ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ๋ฐฐํฌ๊ฐ€ ํšจ์œจํ™”๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์บก์Аํ™”๊ฐ€ ๊ฐ•ํ™”๋˜์–ด ๋‚ด๋ถ€ ๊ตฌํ˜„ ์ƒ์„ธ ์ •๋ณด์— ๋Œ€ํ•œ ๋ฌด๋‹จ ์ ‘๊ทผ์ด ๋ฐฉ์ง€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2. JShell (REPL)

  • ๋Œ€ํ™”์‹์œผ๋กœ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ณ  ํ•™์Šตํ•  ์ˆ˜ ์žˆ๋Š” Read-Eval-Print Loop ๋„๊ตฌ๊ฐ€ ๋„์ž…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

โฑ๏ธ ๋‹จ๊ธฐ/์žฅ๊ธฐ ์ง€์› ์ฒด์ œ (Java 10 ~ ํ˜„์žฌ)

Java 9 ์ดํ›„, ์ž๋ฐ”๋Š” **6๊ฐœ์›”๋งˆ๋‹ค ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ๋ฒ„์ „(Feature Release)**์„ ์ถœ์‹œํ•˜๊ณ , 3๋…„๋งˆ๋‹ค ์žฅ๊ธฐ ์ง€์›(LTS) ๋ฒ„์ „์„ ์ถœ์‹œํ•˜๋Š” ์ฒด์ œ๋กœ ์ „ํ™˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

1. Java SE 11 (2018): ์ฒซ ๋ฒˆ์งธ ๋ชจ๋˜ LTS

  • HTTP Client API: ๊ธฐ์กด์˜ ๋ณต์žกํ•œ HttpURLConnection์„ ๋Œ€์ฒดํ•˜๋Š” ํ˜„๋Œ€์ ์ธ ๋น„๋™๊ธฐ/๋™๊ธฐ HTTP ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ‘œ์ค€ API๋กœ ์ฑ„ํƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ง€์—ญ ๋ณ€์ˆ˜ ํƒ€์ž… ์ถ”๋ก  ํ™•์žฅ (var in Lambda): ๋žŒ๋‹ค ํ‘œํ˜„์‹์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์—์„œ๋„ var ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ์ด ํ—ˆ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

2. Java SE 17 (2021): ์ตœ์‹  ๋ชจ๋˜ LTS

  • Sealed Classes (๋ด‰์ธ๋œ ํด๋ž˜์Šค): ์–ด๋–ค ํด๋ž˜์Šค๊ฐ€ ์ž์‹ ์„ ์ƒ์†ํ•˜๊ฑฐ๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ์ƒ์† ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํžˆ ์ œ์–ดํ•˜๊ณ  ์•ˆ์ •์„ฑ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค.
  • Record Classes (๋ฐ์ดํ„ฐ ํด๋ž˜์Šค): ๋ฐ์ดํ„ฐ๋ฅผ ์šด๋ฐ˜ํ•˜๋Š” ํด๋ž˜์Šค(DTO, VO)๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ํ•„๋“œ๋งŒ ์ง€์ •ํ•˜๋ฉด ์ƒ์„ฑ์ž, Getter, equals(), hashCode(), toString() ๋“ฑ์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•ด ์ฃผ๋Š” ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•์„ ๋„์ž…ํ•˜์—ฌ ์ƒ์‚ฐ์„ฑ์„ ๊ทน๋Œ€ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.

3. Java SE 21 (2023): ๋น„๋™๊ธฐ ํ˜๋ช… ๋ฐ ์„ฑ๋Šฅ์˜ ์ •์  (ํ˜„์žฌ LTS)

  • Virtual Threads (๊ฐ€์ƒ ์Šค๋ ˆ๋“œ, Project Loom): ๊ธฐ์กด ์Šค๋ ˆ๋“œ๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ€๋ณ๊ณ  ์ €๋ ดํ•œ ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ๋ฅผ ๋„์ž…ํ•˜์—ฌ, ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ณต์žก์„ฑ์„ ํš๊ธฐ์ ์œผ๋กœ ๋‚ฎ์ถ”๊ณ  ๋Œ€๊ทœ๋ชจ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์š”๊ตฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ๊ทน๋Œ€ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • Pattern Matching for Switch (Switch ํŒจํ„ด ๋งค์นญ): switch ๋ฌธ์—์„œ ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ํŒจํ„ด ๋งค์นญ์„ ์ง€์›ํ•˜์—ฌ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง€๊ณ  ์•ˆ์ •์„ฑ์ด ๋†’์•„์กŒ์Šต๋‹ˆ๋‹ค.
  • Scoped Values: ์Šค๋ ˆ๋“œ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ณต์œ ํ•˜๋Š” ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋„์ž…ํ•˜์—ฌ ๋Œ€๊ทœ๋ชจ ๋น„๋™๊ธฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ฐ์ดํ„ฐ ํ๋ฆ„ ๊ด€๋ฆฌ๋ฅผ ๊ฐœ์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ’ก ์š”์•ฝ: Java ์ง„ํ™”์˜ 3๋Œ€ ์ถ•

Java 7 ์ดํ›„์˜ ์ง„ํ™”๋Š” ๋‹ค์Œ ์„ธ ๊ฐ€์ง€ ๋ชฉํ‘œ์— ์ง‘์ค‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  1. ๊ฐœ๋ฐœ ์ƒ์‚ฐ์„ฑ ํ–ฅ์ƒ: ๋žŒ๋‹ค, ์ŠคํŠธ๋ฆผ, Record ๋“ฑ ๊ฐ„๊ฒฐํ•œ ๋ฌธ๋ฒ•์„ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋” ์ ์€ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋„๋ก ์œ ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.
  2. ๋ชจ๋“ˆํ™” ๋ฐ ํ”Œ๋žซํผ ์œ ์—ฐ์„ฑ: JPMS๋ฅผ ํ†ตํ•ด ํ”Œ๋žซํผ์˜ ๊ทœ๋ชจ๋ฅผ ์ค„์ด๊ณ  ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜์—ฌ ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์— ์ ํ•ฉํ•œ ํ˜•ํƒœ๋กœ ์ง„ํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค.
  3. ๋™์‹œ์„ฑ ๋ฐ ์„ฑ๋Šฅ ๊ทน๋Œ€ํ™”: ๊ฐ€์ƒ ์Šค๋ ˆ๋“œ(Virtual Threads)์™€ ๊ฐ™์€ ํ˜์‹ ์„ ํ†ตํ•ด ๋ฉ€ํ‹ฐ์ฝ”์–ด ๋ฐ ๊ณ ์„ฑ๋Šฅ ์ปดํ“จํŒ… ํ™˜๊ฒฝ์—์„œ ์ž๋ฐ”์˜ ๊ฐ•๋ ฅํ•จ์„ ์ด์–ด๊ฐ€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ง€์†์ ์ธ ์ง„ํ™”๋Š” ์ž๋ฐ”๊ฐ€ ์˜ค๋Š˜๋‚ ์—๋„ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ํ™˜๊ฒฝ์—์„œ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์–ธ์–ด ์ค‘ ํ•˜๋‚˜๋กœ ์ž๋ฆฌ๋งค๊น€ํ•  ์ˆ˜ ์žˆ๋Š” ์›๋™๋ ฅ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฐ˜์‘ํ˜•