Modern Java์ ๋ํด, Java 8 ~ Java 21๊น์ง์ ๋ณ๊ฒฝ์ง์ ์ ์ ๋ฆฌํด๋ณด๋ ํฌ์คํ ์ ๋๋ค.
ํด๋น ํฌ์คํ ์ ์๋ ๋ธ๋ก๊ทธ๋ฅผ ๋ฒ์ญํ ํฌ์คํ ์ ๋๋ค.
์๋ฐ 8์ ์์์ผ๋ก ํฅ๋ฏธ๋ก์ด ๊ธฐ๋ฅ๋ค์ ๊ฐ๋ฐ์๋ค์ด ์ฝ๋ฉํ๋ ๋ฐฉ์์ ๋ณํ์์ผฐ์ต๋๋ค. ๋๋ค ํํ์๋ถํฐ ๋ฐ์ดํฐ ์์ ์ ์ฝ๊ฒ ํด์ค ์คํธ๋ฆผ API๊น์ง, ์๋ฐ 8์ ๊ฒ์ ์ฒด์ธ์ ์์ต๋๋ค.
sealed ํด๋์ค๋ฅผ ํตํด ํด๋์ค๋ฅผ ๋ ์ฝ๊ฒ ์ ์ดํ ์ ์๊ณ , records๋ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ๋ง๋ค ์ ์๋๋ก ๋์์ฃผ๋ ์๋ฐ 21์ ์ ๋ฐ์ดํธ ๋ด์ฉ์ ์ดํด๋ณผ ๊ฒ์ ๋๋ค.
๊ฐ๋จํ ์ค๋ช ๊ณผ ์ค์ฉ์ ์ธ ์์๋ฅผ ํตํด ํ๋์ ์ธ ์๋ฐ ๊ธฐ๋ฅ์ ์ธ๋ถํํ๋ฉด์ ์ฌ์ ์ ์ฐธ์ฌํ์ธ์. ๊ธ์ด ์๋นํ ๊ธธ์ด์ง ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ฝ๊ธฐ ํธํ๋๋ก ๋ ์์ ๋ถ๋ถ์ผ๋ก ๋๋๋ ๊ฒ์ ์ ์ํฉ๋๋ค.
์์ฝ
Java 8
- Lambda Expression
- Stream API
- Method Reference
- Default Methods
- Date and Time API
- Optional *
Java 9
- Java Module System
- Try-with-resources
- Private Interface Methods
Java 10
- Local Variable Type Inference
Java 11
- Local Variable Type in Lambda Expressions
Java 12
- String Indent and Transform
- Files Mismatch
Java 13
- TextBlocks
Java 14
- Yield Keyword
Java 15
- Garbage Collector Updates
Java 16
- Pattern Matching for instanceof
- Records
Java 17
- Sealed Class
Java 21
- Virtual Threads
- Sequenced Collections
- String Templates
- Record Patterns
Java 8
Lambda Expression
๋๋ค ํํ์์ ์ต๋ช ํจ์๋ฅผ ํํํ๋ ๊ฐ๊ฒฐํ ๋ฐฉ๋ฒ์ผ๋ก, ๋ค๋ฅธ ํจ์์ ์ธ์๋ก ์ ๋ฌํ๊ฑฐ๋ ํจ์ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ณ๋์ ๋ช ์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ง๋ค์ง ์๊ณ ๋ ์์ ์ธ๋ผ์ธ ํจ์๋ฅผ ์ ์ํ ์ ์์ต๋๋ค. ๋๋ค ํํ์์ ์๋ฐ์ ๊ฐ์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ ์ธ์ด์์ ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
Stream API
์คํธ๋ฆผ API๋ ์๋ฐ 8์ ๋์ ๋ ๊ธฐ๋ฅ์ผ๋ก ๋ฐ์ดํฐ์ ์ปฌ๋ ์ (list, arrays)์ ์ฒ๋ฆฌํ๋ ๋ณด๋ค ๊ธฐ๋ฅ์ ์ด๊ณ ์ ์ธ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์คํธ๋ฆผ์ ์ฌ์ฉํ๋ฉด ์ปฌ๋ ์ ์ ์์๋ค์ ๋ํด ๋ณด๋ค ๊ฐ๊ฒฐํ๊ณ ํํ์ ์ธ ๋ฐฉ์์ผ๋ก ๋ค์ํ ์์ (filtering, mapping, reducing)์ ์ํํ ์ ์์ต๋๋ค.
๋ง์ ์ํฉ๋ค์ด ์คํธ๋ฆผ API์ ํจ๊ป ๊ตฌํ๋ ์ ์์ต๋๋ค.
์ ์์๋ ๊ณผ์ผ ๋ชฉ๋ก์์ ์คํธ๋ฆผ ์์ฑ ํ ๊ธธ์ด๊ฐ 5๊ธ์๋ณด๋ค ํฐ ๊ณผ์ผ์ ํํฐ๋งํ๊ณ (filter), ๋๋จธ์ง ์์๋ฅผ ๋๋ฌธ์๋ก ๋ณํํ๊ณ (map), ๊ฒฐ๊ณผ๋ฅผ ์๋ก์ด list๋ก ์์งํฉ๋๋ค.
์ด์ฒ๋ผ ์คํธ๋ฆผ API๋ ์ฝ๋๋ฅผ ๋ ์ฝ๊ฒ ์ฝ๊ณ , ์ฌ๋ฌ ์์ ๋ค์ ๋ํ ์ฒด์ด๋ ๋ฐฉ์์ ํ ์ ์๋๋ก ํฉ๋๋ค.
Method Reference
๋ฉ์๋ ์ฐธ์กฐ๋ ๋ฉ์๋๋ ์์ฑ์๋ฅผ ์ฐธ์กฐํ์ฌ ์คํธ๋ฆผ API๋ ๋๋ค์ ๊ฐ์ ๊ณ ์ฐจ ํจ์์ ๋ํ ์ธ์๋ก ์ฌ์ฉํ๊ธฐ ์ํ ์ถ์ฝ ๊ตฌ๋ฌธ์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ๋ฉ์๋์ ๋์์ ๋ณต์ ํ๋ ๋๋ค ์์ ์ ๊ณตํ๋ ๋์ ๋ฉ์๋ ์ด๋ฆ์ผ๋ก ์ง์ ์ฐธ์กฐํ ์ ์์ด ์ฝ๋๋ฅผ ๊ฐ์ํํฉ๋๋ค.
์ด ์์ ์์๋ ๋ฐฐ์ด ์ ๋ ฌ์ ๋ช ์์ ๋๋ค ์ `(a, b) -> a.compareToIgnoreCase(b))`๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์ ๋ฉ์๋ ์ฐธ์กฐ ๋ฐฉ์๊ณผ์ ๋น๊ต๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํจ์ ๋๋ค.
Default Methods
default ๋ฉ์๋๋ ๊ตฌํ์ฒด๊ฐ ์๋ ์ธํฐํ์ด์ค์ ์ ์๋ ๋ฉ์๋์ ๋๋ค. ์ด ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๋ ๊ธฐ์กด ํด๋์ค์์ ํธํ์ฑ์ ๊นจ์ง ์๊ณ ์ธํฐํ์ด์ค์ ์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
default ๋ฉ์๋๋ ๋ชจ๋ ๊ตฌํ ๋ชจ๋ ๊ตฌํ์ฒด์ ํด๋์ค๊ฐ ์ ๋ฉ์๋์ ๋ํ ๊ตฌํ์ฒด๋ฅผ ์ ๊ณตํ๋๋ก ๊ฐ์ํ์ง ์๊ณ ์ธํฐํ์ด์ค๋ฅผ ํ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
์ด ์์ ์์๋ Greeting ์ธํฐํ์ด์ค๋ default ๋ฉ์๋์ธ greet()๋ฅผ ์ ์ํ๊ณ ์์ต๋๋ค. Person ํด๋์ค๋ Greeting ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์์ง๋ง, greet() ๋ฉ์๋๊ฐ ๊ธฐ๋ณธ ๊ตฌํ์ฒด๋ฅผ ์์ํ๋ฏ๋ก ์์ฒด์ ์ธ ๊ตฌํ์ ์ ๊ณตํ ํ์๊ฐ ์์ต๋๋ค. person.greet() ํธ์ถ์ ์ธํฐํ์ด์ค์ ๊ธฐ๋ณธ ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
Date and Time API (๋ ์ง ๋ฐ ์๊ฐ API)
Java 8์ ์๊ฐ๋ Date and Time API๋ ๋ ์ง ๋ฐ ์๊ฐ ๊ด๋ จ ์์ ์ ํฌ๊ด์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ฉฐ, ์ด์ java.util.Date ๋ฐ java.util.Calendar ํด๋์ค์ ํ๊ณ์ ๋ณต์ก์ฑ์ ํด๊ฒฐํฉ๋๋ค. ์ด๋ dates, times, periods, durations, time zones, ๊ธฐํ ๋ฑ๋ฑ์ ๋ํ๋ด๋ ํด๋์ค๊ฐ ํฌํจ๋์ด ์์ต๋๋ค. ๋ค์์ ๋ ์ง ๋ฐ ์๊ฐ API ์ฌ์ฉ์ ๊ธฐ๋ณธ ๊ฐ์ ๋ฐ ์์์ ๋๋ค.
์ด ์์ ์์๋ java.time ํจํค์ง์์ dates, times, date-time ๋ฑ ์์ ํ ํด๋์ค๋ฅผ import ํฉ๋๋ค.
LocalDate, LocalTime, LocalDateTime ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ , DateTimeFormatter ํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ง๋ฅผ ํฌ๋งทํ ๋ฐ ํ์ฑ ํฉ๋๋ค.
Java์ Date, Time API๋ ์ด์ ๋ฒ์ ์ ๋นํด ๋ ์ง๊ด์ ์ด๊ณ , ๋ถ๋ณํ๋ฉฐ, ์ค๋ ๋ ์์ ํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
time zones, time durations, ๋ ์ง ์ฐจ์ด๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ZonedDateTime, Duration, Period์ ๊ฐ์ ํด๋์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
API๋ ์ด์ ๋ ์ง ๋ฐ ์๊ฐ ํด๋์ค์์ ๋ฌธ์ ๊ฐ ๋์๋ ์๊ฐ ๊ณ์ฐ ๋ฐ ์ผ๊ด ์ ์ฝ ์๊ฐ(?) ์กฐ์ ๊ณผ ๊ด๋ จ๋ ์ผ๋ฐ์ ์ธ ํจ์ ์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
๊ณผ๊ฑฐ API์์ ์ ๊ท API๋ก์ ์ ํ์ ๋ํ ๋ ์์ธํ ์ค๋ช ์ Baeldung page ๋ฅผ ํตํด ์ฐพ์ ์ ์์ต๋๋ค.
Java 9
Java Module System
Java 9์ ๋์ ๋ Java ๋ชจ๋ ์์คํ ์ ๋ชจ๋์์ด๊ณ ์ ์ง ๋ณด์๊ฐ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง๋ค ์ ์๋ Java ํ๋ซํผ์ ๊ทผ๋ณธ์ ๋ณํ์ ๋๋ค.
์ด ์์คํ ์ ์๋ฐ ์ํ๊ณ์์ ๋ฌธ์ ๊ฐ ๋ ์บก์ํ, ํด๋์ค ์ค์ผ, ๋ฒ์ ์ถฉ๋๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค
Key Conecpts:
Module
- ๋ชจ๋์ ๊ตฌํ์ ์ธ๋ถ ์ฌํญ, ์์กด์ฑ์ ์บก์ํํ๊ณ , ๋ช ํํ API๋ฅผ ์ ๊ณตํ๋ ๋ ๋ฆฝํ ์ฝ๋ ๋จ์์ ๋๋ค. ๋ชจ๋์ ํจ์บ์ง์ ๋ฆฌ์์ค๋ฅผ ํจ๊ป ๊ทธ๋ฃนํํ์ฌ ๋ ๋์ ์์ค์ ์ถ์ํ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Module Descriptor (module-info.java)
- ๊ฐ ๋ชจ๋์๋ module-info.java๋ผ๋ ์ด๋ฆ์ ํ์ผ์ ์ง์ ๋ module descriptor๊ฐ ์์ต๋๋ค. ์ด ์ค๋ช ์๋ ๋ชจ๋์ ์ด๋ฆ, ์์กด์ฑ, ํจํค์ง, ๊ธฐํ ๋ชจ๋ ๊ด๋ จ ์ค์ ์ ์ ์ํฉ๋๋ค.
Module Path
- ๋ชจ๋ ๊ฒฝ๋ก๋ ์๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์กด์ฑ์ ์ง์ ํ๋ ์๋ก์ด ๋ฐฉ๋ฒ์ผ๋ก, ์ ํต์ ์ธ ํด๋์ค ๊ฒฝ๋ก๋ฅผ ๋์ฒดํฉ๋๋ค. ๋ชจ๋์ ์์กด์ฑ๊ณผ ๋ช ์์ ์ธ ์๊ตฌ ์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก ์์ ๋๋ฏ๋ก ํด๋์ค ๊ฒฝ๋ก ์ถฉ๋์ ๋ฐฉ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
Java์ ๋ชจ๋ ์์คํ ์ ๋ชจ๋ ์์คํ ์ ๊ธฐ๋ฅ์ ์ง์ํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์๋ก์ด ํค์๋์ ๊ฐ๋ ์ ๋์ ํ์ต๋๋ค. ์ด๋ฌํ ํค์๋๋ ๋ชจ๋ ์ ์ธ์ ์ ์ํ๊ณ , Java ๋ชจ๋ ์์คํ ๋ด์ ๋ชจ๋, ์๋น์ค ๋ฐ ํจํค์ง ๊ฐ ๊ด๊ณ๋ฅผ ์ ์ํ๋ ๋ฐ ํ์์ ๋๋ค. ๋ค์์ ๋ชจ๋ ์์คํ ๊ณผ ๊ด๋ จ๋ ์ฃผ์ ํค์๋์ ๋๋ค.
module: ๋ชจ๋, ์ด๋ฆ, ์์กด์ฑ, ๋ค๋ฅธ ํน์ฑ๋ค์ ์ ์ธํฉ๋๋ค. ๋ชจ๋ ์ ์ธ์ module-info.java ํ์ผ์ ํฉ๋๋ค.
requires: ๋ชจ๋ ์์กด์ฑ์ ์ง์ ํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋์ด ํ์ํ ๋ชจ๋์ exportํ ํจํค์ง์ ํด๋น ๋ชจ๋์ ๊ณต๊ฐ ์ ํ์ ์ ๊ทผํ ์ ์์ต๋๋ค.
exports: ๋ค๋ฅธ ๋ชจ๋์ ์ ๊ทผํ ์ ์๋ ํจํค์ง๋ฅผ ์ ์ธํฉ๋๋ค. exported ํจํค์ง๋ ๋ชจ๋์ public API๋ฅผ ์ ์ํฉ๋๋ค.
opens: ํจํค์ง์ ๋ํ ๋ฐ์ฌ์ ์ธ ์ ๊ทผ์ ํ์ฉํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํน์ ๋ชจ๋์ ๋ํ ํจํค์ง์ private members์๊ฒ ๋ฐํ์ ์ ๊ทผ ๊ถํ์ ๋ถ์ฌํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ๋ฉ๋๋ค.
uses: ๋ชจ๋์ด ์๋น์ค๋ฅผ ์๋นํ๋ค๊ณ ์ ์ธํฉ๋๋ค. ์ด ํค์๋๋ ์๋น์ค ๊ด๊ณ๋ฅผ ์ค์ ํ๋ ๋ฐ provides ํค์๋์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค.
provides: ๋ชจ๋์์ ์ ๊ณตํ๋ ์๋น์ค ๊ตฌํ์ Java Service Provider Interface ์ ์ผ๋ถ๋ก ์ง์ ํฉ๋๋ค.
with: provides ์์ ์๋น์ค ์ ๊ณต์ ํด๋์ค๋ฅผ ์ ์ธํ ๋ ์ฌ์ฉํ ์๋น์ค ๋ก๋ ๊ตฌํ์ ์ง์ ํฉ๋๋ค.
to: ์ฌ๋ฌ providers๊ฐ ์ ์๋ ๋ provides์์ ์๋น์ค ๊ณต๊ธ์ ํด๋์ค๋ฅผ ์ง์ ํฉ๋๋ค.
Try-with-resources
try-with-resources ๊ตฌ๋ฌธ์ Java์์ try ๋ธ๋ก ๋ด์์ ์ฌ์ฉ๋๋ ๋ฆฌ์์ค๋ฅผ ์๋์ผ๋ก close ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์์ธ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๋ฆฌ์์ค๊ฐ ์ ๋๋ก ๋ซํ๋๋ก ํ์ฌ ๋ฆฌ์์ค ๊ด๋ฆฌ๋ฅผ ๊ฐ์ํํฉ๋๋ค. try-with-resoucres ๋ฌธ์์ ์ฌ์ฉ๋๋ Resources๋ AutoCloseable ํน์ java.io.Closeable ์ธํฐํ์ด์ค๋ฅผ ๋ฐ๋์ ๊ตฌํํด์ผ ํฉ๋๋ค.
Java 9์์, try-with-resources ๊ตฌ๋ฌธ์ try ๋ธ๋ก ๋ด์์ ์ ์ธ๋ final ๋ณ์๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํฅ์๋์์ต๋๋ค.
์ด ํฅ์๋ ๊ธฐ๋ฅ์ ๋ฆฌ์์ค๋ฅผ try ๋ธ๋ก ๋ด์์ ์ง์ ์ ์ธํ ์ ์๋๋ก ํ์ฌ ์ฝ๋๋ฅผ ๋จ์ํํ๊ณ , ๊ฐ๋ ์ฑ์ ๊ฐ์ ํ๊ณ , ์ค์ ํ์ํ ๋ณ์ ์ค์ฝํ๋ฅผ ์ค์ด๊ฒ ๋์์ต๋๋ค.
Private Interface Methods
Private ์ธํฐํ์ด์ค ๋ฉ์๋๋ ์ธํฐํ์ด์ค๊ฐ private ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์๋๋ก ์๋ฐ 9์ ๋์ ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ด ๋ฉ์๋๋ ์ฃผ๋ก ์ฝ๋ ์ฌ์ฌ์ฉ๊ณผ ๊ฐ๋ ์ฑ ํฅ์์ ์ํด ์ธํฐํ์ด์ค ์์ฒด ๋ด์์ ์ฌ์ฉํ๋ ์๋๋ฅผ ์ง๋๊ณ ์์ต๋๋ค. ์ธํฐํ์ด์ค ์ธ๋ถ์ ํด๋์ค ๋๋ ๋ค๋ฅธ ํด๋์ค๋ฅผ ๊ตฌํํ์ฌ ์ ๊ทผํ๊ฑฐ๋ ์ฌ์ ์ํ ์ ์์ต๋๋ค.
Java 10
Local Variable Type Inference
์ข ์ข "var" ํ์ ์ด๋ผ๊ณ ๋ ํ๋ ๋ก์ปฌ ๋ณ์ ํ์ ์ถ๋ก ์, ๋ก์ปฌ ๋ณ์์ ํ์ ์ ๋ช ์์ ์ผ๋ก ์ง์ ํ์ง ์๊ณ ๋ ๋ก์ปฌ ๋ณ์๋ฅผ ์ ์ธํ ์ ์๋ Java 10์ ๋์ ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ปดํ์ผ๋ฌ๋ ํ ๋น๋ ๊ฐ์ ๊ธฐ๋ฐ์ผ๋ก ๋ณ์์ ํ์ ์ ์ถ๋ก ํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ๊ฐ๋ ฅํ ํ์ดํ์ ์ ์งํ๋ฉด์ ์ฝ๋ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค.
var ํ์ ์ ์ด๊ธฐํ๋ ๋ก์ปฌ ๋ณ์์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ, ๋ฐํ ํ์ , ํด๋์ค ํ๋, ์ด๊ธฐํ๋์ง ์์ ๋ณ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. var๋ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ์ฝ๋๋ฅผ ๊ฐ์์ํค์ง๋ง ๋ช ํ์ฑ์ ์ํด ์๋ฏธ ์๋ ๋ณ์ ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
๋ณ์ ์ด๋ฆ์ด ๋ช ํํ์ง ์์ ๊ฒฝ์ฐ, var๋ฅผ ๊ณผ๋ํ๊ฒ ์ฌ์ฉํ๋ฉด ์ฝ๋ ๊ฐ๋ ์ฑ์ด ์ ํ๋ ์ ์์ต๋๋ค.
Java 11
Local Variable Type in Lambda Expressions
๋ก์ปฌ ๋ณ์ ํ์ ์ถ๋ก ("var" ํ์ )์ ๋ํ ๋๋ค ํํ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ Java 11์ ๋์ ๋์ด var๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ค์ ๋ด์ ๋ณ์ ํ์ ์ ์ ์ธํ ์ ์์ต๋๋ค. ์ด๋ ์ ์ ํ์ดํ์ ์ด์ ์ ์ ์งํ๋ฉด์ ์ฝ๋ ๊ฐ๋ ์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋ค์์ ๋๋ค ํํ์์์ ๋ก์ปฌ ๋ณ์ ํ์ ์ ์ฌ์ฉ์ ๋ํ ์์์ ๋๋ค.
Java 12
String Indent and Transform
Indent ๋ฉ์๋๋ ๋ฌธ์์ด์ ๊ฐ ์ค์ ๋ค์ฌ ์ฐ๊ธฐ๋ฅผ ์ถ๊ฐํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ ๋ผ์ธ์ ์์ ๋ถ๋ถ์ ์ง์ ๋ ์์ ๊ณต๋ฐฑ์ด ์ถ๊ฐ๋ ์ ๋ฌธ์์ด ์ธ์คํด์ค๋ฅผ ๋ฐํํฉ๋๋ค.
Transform ๋ฉ์๋๋ ๋ฌธ์์ด์ ๋ณํ ํจ์๋ฅผ ์ ์ฉํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํฉ๋๋ค. ์ด๋ ๋ณด๋ค ๊ธฐ๋ฅ์ ์ธ ํ๋ก๊ทธ๋๋ฐ ์คํ์ผ๋ก ๋ฌธ์์ด์ ๋ํ ์ฐ์ฐ์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค.
Files Mismatch
Files.mismatch() ๋ฉ์๋๋ Java์ java.nio.file ํจํค์ง์ ํฌํจ๋์ด ์์ผ๋ฉฐ, ๋ ํ์ผ์ ๋ด์ฉ ์ฐจ์ด๋ฅผ ๋น๊ตํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ฉ์๋์ ๋๋ค. ์ด ๋ฉ์๋๋ ํ์ผ์ ์ ์ฒด ๋ด์ฉ์ ์ฝ์ ํ์ ์์ด ๋ ํ์ผ์ ๋ด์ฉ์ด ๋ค๋ฅธ์ง ์ฌ๋ถ๋ฅผ ํจ์จ์ ์ผ๋ก ํ๋จํ๋๋ก ์ค๊ณ๋์์ต๋๋ค.
์ด ์ฝ๋์์ Files.mismatch() ๋ฉ์๋๋ filePath1 ๋ฐ filePath2์์ ์ฐธ์กฐํ๋ ํ์ผ์ ๋ด์ฉ์ ๋น๊ตํ๊ณ , ์ฒซ ๋ฒ์งธ ๋ค๋ฅธ ๋ฐ์ดํธ์ ์์น๋ฅผ ๋ฐํํ๋ฉฐ, 7๋ฒ์งธ ์์น์ ํด๋นํ๋ ๊ณต๋ฐฑ ๋ฌธ์์ ํด๋นํฉ๋๋ค. ์ด๋ ๋ ํ์ผ์ ๋ด์ฉ์์ 7๋ฒ์งธ ์์น๋ถํฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๋๋ค.
Java 13
TextBlocks
Text Blocks๋ Java 13์ preview ๊ธฐ๋ฅ์ผ๋ก ๋์ ๋์์ผ๋ฉฐ, Java 15์์ ์ ์์ ์ผ๋ก ๊ฐ๋ฐ๋์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ ๋ฌธ์์ด์ ์ฐ๊ฒฐ์ด๋
์ด์ค์ผ์ดํ ๋ฌธ์ ์์ด ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ์๋ ๋ฌธ์์ด์ ๋ ์ฝ๊ธฐ ์ฝ๊ณ ์์ฐ์ค๋ฝ๊ฒ ์ ์ํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
Text Blocks๋ SQL ์ฟผ๋ฆฌ, JSON, XML, ๊ฐ๋ ์ฑ์ด ์ค์ํ ๋ค๋ฅธ ํฌ๋งทํ์์ ํ ์คํธ๋ฅผ ์์ฑํ ๋ ํนํ ์ ์ฉํฉ๋๋ค.
Java 14
Yield Keyword
Java 12์์ ์ค์์น ๋ฌธ์ ์์ ๋์ ํ์ฌ previw ๊ธฐ๋ฅ์ผ๋ก ์ถ์ํ์ต๋๋ค. Java 13์์๋ ์ค์์น ๋ฌธ์์ ๊ฐ์ ๋ฐํํ๊ธฐ ์ํด ์๋ก์ด yield constructor ๋ฅผ ์ถ๊ฐํ๊ณ , ์ด์ Java 14์์๋ ์ค์์น ์์ ํ์ค ๊ธฐ๋ฅ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
Java 15
Garbage Collector Updates
Z ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ Java 15 ์ด์ ๊น์ง๋ ์คํ์ ์ธ ๊ธฐ๋ฅ์ด์์ต๋๋ค. ์ง์ฐ ์๊ฐ์ด ์งง๊ณ , ํ์ฅ์ฑ์ด ๋ฐ์ด๋ ๊ฐ๋น์ง ์ปฌ๋ ํฐ์ ๋๋ค.
ZGC๋ ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ์์ ๋๋ฌด๋๋ ๊ฑฐ๋ํด์ ์กฐ๊ธฐ์ ์ถ์ํ๊ธฐ ์ด๋ ต๋ค๊ณ ๋๋ผ๋ฉด์ ์คํ ๊ธฐ๋ฅ์ผ๋ก Java 11์ ๋์ ๋์์ต๋๋ค. ๊ทธ ์ดํ๋ก ๊ฐ๋น์ง ์ปฌ๋ ์ ์์ ๋ง์ ๋ถ๋ถ ๊ฐ์ ์ด ์ด๋ฃจ์ด์ก์ต๋๋ค.
ZGC๋ ๊ณ ์ฑ๋ฅ์ด๋ฉฐ, ๋จธ์ ๋ฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๊ฐ์ ๋๊ท๋ชจ์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ์๋ ํจ์จ์ ์ผ๋ก ์๋ํฉ๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ ์ฅ์๊ฐ ์ผ์ ์ค์ง๋๋ ์ผ(STW??)์ด ์๋๋ก ํฉ๋๋ค. Linux, Windows, MacOS๋ฅผ ์ง์ํฉ๋๋ค.
Shenandoah(?)์ ์ผ์ ์ค์ง ์๊ฐ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๊ฐ ์คํ ๋จ๊ณ์์ ๋ฒ์ด๋ฌ์ต๋๋ค. JDK 12์์ ๋์ ๋์์ผ๋ฉฐ, Java 15 ์ดํ๋ถํฐ๋ ํ์ค JDK์ ์ผ๋ถ๊ฐ ๋์์ต๋๋ค.
Java 16
Pattern Matching for instanceof
Java 14์์ preview ๊ธฐ๋ฅ์ผ๋ก type test pattern(?)์ ๊ฐ์ง๋ instanceof ์ฐ์ฐ์๋ฅผ ์๊ฐํ์ต๋๋ค. Type test pattern์ ๋จ์ผ ๋ฐ์ธ๋ฉ ๋ณ์๊ฐ ์๋ ์ ํ์ ์ง์ ํ๋ predicate๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด ๊ธฐ๋ฅ์ Java 15์์๋ ๊ณ์ preview ๊ธฐ๋ฅ์ผ๋ก ์ฌ์ฉ๋์๊ณ , Java 16์์๋ ํ์ค ๋ฆด๋ฆฌ์ฆ๊ฐ ๋์์ต๋๋ค.
Records
Java 14๋ ๋ถ๋ณ์ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋๋ก preview ๊ธฐ๋ฅ์ผ๋ก ์๋ก์ด ํด๋์ค ํ์ ์ธ record๋ฅผ ๋์ ํ์ต๋๋ค.
Java 15๋ recore ์ ํ์ ๋์ฑ ๊ฐ์ ํ๊ณ , Java 16์์๋ record๊ฐ JDK์ ํ์ค ๊ธฐ๋ฅ์ด ๋์์ต๋๋ค. record๋ฅผ ์ ์ํ๋ ๊ฒ์ ๋ถ๋ณ ๊ฐ์ฒด๋ฅผ ์ ์ํ๋ ๊ฐ๊ฒฐํ ๋ฐฉ๋ฒ์ ๋๋ค.
Java 17
Sealed Class
Sealed ํด๋์ค๋ ํด๋์ค ์์์ ๋ํ ํต์ ๊ถ์ ๊ฐํํ๊ณ , ํน์ ํ์ ํด๋์ค๋ง ํ์ฅํ ์ ์๋๋ก ์๋ฐ 15์ ๋์ ๋ ๊ธฐ๋ฅ์ ๋๋ค.
์ด ๊ธฐ๋ฅ์ sealed ํด๋์ค์์ ์์์ด ํ์ฉ๋๋ ์ ํ๋ ํด๋์ค ์งํฉ์ ์ ์ธํ๋ ๋์์ ๋ค๋ฅธ ํด๋์ค๋ค์ ํ์ฅํ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์๋๋ Sealed ํด๋์ค์ ์๋ ๋ฐฉ์์ ๋ํ ๊ธฐ๋ณธ ์์์ ๋๋ค.
์ด ์์ ์์ Shape ํด๋์ค๋ sealed ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ธ๋์์ต๋๋ค. permits ํค์๋๋ Shape ํด๋์ค๋ก๋ถํฐ ์์ํ ์ ์๋ ํด๋์ค๋ค์ ์ง์ ํ๋๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ด ์์ ์์ Circle, Rectangle, Triangle, Square ํด๋์ค๋ Shape์ ํ์ฉ๋๋ ํ์ ํด๋์ค๋ก ๋ช ์์ ์ผ๋ก ํ์๋ฉ๋๋ค. Square ํด๋์ค๋ non-sealed๋ก ์ ์ธ๋๋ฏ๋ก, ๋ถ๋ณ์ด ์๋๊ณ ํ์ฌ ํจํค์ง ์ธ๋ถ์ ํด๋์ค์ ์ํด ์ถ๊ฐ๋ก ํ์ฅ๋ ์ ์์ต๋๋ค.
Sealed ํด๋์ค์ ํต์ฌ ๊ธฐ๋ฅ
- Controlled Inheritance: Sealed ํด๋์ค๋ ์ด๋ ํด๋์ค๊ฐ ์์์ด ๊ฐ๋ฅํ์ง, ์ํ์ง ์๊ฑฐ๋ ์์ํ์ง ์์ ํ์ ํด๋์ค๋ฅผ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- Limited Subclasses: pertmis ํค์๋๋ sealed ํด๋์ค์ ์ง์ ์ ์ธ ํ์ ํด๋์ค๋ก ๋ช ์ํ ์ ์์ต๋๋ค.
- Open and Non-Sealed: Sealed ํด๋์ค๋ ๊ฐ๋ฐฉํ ๋๋ non-sealed ํด๋์ค๋ฅผ ํ์ฅํ ์ ์์ด ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ์ ๋ ๋ง์ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
- Final by Default: Sealed ํด๋์ค๋ ๋ถ๋ณ์ด๋ฏ๋ก, ๋ช ์์ ์ผ๋ก ํ์ฉ๋์ง ์๋ ํ ์ง์ ์ธ์คํด์คํํ๊ฑฐ๋ ํ์ ํด๋์ค๋ก ๋ถ๋ฅํ ์ ์์ต๋๋ค.
- Use Cases: Sealed ํด๋์ค๋ ํ์ ํด๋์ค์ ์๋ฅผ ์ ํํ๊ฑฐ๋, ๋ณด๋ค ๋์ ํด๋์ค ๊ณ์ธต์ ์ค๊ณ ๋ฐ ๋์์ ์ ์ดํ ์ ์๋๋ก ํ๋๋ฐ ์ ์ฉํฉ๋๋ค.
Java 21
Virtual Threads
์ด์ ์ค๋ ๋ ๋ชจ๋ธ์์ Java์ ์ค๋ ๋๋ OS(์ด์์ฒด์ ) ์ค๋ ๋์ ์ง์ ์ ์ผ๋ก ์ผ์นํ๊ธฐ ๋๋ฌธ์, OS ์ ์ฝ์ผ๋ก ์์ฑํ ์ ์๋ ์ค๋ ๋ ์์ ์ ํ์ด ์์ต๋๋ค. ์ ํต์ ์ธ ์ค๋ ๋ ๋ชจ๋ธ์์๋ ๊ณผ๋ํ ์ค๋ ๋ ์์ฑ์ผ๋ก ์ธํด OS์ ๋ถ๋ด์ ์ฃผ๊ณ , ํนํ ์๋ช ์ด ์งง์ ์ค๋ ๋์ ๊ฒฝ์ฐ ๋์ ๋น์ฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
Java 21์ ๊ฐ์ ์ค๋ ๋๋ฅผ ๋์ ํ์ฌ ๊ฐ์ ์ค๋ ๋์ OS ์ค๋ ๋ ๊ฐ์ ๋งคํ์ ์ ๊ณตํ๋ฏ๋ก, ์ด๋ก ์ ์ผ๋ก ๋ฌด์ ํ์ ๊ฐ์ ์ค๋ ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. ์ด ํ์ ์ ๊ธฐ์กด์ ์ค๋ ๋ ๋ชจ๋ธ์ ํ๊ณ๋ฅผ ํด๊ฒฐํ์ฌ ์ฒ๋ฆฌ๋์ด ๋ง์ ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์ ์ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ๋ ์๋ง์ ์ค๋ ๋๋ฅผ ์์ฑํ ์ ์๋๋ก ์ง์ํฉ๋๋ค. ๊ฐ์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ ๋ ์์ฑ์ ๋ํ ์ด์ ์ ์ ์ฝ์ด ์ ๊ฑฐ๋์ด ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์์ฒญ๋น ์ค๋ ๋ ์คํ์ผ(Thread-Per-Request)์ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์๋ OS/ํ๋ซํผ ์ค๋ ๋์ ๋น๊ตํ์ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์์ ๋น 50๋ง ๊ฐ์ ์ค๋ ๋๋ฅผ ์คํํ๊ธฐ ์ํด ExecutorService๋ฅผ ํ์ฉํจ์ผ๋ก์จ, JDK๋ ์ ํ๋ ์์ ์บ๋ฆฌ์ด ๋ฐ OS ์ค๋ ๋๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋์์ฑ ์ฝ๋๋ฅผ ์ฝ๊ฒ ์์ฑํ ์ ์๋๋ก ํฉ๋๋ค.
Sequenced Collections
๋ช ์๋ ์์๋ฅผ ๊ฐ์ง ์ปฌ๋ ์ ์ ๋ฒ์ฉ์ ์ธ ์ํผ ํ์ (supertype)์ ๋ถ์ฌ๋ก ์ธํด Java์ ์ปฌ๋ ์ ํ๋ ์์ํฌ ๋ด์์ ๋ฐ๋ณต์ ์ธ ์ด์์ ๋ถ๋ง์ด ๋ฐ์ํ์์ต๋๋ค. ๋ํ ์ฒซ ๋ฒ์งธ ์์์ ๋ง์ง๋ง ์์์ ์ ๊ทผํ๊ณ , ์ญ์์ผ๋ก ๋ฐ๋ณตํ๋ ์ผ๊ด์ ์ธ ๋ฉ์๋๊ฐ ์๋ค๋ ์ ๋ ์ง์์ ์ธ ๋จ์ ์ด์์ต๋๋ค.
์์๋ฅผ ์ ์งํ๋ List ์ธํฐํ์ด์ค๋ฅผ ๊ณ ๋ คํด ๋ณด์ธ์. ์ฒซ ๋ฒ์งธ ์์์ ์ ๊ทผํ๋ ๊ฒ์ list.get(0)์ผ๋ก ๊ฐ๋จํ์ง๋ง, ๋ง์ง๋ง ์์์ ์ ๊ทผํ๋ ค๋ฉด list.get(list.size() - 1)์ด ํ์ํฉ๋๋ค. ์ด๋ฌํ ๋ถ์ผ์น๋ ๊ฐ๋ฐ์๊ฐ ์ง๋ฉดํ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ๊ณ ์ฝ๋์ ์ ์ง ๊ด๋ฆฌ๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค.
๋น๋ก ์ด๋ฌํ ๋ถํธํจ์ Collection ์ธํฐํ์ด์ค์ ์๋ก ์ธ๊ธ๋์์ง๋ง, Map ์ธํฐํ์ด์ค์์๋ ๋ฐ์ํฉ๋๋ค.
์ด ์๋ก์ด ๊ธฐ๋ฅ์ ๊ธฐ์กด ์ปฌ๋ ์ ๊ณ์ธต์ ์ถ๊ฐ๋๋ ์์ฐจ์ ์ธ maps, sets, collections์ ์ํ ์ธ ๊ฐ์ง ์๋ก์ด ์ธํฐํ์ด์ค๋ฅผ ๋์ ํฉ๋๋ค.
SequencedCollection ์ธํฐํ์ด์ค๋ ์ฒ์๊ณผ ๋ง์ง๋ง ์์๋ฅผ ์กฐํํ ์ ์๋ ๊ธฐ๋ฅ ๋ฟ๋ง ์๋๋ผ ์ญ์์ ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ฌ ์ง์ํฉ๋๋ค. ๋ํ SequencedMap, SequencedSet ์ธํฐํ์ด์ค๋ ์์ต๋๋ค.
Sequenced Collections์ ๋์ ์ ์๋ฐ ์ปฌ๋ ์ ์ ์ฃผ๋ชฉํ ๋งํ ๋ฐ์ ์ ๋๋ค. ํน์ ์์๋ก ์ปฌ๋ ์ ์ ๊ด๋ฆฌํ๋ ํ์คํ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ํ ์ค๋ ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํจ์ผ๋ก์จ, Java๋ ๊ฐ๋ฐ์๊ฐ ๋ ๋์ ํจ์จ์ฑ๊ณผ ๋ช ํ์ฑ์ผ๋ก ์ด์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ์ด๋ฌํ ์๋ก์ด ์ธํฐํ์ด์ค๋ ๋ณด๋ค ํฌ๋ช ํ ํ๋ ์์ํฌ์ ์์ธก ๊ฐ๋ฅํ ๋์์ ํ๋ฆฝํ์ฌ, ์ฝ๋๋ฅผ ๋ณด๋ค ๊ฐ๋ ฅํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ์ฝ๋๋ก ์ด๋๋๋ค.
String Templates
JDK 21์ preview ๊ธฐ๋ฅ์ผ๋ก ๋์ ๋ String Templates๋ ์๋ฐ์์ ๋ฌธ์์ด ์กฐ์์ ์ ๋ขฐ์ฑ๊ณผ ์ฌ์ฉ์ฑ์ ํฅ์์ํค๋ ๊ฒ์ ๋ชฉํ๋ก ํฉ๋๋ค. ๋ฌธ์์ด๋ก ๋ ๋๋ง ํ ์ ์๋ ํ ํ๋ฆฟ ํํ์์ ์์ฑํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ด ๊ธฐ๋ฅ์ ์๋ํ์ง ์์ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์๋ ์ธ์ ์ ๊ณผ ๊ฐ์ ์ผ๋ฐ์ ์ธ ๋ฌธ์ ๋ฅผ ์๋ฐฉํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. String Templates๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ฌธ์์ด ํ ํ๋ฆฟ ๋ด์ ์์ ์์ฑํ๊ณ ์ํ๋ ์ถ๋ ฅ๋ฌผ์ ์ฝ๊ฒ ์์ฑํ ์ ์์ต๋๋ค.
Record Patterns
์๋ฐ 14์์ Record์ ๋์ ์ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ์ฝ๋ ์์ด ๋ฐ์ดํฐ ์ ์ก์๋ง ์ง์คํ๋ฉด์ ๋ฐ์ดํฐ ์ค์ฌ ํด๋์ค๋ฅผ ๊ฐ์ํํ๋ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ต๋๋ค. ์ด๋ ์ฝ๋๋ฅผ ๊ฐ์ํํ๊ณ ๊ฐ๋ ์ฑ์ ํฅ์์ํค๋ ์ค์ํ ์ง์ ์ด์์ต๋๋ค.
์ด์ Java 21์ ๋ฐ์ ์ผ๋ก ๋ ์ฝ๋ ํจํด๊ณผ ํ์ ํจํด์ ์ค์ฒฉํ์ฌ ๋ฐ์ดํฐ ์กฐ์์ ๋ํ ๋ณด๋ค ์ ์ธ์ ์ด๊ณ ๊ตฌ์ฑ ๊ฐ๋ฅํ ์ ๊ทผ ๋ฐฉ์์ ์ ๊ณตํ ์ ์๊ฒ ๋์์ต๋๋ค. ์ฆ, ๊ฐ๋ฐ์๊ฐ ๋ณด๋ค ์ง๊ด์ ์ด๊ณ ๊ฐ๊ฒฐํ ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ณ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
Java 21 ์ด์ ์๋, ๋ ์ฝ๋์์ ๊ฐ๋ณ ๊ฐ์ ์ ๊ทผํ๋ ค๋ฉด ์ ์ฒด ๋ ์ฝ๋๋ฅผ ํด์ฒดํด์ผ ํ๊ณ , ์ด๋ ์ฅํฉํ ์ฝ๋๋ก ์ด์ด์ง ์ ์์์ต๋๋ค. ๊ทธ๋ฌ๋, ๋ ์ฝ๋ ํจํด๊ณผ ํ์ ํจํด์ด ๋์ ๋๋ฉด์ ์ด๋ฌํ ๊ณผ์ ์ ํจ์ฌ ๋ ๊ฐ๋จํ๊ณ ํจ์จ์ ์ผ๋ก ๋ฐ๋์์ต๋๋ค.
์๋ ์์ ๋ฅผ ํตํด ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
Java 21 ์ด์ ์ printCityWithoutPatternMatching() ๋ฉ์๋์์๋ ๊ฐ์ฒด๊ฐ Address์ ์ธ์คํด์ค์ธ์ง ๋จผ์ ํ์ธํ ๋ค์ ์ ๊ทผ์ ๋ฉ์๋๋ฅผ ํตํด city๋ฅผ ๊ฒ์ํด์ผ ํ์ต๋๋ค. ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ ์๋์ ํ์ง๋ง ์ฅํฉํ๊ณ ์ง๊ด์ ์ด์ง ์์ ์ ์์ต๋๋ค.
๋์กฐ์ ์ผ๋ก, printCityWithPatternMatching() ๋ฉ์๋๋ Java 21์ ๋์ ๋ ํจํด ๋งค์นญ์ ๊ฐ๋ ฅํจ์ ๋ณด์ฌ์ค๋๋ค. ์ฌ๊ธฐ์ check๋ฅผ ์ํ Instanceof๋ ์กฐ๊ฑด๋ฌธ์์ ์ง์ ํจํด ๋งค์นญ๊ณผ ๊ฒฐํฉ๋ฉ๋๋ค. ๋ฐ๋ผ์, ๋ช ์์ ์ธ ์ ๊ทผ์ ๋ฉ์๋ ์์ด๋ ๊ฐ์ฒด์์ ์ง์ city๋ฅผ ์ถ์ถํ๋ ๋ ๊นจ๋ํ๊ณ ๊ฐ๊ฒฐํ ์ฝ๋๊ฐ ์์ฑ๋ฉ๋๋ค.
์ ๋ฐ์ ์ผ๋ก, ํนํ ๋ ์ฝ๋ ํจํด๊ณผ ํ์ ํจํด์ ๋์ ์ผ๋ก ์ธํด Java 21์ ๋ฐ์ ์ ๋ฐ์ดํฐ ์กฐ์์ ๋์ฑ ๋จ์ํํ๊ณ ๋ณด๋ค ์ฐ์ํ๊ณ , ๊ฐ๋ ์ฑ์ด ์ข์ ์ฝ๋์ ๊ธฐ์ฌํฉ๋๋ค. ์ด๋ ๊ฐ๋ฐ์๊ฐ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ ์ฝ๋์ ๊ฐํ์ง ์๊ณ ํ๋ก๊ทธ๋จ์ ๋ก์ง์ ์ง์คํ ์ ์๋๋ก ๋์์ค๋๋ค.
Conclusion
์์ฝํ์๋ฉด, Java 8๋ถํฐ 21๊น์ง์ ๋ณํ ๊ณผ์ ๋ค์ ์ด ์ธ์ด๊ฐ ์ผ๋ง๋ ๋ฐ์ ํด ์๋์ง ์ ์ ์์์ต๋๋ค. ๋๋ค ํํ์, ์๋ก์ด Time API, ์คํธ๋ฆผ API, Sealed class, records ๋ฑ ๋ฉ์ง ๊ธฐ๋ฅ๋ค์ ๋ง์ด ๋ณผ ์ ์์์ต๋๋ค. ์ด๋ฌํ ๊ฐ์ ์ฌํญ์ ํตํด Java๋ ์ฝ๋ฉ์์ ์ต์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์์ต๋๋ค. ์ด์ ์ด๋ฌํ ์๋ก์ด ์ง์์ผ๋ก ๋ฌด์ฅํ ๋น์ ์ ์์ ์๊ฒ ์ฝ๋ฉ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. Java๋ ํญ์ ๋ณํํ๊ณ ์ฑ์ฅํ๊ธฐ ๋๋ฌธ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ๋ผ๊ฐ๋ค๋ฉด, ๋ ๋ง์ ์ผ์ ํ ์ ์๋ค๋ ๊ฒ์ ๊ธฐ์ตํ์ธ์. ์ฝ๋ฉ์ ์ฒ์ ํ๋ ํ๋ก์ด๋ , Java๋ ๋ง์ ๊ฒ๋ค์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ์์ด๋์ด๋ Java ํ๋ก๊ทธ๋๋ฐ์ ์ธ๊ณ๋ก ๋ฐ์ด๋ค๋๋ก ์ฌ๋ฌ๋ถ์ ์๋ดํฉ๋๋ค. Happy coding!
์ ๋ฆฌ
ํ์คํ Java 8์ ๊ต์ฅํ ๋ง์ ๋ณํ๊ฐ ์์๊ณ , ๊ต์ฅํ ๋ง์ด ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํ์ง๋ง ๋ง์ด ์ฌ์ฉํ๋ ๊ธฐ๋ฅ ์ค ํ๋์ธ Optional์ด ํฌ์คํ ์ ์๋ ๊ฑด ์กฐ๊ธ ์์ฝ๋ค์.
๊ทธ ์ธ Java 9์ Try-with-resources, Java 10์ var ํค์๋, Java 13์ TextBlocks, Java 16์ Records๋ ๊ต์ฅํ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๊ณ ์๋ ๊ธฐ๋ฅ๋ค์ ๋๋ค.
Java 21์ ๋์ ๋ Sequenced Collections, String Templates๋ ๊ต์ฅํ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ํน์ message๋ฅผ ๋ง๋ค ๋ String.format()์ ๋ง์ด ์ฌ์ฉํด์๋๋ฐ String Templates๋ฅผ ์ฌ์ฉํ๋ฉด ๊ตณ์ด format์ ์ฌ์ฉํ ํ์๊ฐ ์์ด๋ณด์ด๊ณ , ๋ค๋ฅธ ์ธ์ด์๋ ์กด์ฌํ๋ ๊ธฐ๋ฅ์ธ๋ฐ Java์๋ ๊ฝค๋ ๋ฆ๊ฒ(?) ๋์ ์ด ๋ ๊ฒ ๊ฐ๋ค์.. ์์ผ๋ก๋ ๊ฐ๋ฅํ๋ฉด Java 21 ๋ฒ์ ์ ์ฌ์ฉํด์ ๊ฐ๋ฐ์ ํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
'Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Java ํด๋์ค ์ค๊ณ ์์ ํ๊ฒ ์ ํ๊ธฐ (feat. ์์ง๋) (0) | 2023.12.20 |
---|---|
Java ํด๋์ค ์ค๊ณ ์์ ํ๊ฒ ์ ํ๊ธฐ (1) | 2023.12.16 |
Java Map - compute(), computeIfAbsent(), computeIfPresent() (0) | 2023.03.13 |
EasyRandom - Java beans๋ฅผ ๋๋ค์ผ๋ก ์์ฑํด ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (0) | 2023.01.27 |
[Java DeepDive] - Map(HashMap) 1. ๊ฐ๋ , ํ๋, ์์ฑ์ (2) | 2022.11.27 |
๋๊ธ