{"id":344381,"date":"2023-04-21T04:06:56","date_gmt":"2023-04-21T03:06:56","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=idea&#038;p=344381"},"modified":"2023-04-21T04:07:01","modified_gmt":"2023-04-21T03:07:01","slug":"java-20-and-intellij-idea","status":"publish","type":"idea","link":"https:\/\/blog.jetbrains.com\/ko\/idea\/2023\/04\/java-20-and-intellij-idea\/","title":{"rendered":"Java 20\uacfc IntelliJ IDEA"},"content":{"rendered":"<p>Java 10 \uc774\ud6c4 \ud55c\ub3d9\uc548 \uc0c8\ub85c\uc6b4 Java \ub9b4\ub9ac\uc2a4\uc5d0 \ub300\ud55c \uae00\uc744 \uc4f0\uba74\uc11c \uac1c\ubc1c\uc790\ub4e4\uc774 6\uac1c\uc6d4\ub9c8\ub2e4 \uc0c8\ub85c\uc6b4 Java \uae30\ub2a5\uc744 \ubc30\uc6b0\uace0 \uc0ac\uc6a9\ud558\ub294 \ubaa8\uc2b5\uc5d0\uc11c \uc990\uac70\uc6c0\uc744 \uc5bb\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc804\uc758 \uba87\uba87 \ub9b4\ub9ac\uc2a4\uc640 \ube44\uad50\ud560 \ub54c Java 20\uc5d0\ub294 \ube44\uad50\uc801 \uc801\uc740 \uae30\ub2a5\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/openjdk.org\/jeps\/429\" target=\"_blank\" rel=\"noopener\">\ubc94\uc704 \uc9c0\uc815\ub41c \uac12<\/a>\uc744 <a href=\"https:\/\/openjdk.org\/jeps\/11\" target=\"_blank\" rel=\"noopener\">\uc778\ud050\ubca0\uc774\ud305 API<\/a>\ub85c \ub3c4\uc785\ud558\uc5ec \uc2a4\ub808\ub4dc \ub0b4\ubd80 \ubc0f \uc2a4\ub808\ub4dc \uac04\uc5d0 \ubcc0\uacbd \ubd88\uac00\ub2a5\ud55c \ub370\uc774\ud130\ub97c \uacf5\uc720\ud560 \uc218 \uc788\ub3c4\ub85d \ud568\uc73c\ub85c\uc368 \uac00\uc0c1 \uc2a4\ub808\ub4dc\ub97c \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \ub450 \ubc88\uc9f8 \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc5d0\uc11c <a href=\"https:\/\/openjdk.org\/jeps\/432\" target=\"_blank\" rel=\"noopener\">\ub808\ucf54\ub4dc \ud328\ud134<\/a>\uc740 \uc81c\ub124\ub9ad \ub808\ucf54\ub4dc \ud328\ud134\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc744 \uac1c\uc120\ud558\uace0 \ud5a5\uc0c1\ub41c for \ubb38\uc5d0\uc11c \ub808\ucf54\ub4dc \ud328\ud134\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uac8c \ud574\uc90d\ub2c8\ub2e4. \ub124 \ubc88\uc9f8 \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc5d0\uc11c <a href=\"https:\/\/openjdk.org\/jeps\/433\" target=\"_blank\" rel=\"noopener\">switch \ud328\ud134 \uc77c\uce58<\/a>\ub294 \ud3ec\uad04\uc801\uc778 switch, \ub2e8\uc21c\ud654\ub41c switch \ub77c\ubca8 \ubc0f \uc81c\ub124\ub9ad \ub808\ucf54\ub4dc \ud328\ud134\uc5d0 \ub300\ud55c \ucd94\ub860 \ud0c0\uc785 \uc778\uc218\ub85c \uc791\uc5c5\ud560 \ub54c \uc0ac\uc6a9 \ud3b8\ub9ac\uc131\uc744 \uac1c\uc120\ud569\ub2c8\ub2e4.<\/p>\n<p>Java 20\uc758 \ub450 \ubc88\uc9f8 \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc5d0\uc11c <a href=\"https:\/\/openjdk.org\/jeps\/434\" target=\"_blank\" rel=\"noopener\">Foreign Function and Memory API<\/a>\ub294 Java \ucf54\ub4dc\uac00 JVM \uc678\ubd80\uc5d0\uc11c \ucf54\ub4dc \ubc0f \ub370\uc774\ud130\uc640 \ud1b5\uc2e0\ud560 \uc218 \uc788\ub3c4\ub85d \uae30\ub2a5\uc744 \uc9c0\uc18d\uc801\uc73c\ub85c \uac1c\uc120\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/openjdk.org\/jeps\/437\" target=\"_blank\" rel=\"noopener\">\uad6c\uc870\ud654\ub41c \ub3d9\uc2dc\uc131<\/a>\uc744 \uae30\ubc18\uc73c\ub85c \uba40\ud2f0\uc2a4\ub808\ub4dc \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc81c\uc791 \ubc29\uc2dd\uc744 \ud601\uc2e0\uc801\uc73c\ub85c \ubcc0\ud654\uc2dc\ud0ac \uacbd\ub7c9 \uc2a4\ub808\ub4dc\uc778 <a href=\"https:\/\/openjdk.org\/jeps\/436\" target=\"_blank\" rel=\"noopener\">\uac00\uc0c1 \uc2a4\ub808\ub4dc<\/a>\uac00 \ucd5c\uc2e0 Java \ub9b4\ub9ac\uc2a4\uc758 \ub610 \ub2e4\ub978 \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc73c\ub85c \ub098\uc654\uc2b5\ub2c8\ub2e4. \ud604\uc7ac \ub2e4\uc12f \ubc88\uc9f8 \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc778 <a href=\"https:\/\/openjdk.org\/jeps\/438\" target=\"_blank\" rel=\"noopener\">Vector API<\/a>\ub294 \ucf54\ub4dc\uc5d0\uc11c \ubca1\ud130 \uacc4\uc0b0 \uc791\uc5c5\uc744 \ub3c4\uc640\uc90d\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ube14\ub85c\uadf8 \uae00\uc5d0\uc11c\ub294 switch \ub808\ucf54\ub4dc \ud328\ud134 \ubc0f \ud328\ud134 \uc77c\uce58\uc640 \uac19\uc740 \uc5b8\uc5b4 \uae30\ub2a5\uc5d0 \ub300\ud55c IntelliJ IDEA \uc9c0\uc6d0, \ud2b9\ud788 \uc81c\ub124\ub9ad \ub808\ucf54\ub4dc \ud328\ud134\uc5d0 \ub300\ud55c \ud0c0\uc785 \ucd94\ub860\uc744 \ud1b5\ud55c \ud5a5\uc0c1\ub41c \uc9c0\uc6d0, \ud3ec\uad04\uc801\uc778 switch \ubb38\uacfc \ud45c\ud604\uc2dd, \ud5a5\uc0c1\ub41c <code>for<\/code> \ud5e4\ub354\uc5d0\uc11c \ub808\ucf54\ub4dc \ud328\ud134\uacfc \uac19\uc740 \uac00\uc7a5 \ud765\ubbf8\ub85c\uc6b4 \ubcc0\uacbd \uc0ac\ud56d\uc744 \ub2e4\ub8e8\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub7fc \uc2dc\uc791\ud574\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/04\/Blog_Featured_image_1280x600-17.png\" alt=\"\" \/><\/figure>\n<h2>IntelliJ IDEA \uad6c\uc131<\/h2>\n<p>Java 20\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc740 IntelliJ IDEA 2023.1\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud5a5\ud6c4 IntelliJ IDEA \ub9b4\ub9ac\uc2a4\uc5d0\uc11c \ub354 \ub9ce\uc740 \uc9c0\uc6d0\uc774 \uc81c\uacf5\ub420 \uc608\uc815\uc785\ub2c8\ub2e4.<\/p>\n<p>Java 20\uc758 switch \ub808\ucf54\ub4dc \ud328\ud134 \ubc0f \ud328\ud134 \uc77c\uce58\uc640 \uac19\uc740 \uc0c8\ub85c\uc6b4 \uc5b8\uc5b4 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub824\uba74 <i>ProjectSettings(\ud504\ub85c\uc81d\ud2b8 \uc124\uc815) | Project(\ud504\ub85c\uc81d\ud2b8)<\/i>\ub85c \uc774\ub3d9\ud558\uc5ec Project SDK\ub97c 20\uc73c\ub85c \uc124\uc815\ud558\uace0 \ud504\ub85c\uc81d\ud2b8 \uc5b8\uc5b4 \uc218\uc900\uc744 <i>20 (Preview) \u2013 Record patterns (second preview), Pattern Matching for switch (fourth preview)(20(\ud14c\uc2a4\ud2b8 \ubc84\uc804) &#8211; \ub808\ucf54\ub4dc \ud328\ud134(\ub450 \ubc88\uc9f8 \ud14c\uc2a4\ud2b8 \ubc84\uc804), switch \ud328\ud134 \uc77c\uce58(\ub124 \ubc88\uc9f8 \ud14c\uc2a4\ud2b8 \ubc84\uc804))<\/i>\ub85c \uc124\uc815\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/03\/1-1.png\" alt=\"\" \/><\/figure>\n<p>\uc774\ubbf8 \uc2dc\uc2a4\ud15c\uc5d0 \ub2e4\uc6b4\ub85c\ub4dc\ud55c \uc784\uc758 \ubc84\uc804\uc758 JDK\ub97c \uc0ac\uc6a9\ud558\uac70\ub098 <i>Edit(\ud3b8\uc9d1)<\/i>\uc744 \ud074\ub9ad\ud55c \ub2e4\uc74c <i>Add SDK &gt;(SDK \ucd94\uac00)<\/i>\ub97c \uc120\ud0dd\ud558\uace0 <i>Download JDK(JDK \ub2e4\uc6b4\ub85c\ub4dc)\u2026<\/i>\ub97c \uc120\ud0dd\ud558\uc5ec \ub2e4\ub978 \ubc84\uc804\uc744 \ub2e4\uc6b4\ub85c\ub4dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc6b4\ub85c\ub4dc\ud560 JDK \ubc84\uc804\uc740 \uacf5\uae09\uc5c5\uccb4 \ubaa9\ub85d\uc5d0\uc11c \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Modules(\ubaa8\ub4c8) \ud0ed\uc5d0\uc11c \ubaa8\ub4c8\uc5d0 \ub300\ud574 \ub3d9\uc77c\ud55c \uc5b8\uc5b4 \uc218\uc900 \uc989, <i>20 (Preview) \u2013 Record patterns (second preview), Pattern Matching for switch (fourth preview)(20(\ud14c\uc2a4\ud2b8 \ubc84\uc804) &#8211; \ub808\ucf54\ub4dc \ud328\ud134(\ub450 \ubc88\uc9f8 \ud14c\uc2a4\ud2b8 \ubc84\uc804), switch \ud328\ud134 \uc77c\uce58(\ub124 \ubc88\uc9f8 \ud14c\uc2a4\ud2b8 \ubc84\uc804)<\/i>\uac00 \uc120\ud0dd\ub418\uc5c8\ub294\uc9c0 \ud655\uc778\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/03\/2-1.png\" alt=\"\" \/><\/figure>\n<p>\uc774\ub807\uac8c \uc120\ud0dd\ud558\uba74 IntelliJ IDEA\uac00 \ub2e4\uc74c \ubc84\uc804\uc5d0\uc11c Java \ud14c\uc2a4\ud2b8 \ubc84\uc804 \uc5b8\uc5b4 \uae30\ub2a5\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc744 \uc911\ub2e8\ud560 \uc218 \uc788\uc74c\uc744 \uc54c\ub9ac\ub294 \ud31d\uc5c5\uc774 \ud45c\uc2dc\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud14c\uc2a4\ud2b8 \ubc84\uc804 \uae30\ub2a5\uc740 (\uc544\uc9c1) \uc601\uad6c\uc801\uc774\uc9c0 \uc54a\uc73c\ubbc0\ub85c \ud5a5\ud6c4 Java \ub9b4\ub9ac\uc2a4\uc5d0\uc11c \ubcc0\uacbd(\ub610\ub294 \uc0ad\uc81c)\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br \/>Java 19\uc5d0 \ub3c4\uc785\ub41c \ub808\ucf54\ub4dc \ud328\ud134\uc5d0 \ub300\ud574 \uac04\ub2e8\ud788 \ub418\uc9da\uc5b4\ubcf4\ub294 \uac83\uc73c\ub85c \uc2dc\uc791\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\ub808\ucf54\ub4dc \ud328\ud134<\/h2>\n<p>\ub808\ucf54\ub4dc \uc778\uc2a4\ud134\uc2a4\ub85c \uc218\ud589\ud558\ub824\ub294 \ubd84\uba85\ud55c \uc791\uc5c5\uc740 \ud574\ub2f9 \uad6c\uc131 \uc694\uc18c\uc758 \uac12\uc744 \ucd94\ucd9c\ud558\uc5ec \uc560\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c \uadf8 \uac12\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \ub808\ucf54\ub4dc \ud328\ud134\uc774 \ubc14\ub85c \uadf8\ub7ec\ud55c \uc5ed\ud560\uc744 \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc6b0\uc120 \ub808\ucf54\ub4dc \ud328\ud134\uc774 \ubb34\uc5c7\uc774\uace0 \uc65c \ud544\uc694\ud55c\uc9c0 \uac04\ub2e8\ud788 \ubcf5\uc2b5\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>\ub808\ucf54\ub4dc \ud328\ud134 \ube60\ub978 \uc694\uc57d<\/h3>\n<p>\ub808\ucf54\ub4dc\ub294 \ub370\uc774\ud130\ub97c \ud22c\uba85\ud558\uac8c \uc804\ub2ec\ud560 \uc218 \uc788\ub294 \uac04\ub2e8\ud558\uace0 \uac04\uacb0\ud55c \ubc29\ubc95\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574 \uc5ec\ub7ec \uac12(\uad6c\uc131 \uc694\uc18c\ub77c\uace0\ub3c4 \ud568)\uc744 \uc9d1\uacc4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud55c\ud3b8, \ub808\ucf54\ub4dc \ud328\ud134\uc740 \ub808\ucf54\ub4dc \uc778\uc2a4\ud134\uc2a4\ub97c \uad6c\uc131 \uc694\uc18c\ub85c \ubd84\ud574\ud558\uc5ec \uad6c\uc131 \uc694\uc18c \uac12\uc744 \uc27d\uac8c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \ud574\uc90d\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c \ub808\ucf54\ub4dc\ub97c \uc608\ub85c \ub4e4\uc5b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">record Name       (String fName, String lName) { }\nrecord PhoneNumber(String areaCode, String number) { }\nrecord Country    (String countryCode, String countryName) { }\nrecord Passenger  (Name name,\n                  PhoneNumber phoneNumber,\n                  Country from,\n                  Country destination) { }<\/pre>\n<p>\ub2e4\uc74c \ucf54\ub4dc\ub294 \ub808\ucf54\ub4dc \ud328\ud134\uc744 <code>instanceof<\/code> \uc5f0\uc0b0\uc790\uc640 \ud568\uaed8 \uc0ac\uc6a9\ud558\uace0 \uac04\uacb0\ud558\uace0 \uba85\ud655\ud55c \ucf54\ub4dc\ub97c \uc815\uc758\ud558\uc5ec \ub808\ucf54\ub4dc \uc778\uc2a4\ud134\uc2a4\uc758 \uad6c\uc131 \uc694\uc18c\ub97c \ud328\ud134 \ubcc0\uc218 \uc138\ud2b8\ub85c \ubd84\ud574\ud558\ub294 \ubc29\ubc95\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">boolean checkFirstNameAndCountryCodeAgain (Object obj) {\n  if (obj instanceof Passenger(Name (String fName, var lName),\n                               var phoneNumber,\n                               Country from,\n                               Country (var countryCode, String countryName) )) {\n      if (fName != null &amp;&amp; countryCode != null) {\n          return fName.startsWith(\"Simo\") &amp;&amp; countryCode.equals(\"PRG\");\n      }\n  }\n  return false;\n}<\/pre>\n<p>\ub808\ucf54\ub4dc \ud328\ud134\uc744 \ucc98\uc74c \uc811\ud55c\ub2e4\uba74 \ub808\ucf54\ub4dc \ud328\ud134\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \ub2e4\ub8ec <a href=\"https:\/\/blog.jetbrains.com\/idea\/2022\/11\/java-19-and-intellij-idea\/\">Java 19\uc640 IntelliJ IDEA<\/a>\ub77c\ub294 \ube14\ub85c\uadf8 \uae00\uc744 \ud655\uc778\ud574 \ubcf4\uc138\uc694. \ub808\ucf54\ub4dc \ud328\ud134\uc774 \ubb34\uc5c7\uc778\uc9c0, \uadf8\ub9ac\uace0 \uc774\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub294 \uc774\uc720\uc640 \ubc29\ubc95\uc774 \uc18c\uac1c\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae00\uc5d0\uc11c\ub294 Java 19\uc5d0\uc11c Java 20\uc73c\ub85c \ub118\uc5b4\uc624\uba74\uc11c \ub808\ucf54\ub4dc \ud328\ud134\uc758 \ub2ec\ub77c\uc9c4 \uc810\uc744 \ub2e4\ub8f0 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>Java 20\uc5d0\uc11c\ub294 Java 19\uc5d0 \ucc98\uc74c \ucd94\uac00\ub418\uc5c8\ub358 <a href=\"https:\/\/blog.jetbrains.com\/idea\/2022\/11\/java-19-and-intellij-idea\/#NamedRecordPattern\">\uba85\uba85\ub41c \ub808\ucf54\ub4dc \ud328\ud134<\/a>\uc774 \ub354 \uc774\uc0c1 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. Java 20\uc5d0\uc11c\ub294 \ub610\ud55c \uc81c\ub124\ub9ad \ub808\ucf54\ub4dc\uc758 \ud0c0\uc785 \uc778\uc218 \ucd94\ub860\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc774 \uac1c\uc120\ub418\uc5c8\uace0, \ud5a5\uc0c1\ub41c <code>for<\/code> \ub8e8\ud504\uc758 \ud5e4\ub354\uc5d0\uc11c \ub808\ucf54\ub4dc \ud328\ud134\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>\ub808\ucf54\ub4dc \uad6c\uc131 \uc694\uc18c\uc758 \ud0c0\uc785 \ucd94\ub860<\/h3>\n<p>Java 19\ub294 \ub808\ucf54\ub4dc \uad6c\uc131 \uc694\uc18c\uc758 \ucd94\ub860\uc744 \uc9c0\uc6d0\ud588\uc2b5\ub2c8\ub2e4. \uc989, \ub808\ucf54\ub4dc \uad6c\uc131 \uc694\uc18c\uc758 \uba85\uc2dc\uc801 \ud0c0\uc785\uc744 \uc0ac\uc6a9\ud558\ub294 \ub300\uc2e0 <code>var<\/code>\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \uc774\uc804 \uc139\uc158\uc758 \ub808\ucf54\ub4dc \ud328\ud134\uc5d0 \ub300\ud55c \uc608\ub97c \ub2e4\uc2dc \uc0b4\ud3b4\ubcf4\uace0 <code>var<\/code>\uc758 \uc0ac\uc6a9\ubc95\uc744 \ucc38\uace0\ud558\uc138\uc694.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">boolean checkFirstNameAndCountryCodeAgain (Object obj) {\n  if (obj instanceof Passenger(Name (String fName, var lName),\n                               var phoneNumber,\n                               Country from,\n                               Country (var countryCode, String countryName) )) {\n      if (fName != null &amp;&amp; countryCode != null) {\n          return fName.startsWith(\"Simo\") &amp;&amp; countryCode.equals(\"PRG\");\n      }\n  }\n  return false;\n}<\/pre>\n<p><code>var<\/code>\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc815\uc758\ub41c \ubaa8\ub4e0 \uc9c0\uc5ed \ubcc0\uc218\uc758 \uacbd\uc6b0\uc640 \ub9c8\ucc2c\uac00\uc9c0\ub85c, IntelliJ IDEA\ub294 \uc608\uc57d \ud0a4\uc6cc\ub4dc <code>var<\/code>\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc815\uc758\ub41c \ubcc0\uc218\uc758 \uba85\uc2dc\uc801 \ud0c0\uc785\uc744 \ud45c\uc2dc\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image alignnone wp-image-16062\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/11\/using-var.gif\" alt=\"\" \/><\/figure>\n<h3>\uc81c\ub124\ub9ad \ub808\ucf54\ub4dc \ud328\ud134<\/h3>\n<p>Java 20\uc740 \uc81c\ub124\ub9ad \ub808\ucf54\ub4dc \ud328\ud134\uc758 \ud0c0\uc785 \uc778\uc218 \ucd94\ub860\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc774\ud574\ud558\uae30 \uc27d\uac8c \uce5c\uad6c\uc5d0\uac8c \ubcf4\ub0b4\uace0 \uc2f6\uc740 \uc190\ubaa9\uc2dc\uacc4\ub098 \ucc45 \uac19\uc740 \uc120\ubb3c\uc758 \uc608\ub97c \ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc81c\ub124\ub9ad \ud074\ub798\uc2a4\uac00 \uc544\ub2cc <code>Book<\/code>\uacfc <code>WristWatch<\/code> \ubc0f \uc81c\ub124\ub9ad \ub808\ucf54\ub4dc\uc778 <code>Gift<\/code>\uc5d0 \ub300\ud574 \ub2e4\uc74c\uacfc \uac19\uc774 \uc815\uc758\ud55c\ub2e4\uace0 \uac00\uc815\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">class Book {...}\nclass WristWatch {...}\nrecord Gift&lt;T&gt;(T t) {}<\/pre>\n<p>\uce5c\uad6c\uac00 \uc120\ubb3c\uc744 \ubc1b\uace0 \ud3ec\uc7a5\uc744 \ud480\ub824\uace0 \ud558\uba74 \uc5b4\ub5bb\uac8c \ub420\uae4c\uc694? \uce5c\uad6c\uac00 \uc544\ub798\uc5d0 \uc815\uc758\ub41c \uac83\ucc98\ub7fc unwrap \uba54\uc11c\ub4dc\ub97c \ud638\ucd9c\ud55c\ub2e4\uace0 \uac00\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \ucf54\ub4dc\uc5d0\uc11c <code>unwrap<\/code> \uba54\uc11c\ub4dc\ub294 \ub808\ucf54\ub4dc \ud328\ud134 <code>Gift&lt;wristwatch&gt;(var watch)<\/code>\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4. \uc774 \ud328\ud134\uc740 \ub808\ucf54\ub4dc \uc774\ub984\uc774 <code>Gift<\/code>\uc778 \uc81c\ub124\ub9ad \ud0c0\uc785 <code>WristWatch<\/code>\ub97c \uc774\ubbf8 \uc9c0\uc815\ud588\uae30 \ub54c\ubb38\uc5d0 \ud328\ud134 \ubcc0\uc218 <code>watch<\/code>\ub294 <code>WristWatch<\/code> \ud0c0\uc785\uc73c\ub85c \ucd94\ub860\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">void unwrap(Gift&lt;wristwatch&gt; obj) {\n   if (obj instanceof Gift&lt;wristwatch&gt; (var watch)) {\n       watch.setAlarm(LocalTime.of(10, 25));\n   }\n}<\/pre>\n<p>\ub2e4\uc74c \uc608\uc2dc\ub294 Java 19\uc5d0\uc11c \uc791\ub3d9\ud558\uc9c0 \uc54a\uc558\uc9c0\ub9cc Java 20\uc5d0\uc11c\ub294 \ubb38\uc81c \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">void unwrapAndRevealSurprise(Gift&lt;WristWatch&gt; obj) {\n    if (obj instanceof Gift&lt;WristWatch&gt; (var watch)) {\n        System.out.println(watch);\n    }\n}\n\nvoid unwrapAndUseGift(Gift&lt;WristWatch&gt; obj) {\n    if (obj instanceof Gift(var gift)) {\n        gift.setAlarmTime(LocalTime.now());\n    }\n}\n\nvoid birthdayGift(Gift&lt;DiamondStudded&lt;WristWatch&gt;&gt; gift) {\n    if (gift instanceof Gift&lt;DiamondStudded&lt;WristWatch&gt;&gt;(DiamondStudded(var personalizedGift))) {\n        System.out.println(personalizedGift);\n    }\n}\n\nvoid performanceBonus(Gift&lt;DiamondStudded&lt;WristWatch&gt;&gt; personalizedGift) {\n    if (personalizedGift instanceof Gift(DiamondStudded(var actualGift))) {\n        System.out.println(\"Wrist watch\" + actualGift);\n    }\n}<\/pre>\n<p>\ub2e4\uc74c \uc139\uc158\uc5d0\uc11c\ub294 \uc774\ub7ec\ud55c \ubcc0\ud654\ub85c \uc778\ud574 \uc804\uccb4 switch \ubb38\uc758 \uc791\ub3d9\uc774 \uc5b4\ub5bb\uac8c \ub2ec\ub77c\uc9c0\ub294\uc9c0 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h3>\uc81c\ub124\ub9ad \ub808\ucf54\ub4dc\uac00 \ud3ec\ud568\ub41c \uc804\uccb4 switch \ubb38<\/h3>\n<p>\uc2dc\uc791\ud558\uae30 \uc804\uc5d0 \uae30\ubcf8\uc801\uc778 \ub0b4\uc6a9\ubd80\ud130 \uc9da\uace0 \ub118\uc5b4\uac00\uaca0\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \uc774\ubbf8\uc9c0\ub294 switch \ubb38 \ub610\ub294 switch \uc2dd(switch \ubb38\uc5d0 \uc804\ub2ec\ud558\ub294 \ubcc0\uc218 \ub610\ub294 \uc2dd)\uc5d0\uc11c \uc120\ud0dd\uc790 \ud45c\ud604\uc2dd\uc774 \ucc38\uc870\ud558\ub294 \ub0b4\uc6a9\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/03\/3-1.png\" alt=\"\" \/><\/figure>\n<p>switch \ubb38 \ubc0f switch \uc2dd\uc758 \uad6c\ubb38\uc740 \uc120\ud0dd\uc790 \uc2dd\uc758 \uac12\uc744 \ud574\ub2f9 case \ub77c\ubca8\uc758 \ud0c0\uc785 \ud328\ud134 \ub610\ub294 \ub808\ucf54\ub4dc \ud328\ud134\uacfc \uc77c\uce58\uc2dc\ud0a4\ub824\uace0 \ud560 \ub54c \ud3ec\uad04\uc801\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc989, \uc120\ud0dd\uc790 \uc2dd\uc740 case \ub77c\ubca8\uc5d0 \uc815\uc758\ub41c \uac12 \uc911 \ucd5c\uc18c \ud558\ub098\uc640 \uc77c\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p><code>Object<\/code> \ud0c0\uc785\uacfc \uac19\uc774 \ud558\uc704 \ud0c0\uc785\uc758 \uba85\ud655\ud55c \uac1c\uc218(\ud655\uc7a5\ud558\ub294 \ub2e4\ub978 \ud074\ub798\uc2a4\uc758 \uace0\uc815 \uac1c\uc218)\uac00 \uc5c6\ub294 \ud0c0\uc785\uc758 \uacbd\uc6b0, <code>default<\/code> case \ub77c\ubca8 \ub610\ub294 <code>Object<\/code> \ud0c0\uc785 \uc790\uccb4\ub97c case \ub77c\ubca8 \uc911 \ud558\ub098\ub85c \uc815\uc758\ud558\uc5ec \uc644\uc804\ud55c switch \ubb38\uc73c\ub85c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \uc644\uc804\ud55c switch \uc2dd \ubc0f switch \ubb38\uc744 \uc798 \ubcf4\uc5ec\uc8fc\ub294 \uc608\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">String exhaustiveSwitchExpression(Object obj) {\n   return switch (obj) {\n       case String s -&gt; \"String\";\n       case Apple apple -&gt; \"Apple\";\n       default -&gt; \"everything else\";\n   };\n}\n\nvoid exhaustiveSwitchStatement(Object obj) {\n   switch (obj) {\n       case String s -&gt; System.out.println(\"String\");\n       case Apple apple -&gt; System.out.println(\"Apple\");\n       case Object object -&gt; System.out.println(\"everything else\");\n   };\n}<\/pre>\n<p>sealed \ud074\ub798\uc2a4\uc640 \uac19\uc740 \uc77c\ubd80 \ud0c0\uc785\uc5d0\ub294 \ud655\uc815\uc801\uc778 \ud558\uc704 \ud0c0\uc785\uc774 \uc788\uc73c\ubbc0\ub85c \uc644\uc804\ud55c switch \ubb38\uc774\ub098 switch \uc2dd\uc744 \uc815\uc758\ud558\uae30 \uc704\ud574 <code>default<\/code> \ub77c\ubca8\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc744 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uba74 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">sealed interface HighProtein permits Egg, Cheese {}\nfinal class Egg implements HighProtein {}\nfinal class Cheese implements HighProtein {}\n \nint processHighProtein(HighProtein protein) {\n   return switch (protein) {\n       case Egg egg -&gt; 2;\n       case Cheese cheese -&gt; 10;\n   };\n}<\/pre>\n<p>\uadf8\ub7ec\ub098 <code>HighProtein<\/code> \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc77c\ubc18 \uc778\ud130\ud398\uc774\uc2a4, \uc989 sealed\uac00 \uc544\ub2cc \uc778\ud130\ud398\uc774\uc2a4\ub85c \uc815\uc758\ud558\uba74 \uc774\uc804 \ucf54\ub4dc\ub97c \ucef4\ud30c\uc77c\ub9c1\ud558\ub294 \ub370 \ubb38\uc81c\uac00 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c \uc120\ud0dd\uc790 \uc2dd\uc774 \ub808\ucf54\ub4dc \ud328\ud134\uacfc \uc77c\uce58\ud558\ub294 \uc81c\ub124\ub9ad \ub808\ucf54\ub4dc\uc778 \uacbd\uc6b0, \uc644\uc804\ud55c case \ub77c\ubca8\uc744 \uc815\uc758\ud558\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc774\uc57c\uae30\ud558\uaca0\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \ub610 \ub2e4\ub978 \ud074\ub798\uc2a4\uc778 <code>HimalayanApple<\/code>\uc5d0 \uc758\ud574 \ud655\uc7a5\ub418\ub294 \uc81c\ub124\ub9ad \ud074\ub798\uc2a4 <code>Apple<\/code>, <code>Egg<\/code> \ubc0f <code>Cheese<\/code> \ud074\ub798\uc2a4\uc5d0 \uc758\ud574 \uad6c\ud604\ub41c sealed \uc778\ud130\ud398\uc774\uc2a4\uc778 <code>HighProtein<\/code>, \uadf8\ub9ac\uace0 \ud0c0\uc785 \ub9e4\uac1c\ubcc0\uc218\ub97c \ucde8\ud558\uace0 \uc774 \ud0c0\uc785\uc758 \ub450 \uad6c\uc131 \uc694\uc18c\ub97c \uc815\uc758\ud558\ub294 \uc81c\ub124\ub9ad \ub808\ucf54\ub4dc\uc778 <code>Dish<\/code>\uc758 \uc608\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">public class Apple {}\npublic class HimalayanApple extends Apple{}\n\nsealed public interface HighProtein permits Egg, Cheese {}\npublic final class Egg implements HighProtein {}\npublic final class Cheese implements HighProtein {}\n\npublic record Dish&lt;T&gt; (T x, T y){}<\/pre>\n<p>\uc774 \uc81c\ub124\ub9ad \ub808\ucf54\ub4dc \ud074\ub798\uc2a4 <code>Dish<\/code>\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \uc804\ud658\ud560 \ub54c \uc791\ub3d9\ud558\uac70\ub098 \uc791\ub3d9\ud558\uc9c0 \uc54a\ub294 \uc5ec\ub7ec \uc870\ud569\uc5d0 \ub300\ud574 \uc774\uc57c\uae30\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p><code>Dish&lt;Apple&gt; appleDish<\/code> \ud0c0\uc785\uc758 \uba54\uc11c\ub4dc \ub9e4\uac1c\ubcc0\uc218\ub97c \ucde8\ud558\uace0 \uc774\ub97c \uc804\ud658\ud558\uc5ec \ub808\ucf54\ub4dc \ud328\ud134\uacfc \uc77c\uce58\uc2dc\ud0a4\ub294 <code>orderAppleDish<\/code> \uba54\uc11c\ub4dc\uc778 orderAppleDish\ubd80\ud130 \uc2dc\uc791\ud558\uaca0\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \ucf54\ub4dc\uac00 \ubb38\uc81c \uc5c6\ub2e4\uace0 \uc0dd\uac01\ud558\uc2dc\ub098\uc694?<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">    int orderAppleDish(Dish&lt;Apple&gt; appleDish) {\n        return switch (appleDish) {\n            case Dish&lt;Apple&gt;(Apple apple, HimalayanApple himalayanApple) -&gt; 1;\n            case Dish&lt;Apple&gt;(HimalayanApple himalayanApple, Apple apple) -&gt; 2;\n        };\n    }<\/pre>\n<p><code>HimalayanApple<\/code> \ud074\ub798\uc2a4\ub294 <code>Apple<\/code> \ud074\ub798\uc2a4\ub97c \ud655\uc7a5\ud558\ubbc0\ub85c \uc55e\uc758 switch \uc2dd\uc744 \uc644\uc804\ud55c switch\ub85c \ub9cc\ub4e4\ub824\uba74 \ub2e4\uc74c \ub450 \uac00\uc9c0 \uc870\ud569\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<p>Apple, Apple<br \/>HimalayanApple, HimalayanApple<\/p>\n<p>\ub2e4\uc74c gif\ub294 IntelliJ IDEA\uac00 \uc774\uc804 \ucf54\ub4dc\uc5d0 \ubb38\uc81c\uac00 \uc788\uc74c\uc744 \uac10\uc9c0\ud558\uace0 \ucf54\ub4dc\ub97c \ub418\uc9da\uc73c\uba74\uc11c \uc624\ub958\ub97c \uc218\uc815\ud558\ub3c4\ub85d \ub3c4\uc6c0\uc744 \uc8fc\ub294 \uacfc\uc815\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image alignnone wp-image-16062\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/03\/generic-records.gif\" alt=\"\" \/><\/figure>\n<p>\ub2e4\uc74c\uc740 \ucc38\uace0\uc6a9\uc73c\ub85c \uc81c\uc2dc\ub41c \uc774\uc804 gif\uc758 \ucd5c\uc885 \ucf54\ub4dc\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">class Apple {}\nclass HimalayanApple extends Apple{}\nrecord Dish&lt;T&gt; (T ingredient1, T ingredient2) {}\n\npublic class FoodOrder {\n\n    int orderAppleDish(Dish&lt;Apple&gt; appleDish) {\n        return switch (appleDish) {\n            case Dish&lt;Apple&gt;(HimalayanApple apple1, HimalayanApple apple2) -&gt; 4;\n            case Dish&lt;Apple&gt;(Apple apple, HimalayanApple himalayanApple) -&gt; 1;\n            case Dish&lt;Apple&gt;(HimalayanApple himalayanApple, Apple apple) -&gt; 2;\n            case Dish&lt;Apple&gt;(Apple apple1, Apple apple2) -&gt; 3;\n        };\n    }\n\n}<\/pre>\n<p>\uc81c\ub124\ub9ad \ub808\ucf54\ub4dc\uc778 <code>Dish<\/code>\uc5d0\uc11c \ub2e4\uc74c\uc758 sealed \uc778\ud130\ud398\uc774\uc2a4\uc640 \uad6c\ud604\uc744 \uc0ac\uc6a9\ud558\ub294 \ub610 \ub2e4\ub978 \uc608\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">sealed public interface HighProtein permits Egg, Cheese {}\npublic final class Egg implements HighProtein {}\npublic final class Cheese implements HighProtein {}\n\npublic record Dish&lt;T&gt; (T x, T y){}<\/pre>\n<p>\uc5b4\ub5a4 \uc0ac\ub78c\uc774 \uc74c\uc2dd\uc744 \uc8fc\ubb38\ud558\uace0 <code>HighProtein<\/code> \uc778\ud130\ud398\uc774\uc2a4\ub97c \ud0c0\uc785 \ub9e4\uac1c\ubcc0\uc218\ub85c \uc0ac\uc6a9\ud558\uc5ec <code>Dish<\/code> \uc778\uc2a4\ud134\uc2a4\ub97c \uc804\ub2ec\ud55c\ub2e4\uace0 \uac00\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc774 \uacbd\uc6b0 \ub2e4\uc74c switch \uc2dd\uc740 \uc644\uc804\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/03\/4-1.png\" alt=\"\" \/><\/figure>\n<p>\uc544\ub798 \ucf54\ub4dc\ub97c \ucc38\uace0\ud558\uc138\uc694.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">public class FoodOrder {\n\n    int orderHighProteinDish(Dish&lt;HighProtein&gt; proteinDish) {\n        return switch (proteinDish) {\n            case Dish&lt;HighProtein&gt;(HighProtein protein, Egg egg) -&gt; 1;\n            case Dish&lt;HighProtein&gt;(HighProtein protein, Cheese cheese) -&gt; 2;\n        };\n    }\n\n}<\/pre>\n<p><code>HighProtein<\/code>\uc740 sealed \uc778\ud130\ud398\uc774\uc2a4\uc774\ubbc0\ub85c \ub2e4\uc74c switch \ubb38\uc758 \uccab \ubc88\uc9f8 case \ub77c\ubca8\uc740 <code>Egg<\/code> \ub610\ub294 <code>Cheese<\/code>\ub97c \ub808\ucf54\ub4dc Dish\uc5d0 \ub450 \ubc88\uc9f8 \uac12\uc73c\ub85c \uc804\ub2ec\ud558\ub294 \uacbd\uc6b0\ub97c \ud3ec\uad04\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \uc138 \uac1c\uc758 case \ub77c\ubca8\ub9cc \uc815\uc758\ud558\uace0 \uc788\uc9c0\ub9cc \uc644\uc804\ud55c switch \uc2dd\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">public class FoodOrder {\n\n    int orderHighProteinDish(Dish&lt;HighProtein&gt; proteinDish) {\n        return switch (proteinDish) {\n            case Dish&lt;HighProtein&gt;(Egg protein, HighProtein highProtein) -&gt; 1;\n            case Dish&lt;HighProtein&gt;(Cheese cheese, Egg egg) -&gt; 2;\n            case Dish&lt;HighProtein&gt;(Cheese cheese1, Cheese cheese2) -&gt; 4;\n        };\n    }\n\n}<\/pre>\n<p>\uc644\uc804\ud55c switch \ubc0f \uc81c\ub124\ub9ad \ub808\ucf54\ub4dc\uc5d0 \ub300\ud55c \uc774 \ub9c8\uc9c0\ub9c9 \uc608\uc5d0\uc11c switch \ud45c\ud604\uc2dd\uc758 \ub2e4\uc74c \ucd08\uae30 case \ub77c\ubca8 \uc138\ud2b8\ub294 \uc644\uc804\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uccab \ubc88\uc9f8 \uc7ac\ub8cc\uac00 <code>HighProtein<\/code>\uc758 \uc778\uc2a4\ud134\uc2a4\uc774\uace0 \ub450 \ubc88\uc9f8 \uac12\uc774 <code>Egg<\/code>\uc758 \uc778\uc2a4\ud134\uc2a4\uc778 \uace0\ub2e8\ubc31 \uc694\ub9ac\ub97c \ucc98\ub9ac\ud560 \uac00\ub2a5\uc131\uc744 \ud3ec\ud568\ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4.<\/p>\n<pre>    int orderHighProteinDish(Dish&lt;HighProtein&gt; proteinDish) {\n        return switch (proteinDish) {\n            case Dish&lt;HighProtein&gt;(Egg protein, Cheese cheese) -&gt; 1;\n            case Dish&lt;HighProtein&gt;(Cheese cheese, Egg egg) -&gt; 2;\n            case Dish&lt;HighProtein&gt;(HighProtein highProtein, Cheese cheese) -&gt; 3;\n        };\n    }\n<\/pre>\n<p>\uc774\uc804 \ucf54\ub4dc\uc5d0 \ub610 \ub2e4\ub978 case \ub77c\ubca8\uc744 \ucd94\uac00\ud558\uc5ec \uc644\uc804\ud55c switch \uc2dd\uc73c\ub85c \ub9cc\ub4e4\uc5b4 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">            case Dish&lt;HighProtein&gt;(HighProtein highProtein, Egg egg) -&gt; 10;<\/pre>\n<h3>\ud5a5\uc0c1\ub41c for \uad6c\ubb38\uacfc \ud568\uaed8 \ub808\ucf54\ub4dc \ud328\ud134 \uc0ac\uc6a9<\/h3>\n<p>Java 20\uc5d0\uc11c\ub294 \ud5a5\uc0c1\ub41c <code>for<\/code> \ub8e8\ud504\uc758 \ud5e4\ub354\uc5d0\uc11c \ub808\ucf54\ub4dc \ud328\ud134\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc5ec\ub7ec case \ub77c\ubca8\uc744 \ud560\ub2f9\ud560 \uc218 \uc788\ub294 switch \ubb38 \ub610\ub294 \uc2dd, \ud5a5\uc0c1\ub41c for \ub8e8\ud504 \ud5e4\ub354\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 \ub2e8\uc77c \ub808\ucf54\ub4dc \ud328\ud134\uc740 for \ub8e8\ud504\uc5d0\uc11c \ubc18\ubcf5\ud558\ub294 \ubaa8\ub4e0 \uac12\uacfc \uc77c\uce58\ud574\uc57c \ud569\ub2c8\ub2e4. \uadf8\ub807\uc9c0 \uc54a\uc73c\uba74 \ucf54\ub4dc\uc5d0\uc11c \ub7f0\ud0c0\uc784 \uc608\uc678\uac00 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc740 \ub808\ucf54\ub4dc <code>Point<\/code> \ubc0f <code>Triangle<\/code>\uacfc \ud5e4\ub354\uc5d0\uc11c \ub808\ucf54\ub4dc \ud328\ud134\uc744 \uc0ac\uc6a9\ud558\uc5ec <code>Triangle<\/code> \uc778\uc2a4\ud134\uc2a4 \ubaa9\ub85d\uc744 \ubc18\ubcf5 \ucc98\ub9ac\ud558\ub294 \ud5a5\uc0c1\ub41c for \ub8e8\ud504\uc758 \uc608\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">record Point (int x, int y) { }\nrecord Triangle(Point pointA, Point pointB, Point PointC) { }\n\nlong addLowerRightCoordinates(List&lt;Triangle&gt; triangles) {\n    long sum = 0;\n    for (Triangle(Point a, Point b, Point (int x, int y)) : triangles) {\n        sum += x + y;\n    }\n    return sum;\n}<\/pre>\n<p>\ub2e4\uc74c\uc740 \uc77c\ubd80 \uc798\ubabb\ub41c \uc608\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"\">public class Test {\n\n    sealed interface UpperWithPermit permits PermittedRecord {}\n    record PermittedRecord(int x) implements UpperWithPermit {}\n    interface Upper {}\n    record Record(List&lt;String&gt; x) implements Upper {}\n\n    void test1(List&lt;Upper&gt; lists) {\n        for (Record(List&lt;String&gt; x) : lists) {} \n    }\n\n    void test2(List&lt;? super UpperWithPermit&gt; lists) {\n        for (PermittedRecord(var x) : lists) {} \n    }\n\n    void test3(List&lt;? super PermittedRecord&gt; lists) {\n        for (PermittedRecord(var x) : lists) {} \n    }\n\n    void test4(List lists) {\n        for (PermittedRecord(var x) : lists) {} \n    }\n\n    void test5(List&lt;?&gt; lists) {\n        for (PermittedRecord(var x) : lists) {} \n    }\n}<\/pre>\n<h2>switch \ud328\ud134 \uc77c\uce58<\/h2>\n<p>Java 20\uc5d0\uc11c switch\uc758 \ud328\ud134 \uc77c\uce58\ub294 \ub124 \ubc88\uc9f8 \ud14c\uc2a4\ud2b8 \ubc84\uc804\uc785\ub2c8\ub2e4. \ud328\ud134 \uc77c\uce58\uac00 \ucc98\uc74c\uc774\ub77c\uba74 <a href=\"https:\/\/blog.jetbrains.com\/idea\/2021\/09\/java-17-and-intellij-idea\/#Patternmatchingforinstanceof\">\uc774 \ub9c1\ud06c<\/a>\uc5d0\uc11c instanceof\ub97c \ud1b5\ud574 \ud328\ud134 \uc77c\uce58\uc5d0 \ub300\ud55c \uae30\ucd08\uc801\uc778 \ub0b4\uc6a9\uc744 \uc54c\uc544\ubcf4\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4. switch\ub97c \uc774\uc6a9\ud55c \ud328\ud134 \uc77c\uce58\uac00 \uc0dd\uc18c\ud55c \ubd84\ub4e4\uc740 <a href=\"https:\/\/blog.jetbrains.com\/idea\/2021\/09\/java-17-and-intellij-idea\/#WelcometoPatternmatchingforswitch\">\uc774 \ub9c1\ud06c<\/a>\ub97c \ud655\uc778\ud558\uc138\uc694.<\/p>\n<p>Java 20\uc5d0\uc11c \uc774 \uae30\ub2a5\uc5d0 \uba87 \uac00\uc9c0 \ubcc0\uacbd \uc0ac\ud56d\uc774 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc5f4\uac70\ud615 \ud074\ub798\uc2a4\uc640 \ud568\uaed8 \uc0ac\uc6a9\ud560 \ub54c switch \ud328\ud134 \uc77c\uce58\ub294 \uc774\uc81c \uc644\uc804\ud55c switch \ubb38 \ub610\ub294 switch \uc2dd\uc5d0\uc11c \ub7f0\ud0c0\uc784\uc5d0 \uc77c\uce58\ud558\ub294 \ub77c\ubca8\uc744 \ucc3e\uc744 \uc218 \uc5c6\ub294 \uacbd\uc6b0, <code>ImcompatibleClassChangeError<\/code>\ub97c \ubc1c\uc0dd\uc2dc\ud0a4\ub294 \ub300\uc2e0 <code>MatchException<\/code>\uc744 \ubc1c\uc0dd\uc2dc\ud0b5\ub2c8\ub2e4. Java 20\uc5d0\uc11c \uc774 \uae30\ub2a5\uc758 \ub610 \ub2e4\ub978 \ubcc0\uacbd \uc0ac\ud56d\uc740 case \ub77c\ubca8\uc758 \uc81c\ub124\ub9ad \ub808\ucf54\ub4dc \ud328\ud134\uc5d0 \ub300\ud55c \ud0c0\uc785 \ub9e4\uac1c\ubcc0\uc218 \ucd94\ub860\uacfc \uad00\ub828\uc774 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uae30\ub2a5\uc740 \uc774 \ube14\ub85c\uadf8 \uae00\uc758 <a href=\"https:\/\/blog.jetbrains.com\/idea\/2023\/03\/java-20-and-intellij-idea\/#Exhaustiveswitchconstructswithgenericrecords\">\uc81c\ub124\ub9ad \ub808\ucf54\ub4dc\uac00 \ud3ec\ud568\ub41c \uc804\uccb4 switch \ubb38<\/a> \uc139\uc158\uc5d0\uc11c \uc774\ubbf8 \ub2e4\ub8e8\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\uc694\uc57d<\/h2>\n<p>IntelliJ IDEA\ub294 \uac1c\ubc1c\uc790\uac00 \ucd5c\uc2e0 Java \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub294 \uacfc\uc815\uc5d0\uc11c \uc778\uc9c0 \ubd80\ud558\ub97c \uc9c0\uc18d\uc801\uc73c\ub85c \uc904\uc5ec\uc90d\ub2c8\ub2e4. IntelliJ IDEA 2023.1\uc740 Java 20\uc5d0\uc11c &#8216;switch \ud328\ud134 \uc77c\uce58&#8217; \ubc0f &#8216;\ub808\ucf54\ub4dc \ud328\ud134&#8217;\uacfc \uac19\uc740 \uc5b8\uc5b4 \uae30\ub2a5\uc5d0 \ucd94\uac00\ub41c \ubcc0\uacbd \uc0ac\ud56d\uc744 \uc9c0\uc6d0\ud569\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uae30\ub2a5\uc5d0\uc11c \uac00\uc7a5 \ud765\ubbf8\ub85c\uc6b4 \ubcc0\uacbd \uc0ac\ud56d\uc740 \uac15\ud654\ub41c for \ud5e4\ub354\uc5d0\uc11c \ub808\ucf54\ub4dc \ud328\ud134\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub2e4\ub294 \uc810\uacfc \uc81c\ub124\ub9ad \ub808\ucf54\ub4dc \ud328\ud134\uc5d0 \ub300\ud55c \ud0c0\uc785 \uc778\uc218\uc758 \ud0c0\uc785 \ucd94\ub860\uc774 \uac1c\uc120\ub418\uc5c8\ub2e4\ub294 \uc810\uc785\ub2c8\ub2e4.<\/p>\n<p>\uc990\uac81\uac8c \ucf54\ub529\ud558\uc138\uc694.<\/p>\n<p><em>\uac8c\uc2dc\ubb3c \uc6d0\ubb38 \uc791\uc131\uc790<\/em><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n","protected":false},"author":964,"featured_media":344383,"comment_status":"closed","ping_status":"closed","template":"","categories":[5088],"tags":[8095,6744,8097,8099,155,76,477],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/idea\/344381"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/idea"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/types\/idea"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/users\/964"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/comments?post=344381"}],"version-history":[{"count":5,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/idea\/344381\/revisions"}],"predecessor-version":[{"id":344408,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/idea\/344381\/revisions\/344408"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media\/344383"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=344381"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=344381"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=344381"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=344381"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}