๐ 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 ์ดํ์ ์งํ๋ ๋ค์ ์ธ ๊ฐ์ง ๋ชฉํ์ ์ง์ค๋์์ต๋๋ค.
- ๊ฐ๋ฐ ์์ฐ์ฑ ํฅ์: ๋๋ค, ์คํธ๋ฆผ, Record ๋ฑ ๊ฐ๊ฒฐํ ๋ฌธ๋ฒ์ ํตํด ๊ฐ๋ฐ์๊ฐ ๋ ์ ์ ๋ณด์ผ๋ฌํ๋ ์ดํธ ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ์ ๋ํ์ต๋๋ค.
- ๋ชจ๋ํ ๋ฐ ํ๋ซํผ ์ ์ฐ์ฑ: JPMS๋ฅผ ํตํด ํ๋ซํผ์ ๊ท๋ชจ๋ฅผ ์ค์ด๊ณ ๋ณด์์ ๊ฐํํ์ฌ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ์ ํฉํ ํํ๋ก ์งํํ์ต๋๋ค.
- ๋์์ฑ ๋ฐ ์ฑ๋ฅ ๊ทน๋ํ: ๊ฐ์ ์ค๋ ๋(Virtual Threads)์ ๊ฐ์ ํ์ ์ ํตํด ๋ฉํฐ์ฝ์ด ๋ฐ ๊ณ ์ฑ๋ฅ ์ปดํจํ ํ๊ฒฝ์์ ์๋ฐ์ ๊ฐ๋ ฅํจ์ ์ด์ด๊ฐ๊ณ ์์ต๋๋ค.
์ด๋ฌํ ์ง์์ ์ธ ์งํ๋ ์๋ฐ๊ฐ ์ค๋๋ ์๋ ์ํฐํ๋ผ์ด์ฆ ํ๊ฒฝ์์ ๊ฐ์ฅ ์ค์ํ ์ธ์ด ์ค ํ๋๋ก ์๋ฆฌ๋งค๊นํ ์ ์๋ ์๋๋ ฅ์ด ๋์์ต๋๋ค.