Community

๐Ÿ•Š๏ธ Java11๋ถ€ํ„ฐ 17๊นŒ์ง€ ๊ธฐ๋Šฅ์„ ์•Œ์•„๋ณด์ž

์ƒˆ๋กœ์šด ๋ฒ„์ „๋งˆ๋‹ค, ์ž๋ฐ”๋Š” ์ฝ”๋“œ๋ฅผ ๋”์šฑ ์‰ฝ๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„์ „ 11๋ถ€ํ„ฐ 17๊นŒ์ง€ ์ž๋ฐ”๋Š” ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ๊ธฐ๋Šฅ์„ ๋„์ž…ํ•˜์˜€๊ณ , ์ด ๊ธ€์—์„œ ๊ฐ๊ฐ์˜ ๊ธฐ๋Šฅ๋“ค์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ String class์˜ ์ƒˆ๋กœ์šด ๋ฉ”์„œ๋“œ (Java SE 11) - isBlank(): string์ด ๋น„์–ด์žˆ๊ฑฐ๋‚˜ ๊ณต๋ฐฑ๋งŒ์„ ํฌํ•จํ•˜๋ฉด true, ์•„๋‹ˆ๋ฉด false. - strip(): ์„ ํ–‰๊ณผ ํ›„ํ–‰์—์„œ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ - stripLeading(): ์„ ํ–‰์˜ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ - stripTrailing(): ํ›„ํ–‰์˜ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•œ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ - repeat(int count): ๊ธฐ์กด ๋ฌธ์ž์—ด์„ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ตฌ์„ฑํ•œ ์ƒˆ ๋ฌธ์ž์—ด ๋ฐ˜ํ™˜ ๐Ÿ“Œ ์Šค์œ„์น˜ ๋ฌธ (Java SE 14) ๋ณด๋‹ค ๊ฐ„๊ฒฐํ•œ ์Šค์œ„์น˜ ๋ฌธ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด์—๋Š” ์ƒ์ˆ˜ ๋˜๋Š” enum ๊ฐ’๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉฐ, ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด break๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ๋Š”, ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, yield ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ``` private static void newStyleSwitchExpression(int month) { String season; switch (month) { case 12, 1, 2 -> season = "Winter"; case 3, 4, 5 -> season = "Spring"; case 6, 7, 8 -> season = "Summer"; case 9, 10, 11 -> season = "Autumn"; default -> season = "Invalid Month"; } System.out.println("April is in the " + season + "."); } ``` ๐Ÿ“Œ ํ…์ŠคํŠธ ๋ธ”๋ก (Java SE 15) ํ…์ŠคํŠธ ๋ธ”๋ก์€ ํŠน์ˆ˜ ๋ฌธ์ž๋ฅผ escape๋‚˜ concatํ•˜์ง€ ์•Š๊ณ ๋„ ์—ฌ๋Ÿฌ ์ค„์˜ ๋ฌธ์ž์—ด๊ณผ ํ…์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฌธ์ž์—ด์„ ํฐ๋”ฐ์˜ดํ‘œ("")๋กœ ๋ฌถ์–ด์„œ ํ…์ŠคํŠธ ๋ธ”๋ก์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ``` private static String getResultAsJson() { return """ { "id": 1235, "title": "Example Product", "description": "A product which is nothing like apple", "price": 549 } """; } ``` ๐Ÿ“Œ instance of ํŒจํ„ด ๋งค์นญ (Java SE 16) ํŒจํ„ด ๋งค์นญ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ํƒ€์ž…์— ๋”ฐ๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ``` public static void processObject(Object obj) { if (obj instanceof String str) { System.out.println("Input is a string: " + str); } else if (obj instanceof Integer i) { System.out.println("Input is an integer: " + i); } else { System.out.println("Input is of unknown type"); } } ``` ๐Ÿ“Œ Records (Java SE 16) ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์ˆœํ•œ ํด๋ž˜์Šค๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์„ ์–ธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•˜๋Š” ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. Java์—์„œ ๋ ˆ์ฝ”๋“œ๋ฅผ ์„ ์–ธํ•˜๋ฉด ์ƒ์„ฑ์ž, equals(), hashCode(), toString()๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ์˜ ๊ธฐ๋ณธ ๊ตฌํ˜„์„ ์ œ๊ณตํ•˜๋Š” ํด๋ž˜์Šค๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๐Ÿ“Œ Sealed classes (Java SE 17) ํด๋ž˜์Šค ๋˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ sealed๋กœ ์„ ์–ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜์œ„ ํด๋ž˜์Šค ๋˜๋Š” ๊ตฌํ˜„์— ๋Œ€ํ•œ ์ƒ์† ๊ณ„์ธต์„ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. permit ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ—ˆ์šฉ๋œ ํ•˜์œ„ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ``` public sealed class Shape permits Circle, Rectangle { // common properties and methods of shapes } ```

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค