{"id":341308,"date":"2023-04-10T04:15:44","date_gmt":"2023-04-10T03:15:44","guid":{"rendered":"https:\/\/blog.jetbrains.com\/?post_type=idea&#038;p=341308"},"modified":"2023-04-10T04:15:48","modified_gmt":"2023-04-10T03:15:48","slug":"pattern-matching-in-java-5-examples-for-busy-developers","status":"publish","type":"idea","link":"https:\/\/blog.jetbrains.com\/ko\/idea\/2023\/04\/pattern-matching-in-java-5-examples-for-busy-developers\/","title":{"rendered":"Java\uc5d0\uc11c\uc758 \ud328\ud134 \uc77c\uce58 &#8211; \ubc14\uc05c \uac1c\ubc1c\uc790\ub97c \uc704\ud55c 5\uac00\uc9c0 \uc608\uc2dc"},"content":{"rendered":"<p>\ubc14\uc05c \uac1c\ubc1c\uc790\uac00 \uc0c8\ub85c\uc6b4 \uae30\ub2a5\uc744 \ub530\ub77c\uc7a1\uace0 \uc5b4\ub514\uc11c \uc5b4\ub5bb\uac8c \ud65c\uc6a9\ud560 \uc218 \uc788\uc744\uc9c0 \uae4a\uc774 \uc788\uac8c \uc774\ud574\ud558\uae30\ub780 \uc5b4\ub835\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ube14\ub85c\uadf8 \uae00\uc5d0\uc11c\ub294 \uc138\ubd80\uc801\uc778 \ub0b4\uc6a9\uc744 \uc0b4\ud3b4\ubcf4\uc9c0 \uc54a\uace0\ub3c4 Java\uc5d0\uc11c \ud328\ud134 \uc77c\uce58\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 5\uac00\uc9c0 \uacbd\uc6b0\ub97c \uc54c\ub824 \ub4dc\ub9bd\ub2c8\ub2e4. \ub354 \uc790\uc138\ud55c \ub0b4\uc6a9\uc744 \uc0b4\ud3b4\ubcfc \uc5ec\uc720\uac00 \uc0dd\uae30\uc2dc\uba74 \uc774 \uae00\uc5d0 \ud3ec\ud568\ub41c \ub9c1\ud06c\ub97c \ud655\uc778\ud558\uc138\uc694.<\/p>\n<p>\uadf8\ub7fc \uc2dc\uc791\ud558\uaca0\uc2b5\ub2c8\ub2e4!<\/p>\n<h2>1. \uae34 if-else \uad6c\ubb38\uc744 switch\ub85c \ubcc0\ud658\ud558\uc5ec \ucf54\ub4dc \uac00\ub3c5\uc131 \ud5a5\uc0c1<\/h2>\n<p>\uba3c\uc800 \uac00\uc7a5 \uc911\uc694\ud55c \uc9c8\ubb38\uc744 \ud574\uacb0\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc774 \ubcc0\ud658\uc744 \uc8fc\ubaa9\ud558\ub294 \uc774\uc720\ub294 \ubb34\uc5c7\uc77c\uae4c\uc694?<\/p>\n<p>\uc8fc\ub41c \uc774\uc810 \uc911 \ud558\ub098\ub294 \ucf54\ub4dc\uac00 \ub354 \uac04\uacb0\ud558\uace0 \uc77d\uace0 \uc774\ud574\ud558\uae30 \uc27d\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \uae34 if-else \ubb38\uc740 \uc77c\ubc18\uc801\uc73c\ub85c \ud55c \ud654\uba74\uc5d0 \ub2e4 \ub4e4\uc5b4\uac00\uc9c0 \uc54a\uc544 \uc138\ub85c \uc2a4\ud06c\ub864\uc774 \uc0dd\uae38 \uc218 \uc788\uc5b4, \uc804\uccb4 if \ube44\uad50\ubb38\uc5d0 \ub300\ud574 \uc2e4\ud589\ub418\ub294 \ucf54\ub4dc\ub97c \uc774\ud574\ud558\uae30\uac00 \uc5b4\ub835\uc2b5\ub2c8\ub2e4. \ub610\ud55c \uac01 if \uc870\uac74\uc5d0 \ub2e4\ub978 \uc870\uac74 \uc9d1\ud569\uc774 \uc788\uc744 \uc218 \uc788\uc73c\ubbc0\ub85c if \uc870\uac74\uc758 \uad6c\ubb38\uc774 \uba85\ud655\ud558\uc9c0 \uc54a\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ucf54\ub4dc \ubca0\uc774\uc2a4\ub97c \ud0d0\uc0c9\ud560 \ub54c \uc885\uc885 \uc544\ub798 \ud45c\uc2dc\ub41c \ucf54\ub4dc\uc640 \uc720\uc0ac\ud55c \ucf54\ub4dc\ub97c \ubcf4\uac8c \ub429\ub2c8\ub2e4. \uae34 if-else \uad6c\ubb38\uc758 \uacbd\uc6b0 \uc870\uac74\ubd80\ub85c \uac12\uc744 \uc9c0\uc5ed \ubcc0\uc218\uc5d0 \ub300\uc785\ud569\ub2c8\ub2e4. \uc544\ub798 \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uc138\uc694. \ud2b9\uc815 \uc139\uc158\uc744 \uac15\uc870 \ud45c\uc2dc\ud558\uc5ec \uc5ec\ub7ec\ubd84\uc774 \ucf54\ub4dc\ub97c \ud0d0\uc0c9\ud560 \uc218 \uc788\ub3c4\ub85d \ub3c4\uc640 \ub4dc\ub9ac\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">    \nprivate static String getValueText(Object value) {\n    final String newExpression;\n    if (value instanceof String) {\n        final String string = (String)value;\n        newExpression = '\"' + StringUtil.escapeStringCharacters(string) + '\"';\n    }\n    else if (value instanceof Character) {\n        newExpression = ''' + StringUtil.escapeStringCharacters(value.toString()) + ''';\n    }\n    else if (value instanceof Long) {\n        newExpression = value.toString() + 'L';\n    }\n    else if (value instanceof Double) {\n        final double v = (Double)value;\n        if (Double.isNaN(v)) {\n            newExpression = \"java.lang.Double.NaN\";\n        }\n        else if (Double.isInfinite(v)) {\n            if (v &gt; 0.0) {\n                newExpression = \"java.lang.Double.POSITIVE_INFINITY\";\n            }\n            else {\n                newExpression = \"java.lang.Double.NEGATIVE_INFINITY\";\n            }\n        }\n        else {\n            newExpression = Double.toString(v);\n        }\n    }\n    else if (value instanceof Float) {\n        final float v = (Float) value;\n        if (Float.isNaN(v)) {\n            newExpression = \"java.lang.Float.NaN\";\n        }\n        else if (Float.isInfinite(v)) {\n            if (v &gt; 0.0F) {\n                newExpression = \"java.lang.Float.POSITIVE_INFINITY\";\n            }\n            else {\n                newExpression = \"java.lang.Float.NEGATIVE_INFINITY\";\n            }\n        }\n        else {\n            newExpression = Float.toString(v) + 'f';\n        }\n    }\n    else if (value == null) {\n        newExpression = \"null\";\n    }\n    else {\n        newExpression = String.valueOf(value);\n    }\n    return newExpression;\n}\n<\/pre>\n<p>\uc911\uc810\uc744 \ub458 \ucf54\ub4dc\ub97c \uac15\uc870 \ud45c\uc2dc\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \uc774\ubbf8\uc9c0\uc5d0\uc11c <code>getValueText<\/code> \uba54\uc11c\ub4dc\ub294 <code>value<\/code> \ubcc0\uc218\uc758 \uac12\uc774 <code>String<\/code>, <code>Character<\/code>, <code>Long<\/code>, <code>Double<\/code>\uacfc \uac19\uc740 \ud2b9\uc815 \ub370\uc774\ud130 \uc720\ud615\uc778\uc9c0 \uc5ec\ubd80\ub97c \ube44\uad50\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/02\/long-if-else-1.png\" alt=\"\"><\/figure>\n<p><span style=\"font-weight: 400;\">\uc774 if-else \uad6c\uc870\uc758 \ub2e4\ub978 \ubd80\ubd84\uc744 \uc774\ud574\ud558\uae30 \uc704\ud574 \ubcc0\uc218 <\/span><code>newExpression<\/code>\uc5d0 \ucd08\uc810\uc744 \ub9de\ucdb0 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc774 \ubcc0\uc218\uc5d0\ub294 \ubcc0\uc218 <code>value<\/code>\uc758 \uac00\ub2a5\ud55c \ubaa8\ub4e0 \uac12\uc5d0 \ub300\ud574 \uac12\uc774 \ub300\uc785\ub418\uace0 \uc788\uc74c\uc5d0 \uc8fc\ubaa9\ud558\uc138\uc694.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/02\/long-if-else-2.png\" alt=\"\"><\/figure>\n<p><span style=\"font-weight: 400;\">\ud765\ubbf8\ub86d\uac8c\ub3c4 if \uc870\uac74\uc5d0 \ud574\ub2f9\ud558\ub294 \ucf54\ub4dc \ube14\ub85d \uc911 \ub450 \uac1c\ub97c \uc81c\uc678\ud558\uace0 \ubaa8\ub4e0 \ube14\ub85d\uc774 \uc77c\ubc18\uc801\uc73c\ub85c \ud55c \uc904 \ucf54\ub4dc\uc778 \ub2e4\ub978 if \ube14\ub85d\ubcf4\ub2e4 \uae41\ub2c8\ub2e4.<\/span><\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/02\/long-if-else-3.png\" alt=\"\"><\/figure>\n<p>\uc774 \ub450 \uac1c\uc758 \uae34 \ucf54\ub4dc \ube14\ub85d\uc744 \ucd94\ucd9c\ud558\uc5ec \uba54\uc11c\ub4dc\ub97c \ubd84\ub9ac\ud55c \ub2e4\uc74c if-else \ubb38\uc744 switch\ub85c \ubcc0\ud658\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ucf54\ub4dc\ub97c \ub2e4\ub978 \uba54\uc11c\ub4dc\ub85c \ucd94\ucd9c\ud558\ub824\uba74 \ucf54\ub4dc\ub97c \uc120\ud0dd\ud558\uace0 Alt+Enter(\ub610\ub294 macOS\uc758 \uacbd\uc6b0 Option+Enter)\ub97c \uc0ac\uc6a9\ud558\uc5ec \ucee8\ud14d\uc2a4\ud2b8 \uc561\uc158\uc744 \ud638\ucd9c\ud55c \ub2e4\uc74c, &#8216;extract method&#8217; \uc635\uc158\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4. \uc81c\uc548\ub41c \uc0c8 \uba54\uc11c\ub4dc \uc774\ub984 \uc911\uc5d0\uc11c \ud558\ub098\ub97c \uc120\ud0dd\ud558\uac70\ub098 \uc6d0\ud558\ub294 \uc774\ub984\uc744 \uc785\ub825\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucf54\ub4dc\uc758 \ub17c\ub9ac\uc801 \ubd80\ubd84\uc744 \uc120\ud0dd\ud558\uae30 \uc704\ud574 \uc81c\uac00 \uc990\uaca8 \uc0ac\uc6a9\ud558\ub294 \ub2e8\ucd95\ud0a4\ub294 Ctrl+W(\ub610\ub294 Ctrl+Shift+W\ub85c \uc120\ud0dd \ud56d\ubaa9 \ucd95\uc18c)\uc785\ub2c8\ub2e4. \uba54\uc11c\ub4dc \ucd94\ucd9c \ud6c4, \ub178\ub780\uc0c9 \ubc30\uacbd\uc758 \ud0a4\uc6cc\ub4dc\ub97c \ud655\uc778\ud558\uc5ec IntelliJ IDEA\uc758 \uc9c0\uce68\uc744 \ub530\ub77c \ucee8\ud14d\uc2a4\ud2b8 \uc561\uc158(Alt+enter)\uc744 \ud638\ucd9c\ud569\ub2c8\ub2e4. \uc774 if-else\ub97c switch\ub85c \ubcc0\ud658\ud558\uae30 \uc704\ud574 &#8216;if&#8217;\uc5d0\uc11c \ucee8\ud14d\uc2a4\ud2b8 \uc561\uc158\uc744 \ud638\ucd9c\ud558\uace0 &#8216;if&#8217;\ub97c &#8216;switch&#8217;\ub85c \ubc14\uafc9\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\/02\/1.gif\" alt=\"\"><\/figure>\n<p>\uac04\uacb0\ud558\uace0 \uc774\ud574\ud558\uae30 \uc26c\uc6b4 <code>getValueText<\/code> \uba54\uc11c\ub4dc\uc758 switch \ubb38\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">private static String getValueText(Object value) {\n    final String newExpression = switch (value) {\n        case String string -&gt; '\"' + StringUtil.escapeStringCharacters(string) + '\"';\n        case Character character -&gt; ''' + StringUtil.escapeStringCharacters(value.toString()) + ''';\n        case Long aLong -&gt; value.toString() + 'L';\n        case Double aDouble -&gt; getNewExpression(aDouble);\n        case Float aFloat -&gt; getNewExpression(aFloat);\n        case null -&gt; \"null\";\n        default -&gt; String.valueOf(value);\n    };\n    return newExpression;\n}\n<\/pre>\n<p>\uc774\ub807\uac8c \uac04\ub2e8\ud55c\ub370 \uadf8\ub3d9\uc548 \uc5b4\uc9f8\uc11c \uc5ec\ub7ec\ubd84\uc774 \ucf54\ub4dc\uc5d0\uc11c if-else \ubb38\ub9cc\ud07c \uc790\uc8fc switch \uc2dd\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc558\ub294\uc9c0 \uc758\uc544\ud558\uc2e0\uac00\uc694? \uc5ec\uae30\uc5d0\ub294 \uba87 \uac00\uc9c0 \uc774\uc720\uac00 \uc788\uc2b5\ub2c8\ub2e4. switch \ubb38\uc740 \ucd5c\uadfc Java \ub9b4\ub9ac\uc2a4\uc5d0\uc11c \ud5a5\uc0c1\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uac12(switch \uc2dd)\uc744 \ubc18\ud658\ud560 \uc218 \uc788\uace0, \ub354 \uc774\uc0c1 \uc81c\ud55c\ub41c \uae30\ubcf8 \ub370\uc774\ud130 \uc720\ud615, \ub798\ud37c \ud074\ub798\uc2a4, <code>String<\/code> \ub610\ub294 \uc5f4\uac70\ud615 \ub4f1\uc758 \uae30\ud0c0 \ud56d\ubaa9\uc758 \uac12 \ube44\uad50\uc5d0\ub9cc \uad6d\ud55c\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub610\ud55c case \ub77c\ubca8\uc5d0 \ud328\ud134\uacfc \uc870\uac74\uc744 \ud3ec\ud568\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ud328\ud134 \uc77c\uce58\uc640 switch\ub97c \uc0ac\uc6a9\ud558\uba74 null\uc744 case \ub77c\ubca8\ub85c \uc0ac\uc6a9\ud558\uc5ec null \uac12\uc744 \ucc98\ub9ac\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c \uac01 case \ub77c\ubca8\uc740 \ud574\ub2f9 \ucf54\ub4dc \ube14\ub85d\uc5d0\uc11c \uc0ac\uc6a9\ub418\ub294\uc9c0 \uc5ec\ubd80\uc640 \uad00\uacc4\uc5c6\uc774 \ud328\ud134 \ubcc0\uc218\ub97c \uc120\uc5b8\ud569\ub2c8\ub2e4. \ub204\ub77d\ub41c break \ub77c\ubca8\uc774 \uc6b0\ub824\ub418\ub294 \uacbd\uc6b0, switch\uc640 \ud568\uaed8 \ud654\uc0b4\ud45c \uc2a4\ud0c0\uc77c\uc744 \uc0ac\uc6a9\ud560 \ub54c \ub77c\ubca8\uc774 \ud544\uc694\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub7ec\ub098 \uc774 \uae30\ub2a5\uc740 \uc544\uc9c1 \ud14c\uc2a4\ud2b8 \ub2e8\uacc4\uc5d0 \uc788\uc73c\ubbc0\ub85c \ud5a5\ud6c4 Java \ubc84\uc804\uc5d0\uc11c \ubcc0\uacbd\ub420 \uc218 \uc788\uc5b4 \ud504\ub85c\ub355\uc158 \ucf54\ub4dc\uc5d0 \uc0ac\uc6a9\ud574\uc11c\ub294 \uc548 \ub429\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ub0b4\uc6a9\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\uc740 \uacbd\uc6b0 <a href=\"https:\/\/blog.jetbrains.com\/idea\/2022\/11\/java-19-and-intellij-idea\/#IntelliJ_IDEA_Configuration\">\uc774 \ub9c1\ud06c<\/a>\ub97c \ub530\ub77c \uad6c\uc131\uc744 \ud655\uc778\ud558\uc138\uc694.<\/p>\n<p><span style=\"font-weight: 400;\">\ubaa8\ub4e0 if-else \ubb38\uc744 switch \ubb38\uc73c\ub85c \ubcc0\ud658\ud560 \uc218 \uc788\ub294 \uac83\uc740 \uc544\ub2d9\ub2c8\ub2e4. if-else \ubb38\uc744 \uc0ac\uc6a9\ud558\uc5ec \ubcc0\uc218, \uc0c1\uc218 \ub610\ub294 \uba54\uc11c\ub4dc \ud638\ucd9c\uc744 \ud568\uaed8 \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 \ubcf5\uc7a1\ud55c \uc870\uac74\uc744 \uc815\uc758\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \ubcf5\uc7a1\ud55c \ube44\uad50\ub294 \uc544\uc9c1 switch \ubb38\uc5d0\uc11c \uc9c0\uc6d0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.&nbsp;<\/span><\/p>\n<p>\ud328\ud134 \uc77c\uce58\uc5d0 \ub300\ud55c \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 <a href=\"https:\/\/blog.jetbrains.com\/idea\/2021\/09\/java-17-and-intellij-idea\/#What_is_pattern_matching\">\uc774 \ube14\ub85c\uadf8 \uae00<\/a>\uc744 \ud655\uc778\ud558\uc138\uc694.<\/p>\n<h4>\ucf54\ub4dc \ubca0\uc774\uc2a4\uc5d0\uc11c if\ub97c switch\ub85c \ubc14\uafc0 \uc218 \uc788\ub294\uc9c0 \uc5ec\ubd80 \uac80\uc0ac \uc2e4\ud589<\/h4>\n<p>\ucf54\ub4dc\uc5d0\uc11c if-else \ubb38\uc744 \ucc3e\uace0 switch\ub85c \ub300\uccb4\ud560 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud558\ub824\uba74 \uc2dc\uac04\uc774 \ub9ce\uc774 \uac78\ub9b4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. <a href=\"https:\/\/blog.jetbrains.com\/idea\/2021\/09\/java-17-and-intellij-idea\/#Running_the_if_can_be_replaced_with_switch_inspection_on_your_code_base\">\uc774 \ube14\ub85c\uadf8 \uae00<\/a>\uc5d0\uc11c \ub2e4\ub8ec \uac83\ucc98\ub7fc \ucf54\ub4dc \ubca0\uc774\uc2a4 \ub610\ub294 \uadf8 \uc77c\ubd80\uc758 \ubaa8\ub4e0 \ud074\ub798\uc2a4\uc5d0\uc11c &#8216;if can be replaced with switch'(if\ub97c switch\ub85c \ubc14\uafc0 \uc218 \uc788\ub294\uc9c0 \uc5ec\ubd80) \uac80\uc0ac\ub97c \uc2e4\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Java\uc758 \ud504\ub85c\ub355\uc158 \uae30\ub2a5\uc778 instanceof\uc5d0 \ub300\ud574 \ud328\ud134 \uc77c\uce58\ub97c \uc0ac\uc6a9\ud558\ub294 \ub2e4\uc74c \uc608\uc2dc\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>2. instanceof\uc5d0 \ud328\ud134 \uc77c\uce58\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac04\uacb0\ud55c \ucf54\ub4dc \uc791\uc131<\/h2>\n<p><code>instanceof<\/code> \uc5f0\uc0b0\uc790\uc5d0 \ub300\ud55c \ud328\ud134 \uc77c\uce58 \uc0ac\uc6a9\uc740 Java \ubc84\uc804 16\ubd80\ud130 \ud504\ub85c\ub355\uc158 \uae30\ub2a5\uc73c\ub85c \uc81c\uacf5\ub418\uace0 \uc788\uc5b4 \uc774\ub97c \ud504\ub85c\ub355\uc158 \ucf54\ub4dc\uc5d0 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>IntelliJ IDEA\uc758 \uc9c0\uce68\uc744 \ub530\ub77c \ub178\ub780\uc0c9 \ubc30\uacbd\uc73c\ub85c \uac15\uc870 \ud45c\uc2dc\ub41c <code>if<\/code>&nbsp;\ud0a4\uc6cc\ub4dc\uc5d0\uc11c \ucee8\ud14d\uc2a4\ud2b8 \uc561\uc158\uc744 \ud638\ucd9c\ud558\uae30\ub9cc \ud558\uba74 \uc774 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><code>Monitor<\/code>\uc640 \uac19\uc740 \ud074\ub798\uc2a4\uac00 \uc788\ub2e4\uace0 \uac00\uc815\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uc740 <code>equals<\/code> \uba54\uc11c\ub4dc\ub97c \uad6c\ud604\ud558\uae30 \uc704\ud574 \ucf54\ub4dc \ubca0\uc774\uc2a4\uc5d0\uc11c \ucc3e\uc744 \uc218 \uc788\ub294 \uc77c\ubc18\uc801\uc778 \uc608 \uc911 \ud558\ub098\uc785\ub2c8\ub2e4.<\/p>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public class Monitor {\n    String model;\n    double price;\n\n    @Override\n    public boolean equals(Object object) {\n        if (object instanceof Monitor) {\n            Monitor other = (Monitor) object;\n            return model.equals(other.model) &amp;&amp; price == other.price;\n        }\n        return false;\n    }\n}\n<\/pre>\n<p>\ub2e4\uc74c gif\ub294 \ub178\ub780\uc0c9 \ubc30\uacbd\uc73c\ub85c \uac15\uc870 \ud45c\uc2dc\ub41c <code>other<\/code>\ub77c\ub294 \ubcc0\uc218\uc5d0 \ucee8\ud14d\uc2a4\ud2b8 \uc561\uc158\uc744 \ud638\ucd9c\ud55c \ub2e4\uc74c &#8216;replace &#8216;other&#8217; with pattern variable'(&#8216;other&#8217;\ub97c \ud328\ud134 \ubcc0\uc218\ub85c \ubc14\uafb8\uae30) \uc635\uc158\uc744 \uc120\ud0dd\ud558\ub294 \uc2dd\uc73c\ub85c \ud328\ud134 \uc77c\uce58\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4. if \ubb38\uc5d0\uc11c \ucee8\ud14d\uc2a4\ud2b8 \uc561\uc158\uc744 \ud638\ucd9c\ud558\uc5ec \uacb0\uacfc \ucf54\ub4dc\ub97c \ub9ac\ud329\ud130\ub9c1\ud558\uba74 \uc774 \ucf54\ub4dc\ub97c \ub354\uc6b1 \uac04\uacb0\ud558\uac8c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ucd5c\uc885 \ucf54\ub4dc\ub294 \uc77d\uace0 \uc774\ud574\ud558\uae30\uac00 \ub354 \uc26c\uc6b0\uba70, \uc5b8\uae09\ub41c \uc138 \uac00\uc9c0 \uc870\uac74\uc774 \ubaa8\ub450 true\uba74 true\ub97c \ubc18\ud658\ud569\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\/02\/2.gif\" alt=\"\"><\/figure>\n<\/div>\n<p>\uc77c\ubc18 \ud074\ub798\uc2a4 \ub300\uc2e0 Record\uc758 \uc778\uc2a4\ud134\uc2a4\ub85c \uc791\uc5c5\ud558\ub294 \uacbd\uc6b0 \uc5b4\ub5bb\uac8c \ub420\uae4c\uc694? Record\uc758 \uacbd\uc6b0, instanceof\uc5d0 \ub300\ud55c \ud328\ud134 \uc77c\uce58\ub85c Record \uad6c\uc131 \uc694\uc18c\uc5d0 \ub300\ud55c \ud328\ud134 \ubcc0\uc218\ub97c \uc815\uc758\ud558\uc5ec Record \uc778\uc2a4\ud134\uc2a4\ub97c \ubd84\ud574\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c \uc608\uc5d0\uc11c <code>instanceof<\/code> \uc5f0\uc0b0\uc790\uc640 \ud568\uaed8 \uc0ac\uc6a9\ub418\ub294 <code>Citizen(String name, int age)<\/code>\uc774 Record \ud328\ud134\uc785\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\/02\/4.gif\" alt=\"\"><\/figure>\n<p>\uc55e\uc758 \ub450 \ucf54\ub4dc\uc640 \uac19\uc740 \uac04\ub2e8\ud55c \ucf54\ub4dc \uc608\uc2dc\ub85c \uc2dc\uc791\ud560 \ub54c\ub294 \uc774\ub7ec\ud55c \uae30\ub2a5\uc758 \uac15\ub825\ud568\uc744 \ub193\uce58\uae30 \uc27d\uc2b5\ub2c8\ub2e4. instanceof \uc5f0\uc0b0\uc790\uc640 \ud568\uaed8 \ud328\ud134 \uc77c\uce58\ub97c \uc0ac\uc6a9\ud558\ub294 \ub610 \ub2e4\ub978 \uc608\ub97c \uac04\ub2e8\ud788 \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc5ec\uae30\uc11c\ub294 \ub2e4\ub978 \ub9ac\ud329\ud130\ub9c1 \ub610\ub294 \uac1c\uc120 \uac00\ub2a5\uc131\uc744 \uc704\ud574 \uc9c0\uc5ed \ubcc0\uc218 \uc120\uc5b8\uc744 \uc81c\uac70\ud569\ub2c8\ub2e4. \uac04\ub2e8\ud788 \ub9d0\ud574, \uc774 \uae30\ub2a5\uc744 \ub2e4\ub978 \ub9ac\ud329\ud130\ub9c1 \ub610\ub294 \ucf54\ub4dc \uac1c\uc120 \uae30\uc220\uacfc \uacb0\ud569\ud558\uba74 \ub354 \ub098\uc740 \ucf54\ub4dc\ub97c \uc791\uc131\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4(IntelliJ IDEA\uc758 \uc9c0\uce68\uc744 \ub530\ub974\uc138\uc694!).<\/p>\n<figure class=\"wp-block-image alignnone wp-image-16062\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/02\/3.gif\" alt=\"\"><\/figure>\n<h2>3. \uc758\ubbf8\uac00 \uc5c6\ub294 \uc0c1\ud0dc \ubb34\uc2dc<\/h2>\n<p><span style=\"font-size: revert;\">if-else \ubb38\uc740 \uc5f4\uac70\ud615 \ub610\ub294 sealed \ud074\ub798\uc2a4\uc758 \ud558\uc704 \ud0c0\uc785\uacfc \uac19\uc774 \uc804\uccb4 \uac12 \uc138\ud2b8\uac00 \uc788\ub294 \ud0c0\uc785\uc758 \uac12\uc744 \ubc18\ubcf5\ud558\ub294 \ub370 \ucd5c\uc120\uc758 \uc120\ud0dd\uc774 \uc544\ub2d0 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \ub2e4\uc74c\uacfc \uac19\uc774 \uace0\uc815 \uac12 \uc138\ud2b8\ub97c \uc815\uc758\ud558\ub294 \uc5f4\uac70\ud615\uc774 \uc788\ub2e4\uace0 \uac00\uc815\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">enum SingleUsePlastic {\n    BOTTLE, SPOON, CARRY_BAG;\n}<\/pre>\n<p><span style=\"font-size: revert;\"><code>SingleUsePlastic<\/code> \ud0c0\uc785\uc758 \uc778\uc2a4\ud134\uc2a4\uac00 <code>BOTTLE<\/code>, <code>SPOON<\/code> \ubc0f <code>CARRY_BAG<\/code>\uc758 \uc138 \uac00\uc9c0 \uac12 \uc911 \ud558\ub098\ub97c \uac00\uc9c8 \uc218 \uc788\uc74c\uc744 \uc54c\uace0 \uc788\ub354\ub77c\ub3c4, \ub2e4\uc74c \ucf54\ub4dc\ub294 \ucd5c\uc885 \uc9c0\uc5ed \ubcc0\uc218 <code>replacement<\/code>\uc5d0 \ub300\ud574 \ucef4\ud30c\uc77c\ub9c1\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<\/div>\n<div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public class Citizen {\n    String getReplacements(SingleUsePlastic plastic) {\n        final String replacement;\n        if (plastic == SingleUsePlastic.BOTTLE) {\n            replacement = \"Booth 4: Pick up a glass bottle\";\n        } else if (plastic == SingleUsePlastic.SPOON) {\n            replacement = \"Pantry: Pick up a steel spoon\";\n        } else if (plastic == SingleUsePlastic.CARRY_BAG) {\n            replacement = \"Booth 5: Pick up a cloth bag\";\n        } \n        return replacement;\n    }\n}<\/pre>\n<p><span style=\"font-size: revert;\">\ucef4\ud30c\uc77c\ub9c1\ud558\ub824\uba74 \ub05d\uc5d0 else \uc808\uc744 \ucd94\uac00\ud574\uc57c \ud558\uc9c0\ub9cc \uc774\ub294 \ub9d0\uc774 \ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public class Citizen {\n    String getReplacements(SingleUsePlastic plastic) {\n        final String replacement;\n        if (plastic == SingleUsePlastic.BOTTLE) {\n            replacement = \"Booth 4: Pick up a glass bottle\";\n        } else if (plastic == SingleUsePlastic.SPOON) {\n            replacement = \"Pantry: Pick up a steel spoon\";\n        } else if (plastic == SingleUsePlastic.CARRY_BAG) {\n            replacement = \"Booth 5: Pick up a cloth bag\";\n        } else {\n            replacement = \"\";\n        }\n        return replacement;\n    }\n}<\/pre>\n<p><span style=\"font-size: revert;\">switch \ubb38\uc744 \uc0ac\uc6a9\ud558\uba74 \uc874\uc7ac\ud558\uc9c0 \uc54a\ub294 \uac12\uc5d0 \ub300\ud574 <code>default<\/code> \ubd80\ubd84\uc744 \ucf54\ub529\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.<\/span><\/p>\n<\/div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">public class Citizen {\n    String getReplacements(SingleUsePlastic plastic) {\n        final String replacement = switch (plastic) {\n            case BOTTLE -&gt; \"Booth 4: Pick up a glass bottle\";\n            case SPOON -&gt; \"Pantry: Pick up a steel spoon\";\n            case CARRY_BAG -&gt; \"Booth 5: Pick up a cloth bag\";\n        };\n        return replacement;\n    }\n}<\/pre>\n<p>\ub9c8\ucc2c\uac00\uc9c0\ub85c, sealed \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud558\ub294 \uacbd\uc6b0 switch \ubb38\uc744 \uc0ac\uc6a9\ud558\uc5ec default \uc808\uc744 \uc815\uc758\ud558\uc9c0 \uc54a\uace0 \uc804\uccb4 \ud558\uc704 \ud074\ub798\uc2a4\ub97c \ubc18\ubcf5 \ucc98\ub9ac\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">sealed interface Lego {}\nfinal class SquareLego implements Lego {}\nnon-sealed class RectangleLogo implements Lego {}\nsealed class CharacterLego implements Lego permits PandaLego {}\nfinal class PandaLego extends CharacterLego {}\n\npublic class MyLegoGame {\n    int processLego(Lego lego) {\n        return switch (lego) {\n            case SquareLego squareLego -&gt; 100;\n            case RectangleLego rectangleLego-&gt; 200;\n            case CharacterLego characterLego -&gt; 300;\n        };\n    }\n}<\/pre>\n<p>sealed \ud074\ub798\uc2a4\uc5d0 \uc775\uc219\ud558\uc9c0 \uc54a\uace0 \uc774 \uc8fc\uc81c\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\ub824\uba74 <a href=\"https:\/\/blog.jetbrains.com\/idea\/2021\/09\/java-17-and-intellij-idea\/#Need_for_creating_restricted_hierarchies\">\uc774 \ube14\ub85c\uadf8 \uae00<\/a>\uc744 \uc77d\uc5b4\ubcf4\uc138\uc694.<\/p>\n<h2>4. \uac15\ub825\ud558\uace0 \uac04\uacb0\ud55c \ub370\uc774\ud130 \ucc98\ub9ac<\/h2>\n<p>\ub808\ucf54\ub4dc \ud328\ud134, switch \uc2dd \ubc0f sealed \ud074\ub798\uc2a4\ub97c \ud568\uaed8 \uc0ac\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud558\ub294 \uac15\ub825\ud558\uba74\uc11c\ub3c4 \uac04\uacb0\ud558\uace0 \ud45c\ud604\ub825\uc774 \ud48d\ubd80\ud55c \ucf54\ub4dc\ub97c \uc0dd\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uc740 Record <code>Point<\/code>, <code>Line<\/code>, <code>Triangle<\/code> \ubc0f <code>Square<\/code>\uc5d0 \uc758\ud574 \uad6c\ud604\ub418\ub294 sealed \uc778\ud130\ud398\uc774\uc2a4 <code>TwoDimensional<\/code>\uc758 \uc608\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">sealed interface TwoDimensional {}\nrecord Point    (int x, \n                 int y) implements TwoDimensional { }\nrecord Line     (Point start, \n                 Point end) implements TwoDimensional { }\nrecord Triangle (Point pointA, \n                 Point pointB, \n\t\t\t\t Point PointC) implements TwoDimensional { }\nrecord Square   (Point pointA, \n                 Point pointB, \n\t\t\t     Point PointC, \n\t\t\t     Point pointD) implements TwoDimensional { }\n<\/pre>\n<p>\ub2e4\uc74c \uba54\uc11c\ub4dc\ub294 switch \ubb38\uc744 \uc0ac\uc6a9\ud558\uc5ec <code>Line<\/code>, <code>Triangle<\/code> \ub610\ub294 <code>Square<\/code>\uc640 \uac19\uc740 2\ucc28\uc6d0 \ud615\uc0c1\uc5d0\uc11c \ubaa8\ub4e0 \ud3ec\uc778\ud2b8\uc758 x \ubc0f y \uc88c\ud45c \ud569\uacc4\ub97c \ubc18\ud658\ud558\ub294 \uc7ac\uadc0 \uba54\uc11c\ub4dc \ud504\ub85c\uc138\uc2a4\ub97c \uc815\uc758\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">static int process(TwoDimensional twoDim) {\n    return switch (twoDim) {\n        case Point(int x, int y) -&gt; x + y;\n        case Line(Point a, Point b) -&gt; process(a) + process(b);\n        case Triangle(Point a, Point b, Point c) -&gt; process(a) + process(b) + process(c);\n        case Square(Point a, Point b, Point c, Point d) -&gt; process(a) + process(b) + process(c) + process(d);\n    };\n}\n<\/pre>\n<p>IntelliJ IDEA\ub294 \ub610\ud55c \uc774 \uba54\uc11c\ub4dc\uc758 \uc5ec\ubc31\uc5d0 \uc7ac\uadc0 \ud638\ucd9c \uc544\uc774\ucf58\uc744 \ud45c\uc2dc\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2023\/02\/recursion.png\" alt=\"\"><\/figure>\n<h2>5. \uacc4\uc0b0\uacfc \ubd80\uc218 \ud6a8\uacfc\uc758 \ubd84\ub9ac<\/h2>\n<p>\ub3d9\uc77c\ud55c \ucf54\ub4dc \ube14\ub85d\uc5d0\uc11c \uacc4\uc0b0\uacfc \ubd80\uc218 \ud6a8\uacfc(\uc608: \ucf58\uc194\uc5d0 \ucd9c\ub825)\ub97c \uacb0\ud569\ud558\ub294 \ucf54\ub4dc\ub97c \uc790\uc8fc \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4, \ub2e4\uc74c \ucf54\ub4dc\ub294 if-else \ube14\ub85d\uacfc <code>instanceof<\/code> \uc5f0\uc0b0\uc790\ub97c \uc0ac\uc6a9\ud558\uc5ec \ubcc0\uc218 \ud0c0\uc785\uc744 \uacb0\uc815\ud558\uace0 \uac01 if \ucf54\ub4dc \ube14\ub85d\uc5d0\uc11c \uc870\uac74\ubd80\ub85c \uac12\uc744 \ucd9c\ub825\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">void printObject(Object obj) {\n    if (obj instanceof String s) {\n        System.out.println(\"String: \"\" + s + \"\"\");\n    } else if (obj instanceof Collection&lt;?&gt; c) {\n        System.out.println(\"Collection (size = \" + c.size() + \")\");\n    } else {\n        System.out.println(\"Other object: \" + obj);\n    }\n}\n<\/pre>\n<p>\ub2e4\uc74c gif\ub294 \uc774 if-else \ube14\ub85d\uc744 switch \ubb38\uc73c\ub85c \ubcc0\ud658\ud55c \ub2e4\uc74c switch\uc5d0\uc11c \uc0c8 \uac80\uc0ac\ub97c \uc0ac\uc6a9\ud558\ub294 \ubc29\ubc95\uc744 \ubcf4\uc5ec\uc90d\ub2c8\ub2e4. &#8216;switch&#8217; \uc2dd\uc5d0 \ub300\ud574 \ud478\uc2dc\ub2e4\uc6b4\ud55c \ub2e4\uc74c \ubcc0\uc218\ub97c \ucd94\ucd9c\ud558\uc5ec \uacc4\uc0b0\uacfc \uadf8 \ubd80\uc218 \ud6a8\uacfc\ub97c \ubd84\ub9ac\ud569\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\/02\/5-1.gif\" alt=\"\"><\/figure>\n<h2>\uc694\uc57d<\/h2>\n<p>\uc774 \ube14\ub85c\uadf8 \uae00\uc5d0\uc11c\ub294 \ubc14\uc05c \uac1c\ubc1c\uc790\ub97c \uc704\ud574 Java\uc5d0\uc11c \ud328\ud134 \uc77c\uce58\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub294 5\uac00\uc9c0 \uacbd\uc6b0\ub97c \uc0b4\ud3b4\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uae30\ub2a5\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uac70\ub098 IntelliJ IDEA\uac00 \uc774\ub7ec\ud55c \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub294 \ub370 \uc5b4\ub5a4 \ub3c4\uc6c0\uc744 \uc8fc\ub294\uc9c0 \uc54c\uace0 \uc2f6\ub2e4\uba74 \uc81c\uac00 \uc608\uc2dc\ub97c \uc18c\uac1c\ud558\uba74\uc11c \ucca8\ubd80\ud55c \ub9c1\ud06c\ub97c \ucc38\uc870\ud558\uc138\uc694.<\/p>\n<p>\ub2e4\uc74c \ube14\ub85c\uadf8 \uae00\uc5d0\uc11c \ub2e4\ub8e8\uc5c8\uc73c\uba74 \ud558\ub294 \ub2e4\ub978 \uc8fc\uc81c\uac00 \uc788\ub2e4\uba74 \uc54c\ub824\uc8fc\uc138\uc694.<\/p>\n<p>\ub2e4\uc2dc \ub9cc\ub0a0 \ub54c\uae4c\uc9c0 \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":320082,"comment_status":"closed","ping_status":"closed","template":"","categories":[4759,5088],"tags":[40,155],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/idea\/341308"}],"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=341308"}],"version-history":[{"count":10,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/idea\/341308\/revisions"}],"predecessor-version":[{"id":341322,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/idea\/341308\/revisions\/341322"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media\/320082"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=341308"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=341308"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=341308"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=341308"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}