PageSourceSearch

https://azderica.github.io/til/assets/js/95d73609.4b1eee40.js

js azderica.github.io collected 2026-10-03 08:43:07 UTC 48,017 bytes, 1 lines download raw bytes

1"use strict";(self.webpackChunktil=self.webpackChunktil||[]).push([[5754],{3905:function(e,t,n){n.d(t,{Zo:function(){return s},kt:function(){return d}});var a=n(7294);function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){r(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function p(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},l=Object.keys(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a<l.length;a++)n=l[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var o=a.createContext({}),u=function(e){var t=a.useContext(o),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},s=function(e){var t=u(e.components);return a.createElement(o.Provider,{value:t},e.children)},m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},c=a.forwardRef((function(e,t){var n=e.components,r=e.mdxType,l=e.originalType,o=e.parentName,s=p(e,["components","mdxType","originalType","parentName"]),c=u(n),d=r,k=c["".concat(o,".").concat(d)]||c[d]||m[d]||l;return n?a.createElement(k,i(i({ref:t},s),{},{components:n})):a.createElement(k,i({ref:t},s))}));function d(e,t){var n=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var l=n.length,i=new Array(l);i[0]=c;var p={};for(var o in t)hasOwnProperty.call(t,o)&&(p[o]=t[o]);p.originalType=e,p.mdxType="string"==typeof e?e:r,i[1]=p;for(var u=2;u<l;u++)i[u]=n[u];return a.createElement.apply(null,i)}return a.createElement.apply(null,n)}c.displayName="MDXCreateElement"},1977:function(e,t,n){n.r(t),n.d(t,{default:function(){return s},frontMatter:function(){return i},metadata:function(){return p},toc:function(){return o}});var a=n(7462),r=n(3366),l=(n(7294),n(3905)),i={sidebar_position:7},p={unversionedId:"java/effective-java/ch7",id:"java/effective-java/ch7",isDocsHomePage:!1,title:"7. \ub78c\ub2e4\uc640 \uc2a4\ud2b8\ub9bc",description:"Java 8\uc5d0\uc11c \ud568\uc218 \uac1d\uccb4\ub97c \ub354 \uc27d\uac8c \ub9cc\ub4e4 \uc218 \uc788\ub3c4\ub85d, functional interface, \ub78c\ub2e4 \ubc0f \uba54\uc18c\ub4dc \ucc38\uc870\uac00 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc2a4\ud2b8\ub9bc API\ub294 \uc774\ub7ec\ud55c \uc5b8\uc5b4 \ubcc0\uacbd\uacfc \ud568\uaed8 \ucd94\uac00\ub418\uc5b4 \ub370\uc774\ud130 \uc694\uc18c\ub4e4\uc758 \uc2dc\ud000\uc2a4 \ucc98\ub9ac\ub97c \uc704\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac \uc9c0\uc6d0\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.",source:"@site/docs/java/effective-java/ch7.md",sourceDirName:"java/effective-java",slug:"/java/effective-java/ch7",permalink:"/til/docs/java/effective-java/ch7",editUrl:"https://github.com/Azderica/til/edit/master/docs/java/effective-java/ch7.md",version:"current",lastUpdatedAt:1625571985,formattedLastUpdatedAt:"7/6/2021",sidebarPosition:7,frontMatter:{sidebar_position:7},sidebar:"tutorialSidebar",previous:{title:"6. Enums \ud0c0\uc785\uacfc \uc5b4\ub178\ud14c\uc774\uc158",permalink:"/til/docs/java/effective-java/ch6"},next:{title:"8. \uba54\uc18c\ub4dc",permalink:"/til/docs/java/effective-java/ch8"}},o=[{value:"Item 42. \uc775\uba85 \ud074\ub798\uc2a4\ubcf4\ub2e4 \ub78c\ub2e4\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.",id:"item-42-\uc775\uba85-\ud074\ub798\uc2a4\ubcf4\ub2e4-\ub78c\ub2e4\ub97c-\uc120\ud0dd\ud569\ub2c8\ub2e4",children:[]},{value:"Item 43. \ub78c\ub2e4\ubcf4\ub2e4 \uba54\uc11c\ub4dc \ucc38\uc870\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.",id:"item-43-\ub78c\ub2e4\ubcf4\ub2e4-\uba54\uc11c\ub4dc-\ucc38\uc870\ub97c-\uc120\ud0dd\ud569\ub2c8\ub2e4",children:[]},{value:"Item 44. \ud45c\uc900 \uae30\ub2a5 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.",id:"item-44-\ud45c\uc900-\uae30\ub2a5-\uc778\ud130\ud398\uc774\uc2a4\ub97c-\uc120\ud0dd\ud569\ub2c8\ub2e4",children:[]},{value:"Item 45. \uc2a4\ud2b8\ub9bc\uc744 \uc2e0\uc911\ud558\uac8c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.",id:"item-45-\uc2a4\ud2b8\ub9bc\uc744-\uc2e0\uc911\ud558\uac8c-\uc0ac\uc6a9\ud569\ub2c8\ub2e4",children:[]},{value:"Item 46. \uc2a4\ud2b8\ub9bc\uc5d0\uc11c \ubd80\uc791\uc6a9\uc774 \uc5c6\ub294 \ud568\uc218\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4.",id:"item-46-\uc2a4\ud2b8\ub9bc\uc5d0\uc11c-\ubd80\uc791\uc6a9\uc774-\uc5c6\ub294-\ud568\uc218\ub97c-\uc120\ud0dd\ud569\ub2c8\ub2e4",children:[]},{value:"Item 47. Return \ud0c0\uc785\uc73c\ub85c \uc2a4\ud2b8\ub9bc\ubcf4\ub2e4\ub294 \uceec\ub809\uc158\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4.",id:"item-47-return-\ud0c0\uc785\uc73c\ub85c-\uc2a4\ud2b8\ub9bc\ubcf4\ub2e4\ub294-\uceec\ub809\uc158\uc744-\uc120\ud0dd\ud569\ub2c8\ub2e4",children:[]},{value:"Item 48. \uc2a4\ud2b8\ub9bc\uc744 \ubcd1\ub82c\ub85c \ub9cc\ub4e4 \ub54c \uc8fc\uc758\ud569\ub2c8\ub2e4.",id:"item-48-\uc2a4\ud2b8\ub9bc\uc744-\ubcd1\ub82c\ub85c-\ub9cc\ub4e4-\ub54c-\uc8fc\uc758\ud569\ub2c8\ub2e4",children:[]}],u={toc:o};function s(e){var t=e.components,n=(0,r.Z)(e,["components"]);return(0,l.kt)("wrapper",(0,a.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,l.kt)("p",null,"Java 8\uc5d0\uc11c \ud568\uc218 \uac1d\uccb4\ub97c \ub354 \uc27d\uac8c \ub9cc\ub4e4 \uc218 \uc788\ub3c4\ub85d, ",(0,l.kt)("inlineCode",{parentName:"p"},"functional interface"),", \ub78c\ub2e4 \ubc0f \uba54\uc18c\ub4dc \ucc38\uc870\uac00 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc2a4\ud2b8\ub9bc API\ub294 \uc774\ub7ec\ud55c \uc5b8\uc5b4 \ubcc0\uacbd\uacfc \ud568\uaed8 \ucd94\uac00\ub418\uc5b4 \ub370\uc774\ud130 \uc694\uc18c\ub4e4\uc758 \uc2dc\ud000\uc2a4 \ucc98\ub9ac\ub97c \uc704\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac \uc9c0\uc6d0\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4."),(0,l.kt)("h2",{id:"item-42-\uc775\uba85-\ud074\ub798\uc2a4\ubcf4\ub2e4-\ub78c\ub2e4\ub97c-\uc120\ud0dd\ud569\ub2c8\ub2e4"},"Item 42. \uc775\uba85 \ud074\ub798\uc2a4\ubcf4\ub2e4 \ub78c\ub2e4\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uacfc\uac70\uc5d0\ub294 \ud558\ub098\uc758 \ucd94\uc0c1 \uba54\uc18c\ub4dc\ub97c \uac00\uc9c4 \uc778\ud130\ud398\uc774\uc2a4\uac00 function types\ub85c \uc0ac\uc6a9\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("c
1ode",{parentName:"pre",className:"language-java"},"// \ud568\uc218 \uac1d\uccb4\ub85c\uc11c\uc758 \uc775\uba85 \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4 - \ud3d0\uae30\ub418\uc5c8\uc74c\nCollections.sort(words, new Comparator<String>() {\n  public int compare(String s1, String s2) {\n    return Integer.compare(s1.length(), s2.length());\n  }\n});\n")),(0,l.kt)("p",null,"\uc774\ub7ec\ud55c \uc775\uba85 \ud074\ub798\uc2a4\ub294 object-oriented \uac1d\uccb4\ub97c \ud544\uc694\ub85c \ud558\ub294 \uace0\uc804\uc801\uc778 \uac1d\uccb4 \uc9c0\ud5a5 \ub514\uc790\uc778 \ud328\ud134(\ud2b9\ud788. Strategy pattern)\uc5d0 \uc801\ud569\ud588\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774\ub294 \ub9e4\uc6b0 \uc560\ub9e4\ubaa8\ud638\ud588\uae30 \ub54c\ubb38\uc5d0 \uc774\ub97c \ub300\uccb4\ud560 \uc218\ub2e8\uc774 \ud544\uc694\ud558\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"Java 8\uc5d0\uc11c\ub294 \ub2e8\uc77c \ucd94\uc131 \uba54\uc11c\ub4dc\uc640\uc758 \uc778\ud130\ud398\uc774\uc2a4\uac00 \ud544\uc694\ud558\ub2e4\ub294 \uac1c\ub150\uc744 \uacf5\uc2dd\ud654\ud558\uc600\uace0, \uc774\ub97c ",(0,l.kt)("inlineCode",{parentName:"p"},"function interface"),"\ub77c\uace0 \uc54c\ub824\uc838 \uc788\uc73c\uba70, \ub78c\ub2e4\uc2dd\uc774\ub098 \ub78c\ub2e4\ub97c \ud1b5\ud574\uc11c \uc774\ub97c \ub9cc\ub4e4 \uc218 \uc788\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-java"},"// \ud568\uc218 \uac1d\uccb4\ub85c\uc11c\uc758 \ub78c\ub2e4 \ud45c\ud604\uc2dd (\uc775\uba85 \ud074\ub798\uc2a4 \ub300\uccb4)\nCollections.sort (words,\n    (s1, s2)-> Integer.compare (s1.length (), s2.length () ));\n")),(0,l.kt)("p",null,"\ud504\ub85c\uadf8\ub7a8\uc774 \uba85\ud655\ud574\uc9c0\uc9c0 \uc54a\ub294 \ud55c, \ubaa8\ub4e0 \ub78c\ub2e4 \ud30c\ub77c\ubbf8\ud130\uc758 \uc720\ud615\uc744 \uc0dd\ub7b5\ud558\ub294 \ubc29\ubc95\uc774 \uc88b\uc2b5\ub2c8\ub2e4. (\ucef4\ud30c\uc77c\ub7ec\uac00 \uc774\ub97c \uc720\ucd94\ud560 \uc218 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \uadf8\ub807\uc2b5\ub2c8\ub2e4.) \uadf8\ub807\uae30 \ub54c\ubb38\uc5d0 ",(0,l.kt)("strong",{parentName:"p"},"\uc55e\uc120 \uc8fc\uc81c\uc5d0\uc11c \ub9d0\ud588\ub4ef\uc774 Raw \ud0c0\uc785\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\ub294 \uac83"),"\uc774 \uc5ec\uae30\uc11c \uc911\uc694\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub610\ud55c \uc774\ub7ec\ud55c \ub78c\ub2e4\uc2dd\uc744 \ud1b5\ud574\uc11c \ub354 \uc9e7\uac8c \ub9cc\ub4e4 \uc218 \uc788\uace0, \uc758\ubbf8\uc801\uc73c\ub85c\ub3c4 \uc798 \ubcf4\uc77c \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-java"},"// Before \ucf54\ub4dc\nCollections.sort(words, comparingInt(String::length));\n\n// After \ucf54\ub4dc\nwords.sort(comparingInt(String::length));\n\n// \ub4a4\uc758 \ucf54\ub4dc\uac00 \uc55e\uc758 \ucf54\ub4dc\ubcf4\ub2e4 \uc9c1\uad00\uc801\uc785\ub2c8\ub2e4.\n")),(0,l.kt)("p",null,"\uc774\uc804 \ucc55\ud130\uc5d0\uc11c \ub098\uc654\ub358 Enum\ud615\uc744 \uc544\ub798\ucc98\ub7fc \uc218\uc815\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-java"},'public enum Operation {\n  PLUS  ("+", (x, y) -> x + y),\n  MINUS ("-", (x, y) -> x - y),\n  TIMES ("*", (x, y) -> x * y),\n  DIVIDE("/", (x, y) -> x / y);\n\n  private final String symbol;\n  private final DoubleBinaryOperator op;\n\n  Operation(String symbol, DoubleBinaryOperator op) {\n    this.symbol = symbol;\n    this.op = op;\n  }\n\n  @Override public String toString() { return symbol; }\n\n  public double apply(double x, double y) {\n    return op.applyAsDouble(x, y);\n  }\n}\n')),(0,l.kt)("p",null,"\uadf8\ub7ec\ub098, \uc774\ub7ec\ud55c ",(0,l.kt)("strong",{parentName:"p"},"\ub78c\ub2e4\ub294 name\uacfc document\uac00 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \uacc4\uc0b0\uc774 \ud655\uc2e4\ud558\uc9c0 \uc54a\uac70\ub098, \uba87\uc904\uc744 \ucd08\uacfc\ud558\ub294 \uacbd\uc6b0\uc5d0\ub294 \ub78c\ub2e4\uc5d0 \ub123\ub294 \uac83\uc740 \uc88b\uc9c0\uc54a\uc2b5\ub2c8\ub2e4.")," (\uc77c\ubc18\uc801\uc73c\ub85c 1\uc904 ~ 3\uc904 \uc0ac\uc774\uac00 \uc801\ud569)"),(0,l.kt)("p",null,"\ud604\uc7ac\ub294 \ub78c\ub2e4\uc758 \ub4f1\uc7a5\uc73c\ub85c \uc775\uba85 \ud074\ub798\uc2a4\ub97c \uac70\uc758 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc9c0\ub9cc, \uc775\uba85 \ud074\ub798\uc2a4\ub9cc \ud560 \uc218 \uc788\ub294 \ubd80\ubd84\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\ub78c\ub2e4\ub294 \uae30\ub2a5 \uc778\ud130\ud398\uc774\uc2a4\ub85c \uc81c\ud55c\ub418\ub098, \ucd94\uc0c1 \ud074\ub798\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ub9cc\ub4e4\ub824\uba74 \ub78c\ub2e4\uac00 \uc544\ub2cc \uc775\uba85 \ud074\ub798\uc2a4\ub85c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("li",{parentName:"ul"},"\uc775\uba85 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud574\uc11c \uc5ec\ub7ec \ucd94\uc0c1 \uba54\uc11c\ub4dc\uac00 \uc788\ub294 \uc778\ud130\ud398\uc774\uc2a4\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ub9cc\ub4e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("li",{parentName:"ul"},"\ub78c\ub2e4\ub294 \uc790\uc2e0\uc5d0 \ub300\ud55c \ucc38\uc870\ub97c \uc5bb\uc744 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4. \uc989, \ubcf8\ubb38 \ub0b4\uc5d0\uc11c \ud568\uc218 \uac1d\uccb4\uc5d0 \uc561\uc138\uc2a4\ud574\uc57c\ud558\ub294 \uacbd\uc6b0 \uc775\uba85 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud574\uc57c\ud569\ub2c8\ub2e4.")),(0,l.kt)("p",null,"\ub78c\ub2e4\ub294 \uad6c\ud604 \uc911\uc5d0 \uc548\uc815\uc801\uc73c\ub85c \uc9c1\ub82c\ud654 \ubc0f \uc5ed \uc9c1\ub82c\ud654 \ud560 \uc218 \uc5c6\ub294 \uc18d\uc131\uc740 \uc775\uba85 \ud074\ub798\uc2a4\uc640 \uacf5\uc720\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c \ub78c\ub2e4\ub098 \uc775\uba85 \ud074\ub798\uc2a4 \uc778\uc2a4\ud134\uc2a4\ub97c \uc9c1\ub82c\ud654\ud558\ub294 \uacbd\uc6b0\ub294 \uac70\uc758 \uc5c6\uc2b5\ub2c8\ub2e4. Comparator \ub4f1\uc758 \uc9c1\ub82c\ud654\ub97c \uc4f8\ub54c\ub294 nested class\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774\ub97c \uc694\uc57d\ud558\uba74 Java 8\uc5d0\uc11c \ub78c\ub2e4\ub294 \uc791\uc740 \ud568\uc218 \uac1d\uccb4\ub97c \ud45c\ud604\ud558\ub294 \uac00\uc7a5 \uc88b\uc740 \ubc29\ubc95\uc785\ub2c8\ub2e4. ",(0,l.kt)("strong",{parentName:"p"},"\uae30\ub2a5 \uc778\ud130\ud398\uc774\uc2a4\uac00 \uc544\ub2cc \uc720\ud615\uc758 \uc778\uc2a4\ud134\uc2a4\ub97c \ub9cc\ub4e4\uc5b4\uc57c\ud558\ub294 \uacbd\uc6b0\uac00 \uc544\ub2c8\uba74, \ud568\uc218 \uac1c\uccb4\uc5d0 \uc775\uba85 \ud074\ub798\uc2a4\ub97c \uc0ac\uc6a9\ud558\uba74 \uc548\ub429\ub2c8\ub2e4.")),(0,l.kt)("br",null),(0,l.kt)("h2",{id:"item-43-\ub78c\ub2e4\ubcf4\ub2e4-\uba54\uc11c\ub4dc-\ucc38\uc870\ub97c-\uc120\ud0dd\ud569\ub2c8\ub2e4"},"Item 43. \ub78c\ub2e4\ubcf4\ub2e4 \uba54\uc11c\ub4dc \ucc38\uc870\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc775\uba85 \ud074\ub798\uc2a4\uc5d0 \ube44\ud574 \ub78c\ub2e4\uc758 \uc8fc\uc694 \uc7a5\uc810\uc740 \ub354 \uac04\uacb0\ud55c \uac83\uc785\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc790\ubc14\uc5d0\uc11c\ub294 \uba54\uc11c\ub4dc \ucc38\uc870\ub97c \ud558\ub294 \ub78c\ub2e4\ubcf4\ub2e4 \ub354 \uac04\uacb0\ud55c \ud568\uc218 \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\ub294 \ubc29\ubc95\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("c
1ode",{parentName:"pre",className:"language-java"},"// \ub78c\ub2e4\uc2dd\uc744 \uc0ac\uc6a9\ud55c \uacbd\uc6b0.\nmap.merge (key, 1, (count, incr)-> count + incr);\n\n// \ub354 \uc9e7\uc740 \ucf54\ub4dc, \uba54\uc11c\ub4dc \ucc38\uc870\nmap.merge (key, 1, Integer::sum);\n")),(0,l.kt)("p",null,"\uba54\uc11c\ub4dc\uc5d0 \ud30c\ub77c\ubbf8\ud130\uac00 \ub9ce\uc744\uc218\ub85d \uba54\uc11c\ub4dc \ucc38\uc870\ub85c \uc81c\uac70\ud560 \uc218 \uc788\ub294 \uc0c1\uc6a9\uad6c\uac00 \ub9ce\uc544\uc9d1\ub2c8\ub2e4. \ub2e4\uc74c\uc740 \uadf8\uc5d0 \ub300\ud55c \uc8fc\uc758\uc0ac\ud56d\uc785\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\ub78c\ub2e4\ub85c \ud560 \uc218 \uc5c6\ub294 \uacbd\uc6b0, \uba54\uc11c\ub4dc \ucc38\uc870\ub85c\ub3c4 \ud560 \uc218 \uc788\ub294 \ubc29\ubc95\uc740 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,l.kt)("li",{parentName:"ul"},"IDE\ub85c \ud504\ub85c\uadf8\ub798\ubc0d\ud558\ub294 \uacbd\uc6b0, \uac00\ub2a5\ud55c \uacbd\uc6b0\uc5d0 \ud55c\ud574 \ub78c\ub2e4\ub97c \uba54\uc11c\ub4dc \ucc38\uc870\ub85c \ub300\uccb4\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.")),(0,l.kt)("p",null,"\uadf8\ub7ec\ub098 \ud56d\uc0c1 \uc774\uac00 \uc633\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4. \ud2b9\ud788 \uba54\uc11c\ub4dc\uac00 \uac19\uc740 \ud074\ub798\uc2a4\uc5d0 \uc788\uc744 \ub54c \uc790\uc8fc \ubc1c\uc0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-java"},"// \uba54\uc11c\ub4dc \ucc38\uc870\nservice.execute (GoshThisClassNameIsHumongous :: action);\n\n// \ub78c\ub2e4\uc2dd \uc0ac\uc6a9 (\uc5ec\uae30\uc11c\ub294 \uc774\uac8c \ub354 \uc88b\uc74c.)\nservice.execute (()-> action ());\n")),(0,l.kt)("p",null,"\uba54\uc11c\ub4dc \ucc38\uc870\uc758 \uc885\ub958\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Method Ref Type"),(0,l.kt)("th",{parentName:"tr",align:null},"Example"),(0,l.kt)("th",{parentName:"tr",align:null},"Lambda Equivalent"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Static"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Integer::parseInt")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"str -> Integer.parseInt(str)"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Bound"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Instant.now()::isAfter")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Instant then = Instant.now();"),(0,l.kt)("br",null),(0,l.kt)("inlineCode",{parentName:"td"},"t->then.isAfter(t)"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"UnBound"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"String::toLowerCase")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"str -> str.toLowerCase()"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Class Constructor"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"TreeMap<K, V>::new")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"() -> new TreeMap<K, V>"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},"Array Constructor"),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"int[]::new")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"len -> new int[len]"))))),(0,l.kt)("p",null,"\uc774\ub97c \uc815\ub9ac\ud558\uba74 \uba54\uc11c\ub4dc \ucc38\uc870\ub294 \uc885\uc885 \ub78c\ub2e4\ubcf4\ub2e4 \uac04\uacb0\ud55c \ub300\uc548\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4. \ub530\ub77c\uc11c, ",(0,l.kt)("strong",{parentName:"p"},"\uba54\uc18c\ub4dc \ucc38\uc870\uac00 \ub354 \uc9e7\uace0 \uba85\ud655\ud55c \uacbd\uc6b0\uc5d0\ub294 \uc774\ub97c \uc0ac\uc6a9\ud558\uace0 \uadf8\ub807\uc9c0 \uc54a\uc740 \uacbd\uc6b0\uc5d0\ub294 \ub78c\ub2e4\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc911\uc694\ud569\ub2c8\ub2e4.")),(0,l.kt)("br",null),(0,l.kt)("h2",{id:"item-44-\ud45c\uc900-\uae30\ub2a5-\uc778\ud130\ud398\uc774\uc2a4\ub97c-\uc120\ud0dd\ud569\ub2c8\ub2e4"},"Item 44. \ud45c\uc900 \uae30\ub2a5 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"Java\uc5d0 \ub78c\ub2e4\uac00 \ub4e4\uc5b4\uc624\uace0 \ub09c \uc774\ud6c4, API \uc791\uc131 \uac00\uc774\ub4dc\uac00 \ubcc0\uacbd\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub300\ud45c\uc801\uc73c\ub85c Map\uc744 \uc4f0\ub294 \uacbd\uc6b0\uc5d0\ub294 LinkedHashMap \ub4f1\uc744 \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4. \uc608\ub97c \ub4e4\uc5b4 Map\uc5d0\uc11c removeEldestEntry\ub97c \uc0ac\uc6a9\ud55c\ub2e4\uace0 \ud588\uc744 \ub54c, LinkedHashMap \uc758 \uacbd\uc6b0\uc5d0\ub294 \uc0ad\uc81c\ud560 \uc218 \uc788\uc9c0\ub9cc Map\uc758 \uacbd\uc6b0\uc5d0\ub294 \uc218\ub3d9\uc801\uc73c\ub85c \uc0dd\uc131\ud574\uc57c\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("c
1ode",{parentName:"pre",className:"language-java"},"// \ubd88\ud544\uc694\ud55c \uae30\ub2a5 \uc778\ud130\ud398\uc774\uc2a4; \ub300\uc2e0 \ud45c\uc900\uc744 \uc0ac\uc6a9\ud558\uc2ed\uc2dc\uc624.\n@FunctionalInterface interface EldestEntryRemovalFunction <K, V> {\n  boolean remove (Map <K, V> map, Map.Entry <K, V> eldest);\n}\n")),(0,l.kt)("p",null,"\uc989, \ud45c\uc900 \uae30\ub2a5 \uc778\ud130\ud398\uc774\uc2a4\uc758 \uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0, ",(0,l.kt)("strong",{parentName:"p"},"\ud2b9\uc218 \ubaa9\uc801\uc73c\ub85c \ub9cc\ub4e0 \uc778\ud130\ud398\uc774\uc2a4\ubcf4\ub2e4\ub294 \ud45c\uc900 \uae30\ub2a5 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc911\uc694\ud569\ub2c8\ub2e4.")),(0,l.kt)("p",null,"\uc544\ub798\ub294 \uae30\ubcf8\uc801\uc778 \uae30\ub2a5 \uc778\ud130\ud398\uc774\uc2a4\uc785\ub2c8\ub2e4."),(0,l.kt)("table",null,(0,l.kt)("thead",{parentName:"table"},(0,l.kt)("tr",{parentName:"thead"},(0,l.kt)("th",{parentName:"tr",align:null},"Interface"),(0,l.kt)("th",{parentName:"tr",align:null},"Function Signature"),(0,l.kt)("th",{parentName:"tr",align:null},"Example"))),(0,l.kt)("tbody",{parentName:"table"},(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"UnaryOperator<T>")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"T apply (T t)")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"String::toLowerCase"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"BinaryOperator<T>")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"T apply (T t1, T t2)")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"BigInteger::add"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Predicate<T>")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"boolean test (T t)")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Collection::isEmpty"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Function<T>")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"R apply (T t)")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Arrays::asList"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Supplier<T>")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"T get ()")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Instant::now"))),(0,l.kt)("tr",{parentName:"tbody"},(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"Consumer<T>")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"void accept (T t)")),(0,l.kt)("td",{parentName:"tr",align:null},(0,l.kt)("inlineCode",{parentName:"td"},"System.out::println"))))),(0,l.kt)("p",null,"\uc774\ub97c \uc0ac\uc6a9\ud574\uc11c \uc5ec\ub7ec \ubcc0\ud615 \ucf00\uc774\uc2a4\ub85c \ub9cc\ub4e4 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub97c \uc0ac\uc6a9\ud558\ub294 \uc5ec\ub7ec \ubcc0\ud615 \ucf00\uc774\uc2a4\uac00 \uc874\uc7ac\ud558\uc9c0\ub9cc, \ub300\ubd80\ubd84\uc758 \ud45c\uc900 \uae30\ub2a5 \uc778\ud130\ud398\uc774\uc2a4\ub294 \uae30\ubcf8 \uc720\ud615\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc744 \uc704\ud574 \uc874\uc7ac\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc989, \uae30\ubcf8 \uae30\ub2a5 \uc778\ud130\ud398\uc774\uc2a4 \ub300\uc2e0 \ub2e4\ub978 \uc694\uc18c(boxed primitives)\uac00 \uc788\ub294 \uc778\ud130\ud398\uc774\uc2a4\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 \uc88b\uc9c0\uc54a\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ubaa9\uc801\uc5d0 \ub9de\ub294 ",(0,l.kt)("strong",{parentName:"p"},"\uc778\ud130\ud398\uc774\uc2a4\uac00 \ud544\uc694\ud55c \uacbd\uc6b0"),"\uc5d0\ub294 \uc544\ub798\uc758 \uc870\uac74\uc778 \uacbd\uc6b0\uc778\uc9c0\ub97c \uc798 \uc0dd\uac01\ud574\ubd10\uc57c\ud569\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\uc77c\ubc18\uc801\uc73c\ub85c \uc0ac\uc6a9\ub418\uba70 \uc124\uba85\uc774 \ud3ec\ud568\ub41c \uc774\ub984\uc774 \ub3c4\uc6c0\uc774 \ub420 \uc218 \uc788\ub294 \uacbd\uc6b0."),
1(0,l.kt)("li",{parentName:"ul"},"\uad00\ub828\ub41c \uac15\ub825\ud55c \uacb0\ud569(contract)\uac00 \uc788\ub294 \uacbd\uc6b0."),(0,l.kt)("li",{parentName:"ul"},"\uc0ac\uc6a9\uc790 \ucee4\uc2a4\ud140 \uba54\uc18c\ub4dc\uac00 \uc774\uc810\uc744 \uac00\uc9c0\uace0 \uc788\ub294 \uacbd\uc6b0.")),(0,l.kt)("p",null,"\ub2e4\ub9cc \uc774\ub7ec\ud55c \uacbd\uc6b0\uc5d0\ub294 \uc2e0\uc911\ud558\uac8c \uc124\uacc4\uac00 \ud544\uc694\ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0, ",(0,l.kt)("inlineCode",{parentName:"p"},"@FunctionalInterface"),"\uc640 \uac19\uc774 \uae30\ub2a5\uc801 \uc778\ud130\ud398\uc774\uc2a4\uc5d0\ub294 \uc5b4\ub178\ud14c\uc774\uc158\uc744 \ucd94\uac00\ud574\uc57c\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc694\uc57d\ud558\uba74, Java\uc5d0\uc11c\ub294 \ub78c\ub2e4\uac00 \uc788\uae30 \ub54c\ubb38\uc5d0 \uc774\ub97c \uc0dd\uac01\ud558\uace0 API\ub97c \uc0dd\uacc4\ud558\ub294 \uac83\uc774 \uc911\uc694\ud569\ub2c8\ub2e4."),(0,l.kt)("br",null),(0,l.kt)("h2",{id:"item-45-\uc2a4\ud2b8\ub9bc\uc744-\uc2e0\uc911\ud558\uac8c-\uc0ac\uc6a9\ud569\ub2c8\ub2e4"},"Item 45. \uc2a4\ud2b8\ub9bc\uc744 \uc2e0\uc911\ud558\uac8c \uc0ac\uc6a9\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"Stream API\ub294 \ub300\ub7c9 \uc791\uc5c5\uc744 \uc21c\ucc28\uc801\uc73c\ub85c \ub610\ub294 \ubcd1\ub82c\uc801\uc73c\ub85c \uc218\ud589\ud558\ub294 \uc791\uc5c5\uc744 \uc27d\uac8c\ud558\uae30 \uc704\ud574\uc11c Java 8\uc5d0 \ucd94\uac00\ub418\uc5c8\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"Stream API\ub294 \ub2e4\uc74c\uc758 \ud2b9\uc9d5\uc744 \uac00\uc9d1\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"Stream pipeline\uc740 source stream\uacfc 0\uac1c \uc774\uc0c1\uc758 intermediate operation, \ud558\ub098\uc758 terminal operation\uc73c\ub85c \ub098\ub220\uc9d1\ub2c8\ub2e4."),(0,l.kt)("li",{parentName:"ul"},"Stream pipeline\uc740 lazily\ud558\uac8c \ud3c9\uac00\ub429\ub2c8\ub2e4. (\ud638\ucd9c\ub420 \ub54c\uae4c\uc9c0 \uc2dc\uc791\ub418\uc9c0 \uc54a\uc73c\uba70, \ud544\uc694\uc5c6\ub294 \ub370\uc774\ud130 \uc694\uc18c\ub294 \uacc4\uc0b0\ub418\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.)"),(0,l.kt)("li",{parentName:"ul"},"Stream API\ub294 \uc720\uc5f0\ud569\ub2c8\ub2e4. (\ubaa8\ub4e0 \ud638\ucd9c\uc774 \ub2e8\uc77c \ud45c\ud604\uc2dd\uc73c\ub85c \uc5f0\uacb0 \uac00\ub2a5\ud569\ub2c8\ub2e4.)"),(0,l.kt)("li",{parentName:"ul"},"Stream pipeline\uc740 \uc21c\ucc28\uc801\uc73c\ub85c \uc2e4\ud589\ub429\ub2c8\ub2e4."),(0,l.kt)("li",{parentName:"ul"},"Stream API\ub294 \ub2e4\uc7ac\ub2e4\ub2a5\ud558\uc9c0\ub9cc, \ud56d\uc0c1 \uc774\ub807\uac8c \ud574\uc57c\ud558\uc9c0\ub294 \uc54a\uc2b5\ub2c8\ub2e4. (\uc798\ubabb \uc0ac\uc6a9\ud558\uba74, \uc720\uc9c0\ubcf4\uc218\uc131\uc774 \ub5a8\uc5b4\uc9d1\ub2c8\ub2e4.)")),(0,l.kt)("p",null,"Stream\uc744 \ub0a8\uc6a9\ud55c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-java"},'// Overuse of streams - don\'t do this!\npublic class Anagrams {\n  public static void main(String[] args) throws IOException {\n    Path dictionary = Paths.get(args[0]);\n    int minGroupSize = Integer.parseInt(args[1]);\n\n    try (Stream<String> words = Files.lines(dictionary)) {\n      words.collect(groupingBy(word -> word.chars()\n        .sorted()\n        .collect(StringBuilder::new, (sb, c) -> sb.append((char) c),\n          StringBuilder::append).toString()))\n        .values().stream()\n        .filter(group -> group.size() >= minGroupSize)\n        .map(group -> group.size() + ": " + group)\n        .forEach(System.out::println);\n    }\n  }\n}\n')),(0,l.kt)("p",null,"\uc774 \uacbd\uc6b0, \ud504\ub85c\uadf8\ub7a8\uc744 \uc77d\uace0 \uc720\uc9c0\ud558\uae30\uac00 \ub9e4\uc6b0 \uc5b4\ub835\uc2b5\ub2c8\ub2e4. Stream\uc744 \uc798\uc0ac\uc6a9\ud55c \ucf00\uc774\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-java"},'// \uc138\ub828\ub41c \uc2a4\ud2b8\ub9bc \uc0ac\uc6a9\uc73c\ub85c \uba85\ud655\uc131\uacfc \uac04\uacb0\ud568 \ud5a5\uc0c1\npublic class Anagrams {\n  public static void main(String[] args) throws IOException {\n    Path dictionary = Paths.get(args[0]);\n    int minGroupSize = Integer.parseInt(args[1]);\n\n    try (Stream<String> words = Files.lines(dictionary)) {\n      words\n        .collect(groupingBy(word -> alphabetize(word)))\n        .values().stream()\n        .filter(group -> group.size() >= minGroupSize)\n        .forEach(g -> System.out.println(g.size() + ": " + g));\n      }\n  }\n// alphabetize method is the same as in original version\n...\n}\n')),(0,l.kt)("p",null,"\uc774\uc640 \uac19\uc774 \ud45c\ud604\ud558\uba74, \ud504\ub85c\uadf8\ub7a8\uc744 \uc774\ud574\ud558\uae30 \uc5b4\ub835\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0, \ub78c\ub2e4 \ub9e4\uac1c \ubcc0\uc218\uc758 \uc774\ub984\ub3c4 \uc2e0\uc911\ud558\uac8c \uc120\uc815\ud574\uc57c\ud569\ub2c8\ub2e4. \uba85\uc2dc\uc801 \uc720\ud615\uc774 \uc5c6\uae30 \ub54c\ubb38\uc5d0, \uc2a4\ud2b8\ub9bc \ud30c\uc774\ud504\ud30c\ub9b0\uc758 \uac00\ub3c5\uc131\uc744 \ub192\uc774\uae30 \uc704\ud574\uc11c\ub77c\ub3c4 \uc774\ub984 \uc120\uc815\uc740 \uc911\uc694\ud55c \uc5ed\ud560\uc744 \uac00\uc9c0\uace0 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub610\ud55c, ",(0,l.kt)("strong",{parentName:"p"},"\ud30c\uc774\ud504 \ub77c\uc778\uc5d0\uc11c\ub294 \uba85\uc2dc\uc801\uc778 \uc720\ud615 \uc815\ubcf4\uc640 \uc784\uc2dc \ubcc0\uc218\uac00 \uc5c6\uae30 \ub54c\ubb38\uc5d0 \ub3c4\uc6b0\ubbf8 \uba54\uc11c\ub4dc\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 \ubc18\ubcf5 \ucf54\ub4dc\ubcf4\ub2e4 \uc2a4\ud2b8\ub9bc \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uac00\ub3c5\uc131\uc744 \uc704\ud574 \ub9e4\uc6b0 \uc911\uc694\ud569\ub2c8\ub2e4.")),(0,l.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4, \uc544\ub798 \ucf54\ub4dc\ub294 \uc774\ub7ec\ud55c \uc2a4\ud2b8\ub9bc\uc744 \uc798\ubabb \uc0ac\uc6a9\ud55c \ucf00\uc774\uc2a4\uc785\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("c
1ode",{parentName:"pre",className:"language-java"},'"Hello world!".chars().forEach(System.out :: print);\n// output : 721011081081113211911111410810033 (type\uc744 \ubaa8\ub974\ubbc0\ub85c)\n\n"Hello world!".chars().forEach(x-> System.out.print ((char) x));\n// \uc218\uc815\ud55c \ucf00\uc774\uc2a4, but \uc774\ub807\uac8c \uc0ac\uc6a9\ud558\ub294 \uac83\uc740 \uc88b\uc9c0\uc54a\uc74c\n')),(0,l.kt)("p",null,"\uc774\uc640 \uac19\uc774 \uc2a4\ud2b8\ub9bc \ud30c\uc774\ud504\ub77c\uc778\uc5d0\uc11c \uc0ac\uc6a9\ud560 \uc218 \uc5c6\ub294 \uba87\uac00\uc9c0 \uc791\uc5c5\uc774 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\ucf54\ub4dc \ube14\ub85d\uc5d0\uc11c\ub294 \ubc94\uc704\uc758 \ubaa8\ub4e0 \uc9c0\uc5ed \ubcc0\uc218\ub97c \uc77d\uac70\ub098 \uc218\uc815\uc774 \uac00\ub2a5\ud558\uc9c0\ub9cc, \ub78c\ub2e4\uc5d0\uc11c\ub294 \ucd5c\uc885\ub9cc \uc77d\uc744 \uc218 \uc788\uae30\ub54c\ubb38\uc5d0 \uc9c0\uc5ed\ubcc0\uc218\ub97c \uc218\uc815\ud560 \uc218 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,l.kt)("li",{parentName:"ul"},"\ucf54\ub4dc \ube14\ub85d return\uc5d0\uc11c \ub458\ub7ec\uc2f8\ub294 \uba54\uc11c\ub4dc break, continue, \uc608\uc678 throw \ub4f1\uc774 \uac00\ub2a5\ud558\uc9c0\ub9cc \ub78c\ub2e4\uc5d0\uc11c\ub294 \ubd88\uac00\ub2a5\ud569\ub2c8\ub2e4.")),(0,l.kt)("p",null,"\uadf8\ub7ec\ub098 \uc2a4\ud2b8\ub9bc\uc5d0\uc11c \uc801\uc808\ud55c \ub3d9\uc791\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},"\uc694\uc18c \uc2dc\ud000\uc2a4\ub97c \uade0\uc77c\ud558\uac8c \ubcc0\uacbd"),(0,l.kt)("li",{parentName:"ul"},"\uc694\uc18c \uc2dc\ud000\uc2a4 \ud544\ud130\ub9c1"),(0,l.kt)("li",{parentName:"ul"},"\ub2e8\uc77c \uc791\uc5c5\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc694\uc18c \uc2dc\ud000\uc2a4 \uacb0\ud569(\uc694\uc18c \ucd94\uac00 \ubc0f \ucd5c\uc18c\uac12 \uacc4\uc0b0)"),(0,l.kt)("li",{parentName:"ul"},"\uc694\uc18c\uc758 \uc2dc\ud000\uc2a4\ub97c \uceec\ub809\uc158\uc73c\ub85c \ud569\uccd0\uc11c, \uacf5\ud1b5 \uc18d\uc131\ubcc4\ub85c \uadf8\ub8f9\ud654"),(0,l.kt)("li",{parentName:"ul"},"\uc77c\ubd80 \uae30\uc900\uc744 \ucda9\uc871\ud558\ub294 \uc694\uc18c\uc5d0 \ub300\ud55c \uc694\uc18c \uc2dc\ud000\uc2a4\ub97c \uac80\uc0c9")),(0,l.kt)("p",null,"\uc774\ub7ec\ud55c \uacbd\uc6b0\uc5d0 \ub9e4\uc6b0 \uc88b\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc2a4\ud2b8\ub9bc\uc744 \uc0ac\uc6a9\ud558\uba74 \uc544\ub798\ucc98\ub7fc \uc774\uc05c \ucf54\ub4dc\ub97c \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-java"},"// \uac00\uc7a5 \ud070 \uba54\ub974\uc13c \uc18c\uc218 20\uac1c\ub97c \ucd9c\ub825\ud558\ub294 \ucf54\ub4dc.\npublic static void main(String[] args) {\n  primes().map(p -> TWO.pow(p.intValueExact()).subtract(ONE))\n    .filter(mersenne -> mersenne.isProbablePrime(50))\n    .limit(20)\n    .forEach(System.out::println);\n}\n")),(0,l.kt)("p",null,"\uadf8\ub7ec\ub098 \ud56d\uc0c1 Stream\uc744 \uc4f8\uc9c0, \ud639\uc740 iteration\uc744 \uc0ac\uc6a9\ud560\uc9c0\ub294 \uc560\ub9e4\ud55c \uacbd\uc6b0\uac00 \ub9ce\uc2b5\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uacbd\uc6b0\uc5d0\uc11c\ub294 \uac1c\ubc1c\uc790\uc758 \ucde8\ud5a5\uc5d0 \uac00\uae5d\uc2b5\ub2c8\ub2e4. \uc989, ",(0,l.kt)("strong",{parentName:"p"},"\uc5b4\ub5a4 \uc791\uc5c5\uc774 Stream\uc774\ub098 Iteration\uc5d0 \uc758\ud574 \ub354 \ub098\uc740\uac74\uc9c0 \ud655\uc2e4\ud558\uc9c0 \uc54a\uae30 \ub54c\ubb38\uc5d0, \ub450\uac00\uc9c0 \ubaa8\ub450\ub97c \uc2dc\ub3c4\ud558\uace0 \uc5b4\ub5a4 \uac83\uc774 \ub098\uc744\uc9c0 \uace0\ub974\ub294 \uac83\uc774 \uc911\uc694\ud569\ub2c8\ub2e4.")),(0,l.kt)("br",null),(0,l.kt)("h2",{id:"item-46-\uc2a4\ud2b8\ub9bc\uc5d0\uc11c-\ubd80\uc791\uc6a9\uc774-\uc5c6\ub294-\ud568\uc218\ub97c-\uc120\ud0dd\ud569\ub2c8\ub2e4"},"Item 46. \uc2a4\ud2b8\ub9bc\uc5d0\uc11c \ubd80\uc791\uc6a9\uc774 \uc5c6\ub294 \ud568\uc218\ub97c \uc120\ud0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc2a4\ud2b8\ub9bc\uc740 \ub2e8\uc21c\ud55c API\uac00 \uc544\ub2c8\ub77c, \ud568\uc218\ud615 \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \uae30\ubc18\uc73c\ub85c \ud558\ub294 \ud328\ub7ec\ub2e4\uc784\uc785\ub2c8\ub2e4. \uc774\ub7ec\ud55c \uc2a4\ud2b8\ub9bc\uc774 \uc81c\uacf5\ud574\uc57c\ud558\ub294 \ud45c\ud604\uc131\uacfc \uc18d\ub3c4, \uacbd\uc6b0\uc5d0 \ub530\ub77c \ubcd1\ub82c\ud654 \uac00\ub2a5\uc131\uc744 \uc5bb\uae30\uc704\ud574\uc11c\ub294 \ud328\ub7ec\ub2e4\uc784\uacfc API\ub97c \ucc44\ud0dd\ud574\uc57c\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc2a4\ud2b8\ub9bc \ud328\ub7ec\ub2e4\uc784\uc758 \uac00\uc7a5 \uc911\uc694\ud55c \ubd80\ubd84\uc740 \uac01 \ub2e8\uacc4\uc758 \uacb0\uacfc\uac00 \uc774\uc804 \ub2e8\uacc4\uc758 ",(0,l.kt)("inlineCode",{parentName:"p"},"pure function"),"\uc5d0 \ucd5c\ub300\ud55c \uac00\uae4c\uc6b4 \ubcc0\ud658 \uc2dc\ud000\uc2a4\ub85c \uacc4\uc0b0\uc744 \uad6c\uc131\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. (",(0,l.kt)("inlineCode",{parentName:"p"},"pure function"),"\uc740 \uacb0\uacfc\uac00 \uc785\ub825\uc5d0\ub9cc \uc758\uc874\ud558\ub294 \ud568\uc218\uc785\ub2c8\ub2e4. \uc989, \ubcc0\uacbd \uac00\ub2a5\ud55c \uc0c1\ud0dc\uc5d0 \uc758\uc874\ud558\uc9c0 \uc54a\uc73c\uba70 \uc5b4\ub5a4 \uc0c1\ud0dc\ub3c4 \uc5c5\ub370\uc774\ud2b8\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.)"),(0,l.kt)("pre",null,(0,l.kt)("c
1ode",{parentName:"pre",className:"language-java"},"Map <String, Long> freq = new HashMap <> ();\n\n// \uc798\ubabb \uc2a4\ud2b8\ub9bc\uc744 \uc0ac\uc6a9\ud55c \uacbd\uc6b0.\ntry (Stream <String> words = new Scanner (file) .tokens ()) {\n  words.forEach (word-> {\n    freq.merge (word.toLowerCase (), 1L, Long::sum);\n  });\n}\n\n// \uc2a4\ud2b8\ub9bc API\ub97c \uc798 \uc0ac\uc6a9\ud55c \uacbd\uc6b0.\ntry (Stream <String> words = new Scanner (file) .tokens ()) {\n  freq = words.collect(groupingBy(String::toLowerCase, counting()));\n}\n")),(0,l.kt)("p",null,"\uc704\uc640 \uac19\uc774 ",(0,l.kt)("inlineCode",{parentName:"p"},"forEach")," \uc5f0\uc0b0\uc740 \ub3d9\uc791 \uc5f0\uc0b0\uc744 \uc218\ud589\ud558\uc9c0 \uc54a\uac8c ",(0,l.kt)("strong",{parentName:"p"},"\uc2a4\ud2b8\ub9bc \uacb0\uacfc\ub97c \ubcf4\uace0\ud558\ub294 \ubaa9\uc801\uc73c\ub85c \uc0ac\uc6a9"),"\ud574\uc57c\ud569\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-java"},"// freq \ud14c\uc774\ube14\uc5d0\uc11c \uc0c1\uc704 10 \uac1c \ub2e8\uc5b4 \ubaa9\ub85d\uc744 \uac00\uc838 \uc624\ub294 \ud30c\uc774\ud504 \ub77c\uc778\nList <String> topTen = freq.keySet().stream()\n    .sorted (comparison(freq::get).reversed()).limit(10)\n    .collect (toList ());\n")),(0,l.kt)("p",null,"\uadf8\ub9ac\uace0 \ud574\ub2f9 \ucf54\ub4dc\ucc98\ub7fc, Collectors\uc758 member\ub97c \uc815\uc801\uc73c\ub85c \uac00\uc838\uc624\ub294 \uac83\uc774 \uc2a4\ud2b8\ub9bc \ud30c\uc774\ud504\ub77c\uc778\uc744 \ub354 \uc77d\uae30 \uc27d\uac8c \ub9cc\ub4ed\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc774\uc678\uc5d0\ub3c4 \uc5ec\ub7ec\uac1c\uc758 Collectors\ub4e4\uc774 \uc874\uc7ac\ud569\ub2c8\ub2e4. \uc2a4\ud2b8\ub9bc \ud30c\uc774\ud504 \ub77c\uc778 \ud504\ub85c\uadf8\ub798\ubc0d\uc758 \ubcf8\uc9c8\uc740 \ubd80\uc791\uc6a9\uc774 \uc5c6\ub294 \ud568\uc218 \uac1d\uccb4\ub97c \uad6c\uc131\ud558\ub294 \uac83\uc785\ub2c8\ub2e4. \uc774\ub294 \uc2a4\ud2b8\ub9bc \ubc0f \uad00\ub828 \uac1c\uccb4\uc5d0 \uc804\ub2ec\ub41c \ub9ce\uc740 \ud568\uc218 \uac1c\uccb4 \ubaa8\ub450\uc5d0 \uc801\uc6a9\ub429\ub2c8\ub2e4."),(0,l.kt)("ul",null,(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"forEach")," : \uacc4\uc0b0\uc744 \uc218\ud589\ud558\ub294 \uac83\uc774 \ubaa9\uc801\uc774 \uc544\ub2c8\ub77c, \uc2a4\ud2b8\ub9bc\uc5d0 \uc758\ud574 \uc218\ud589\ub41c \uacc4\uc0b0 \uacb0\uacfc\ub97c \ubcf4\uace0\ud574\uc57c\ud558\ub294 \uacf3\uc5d0 \uc0ac\uc6a9\ud574\uc57c\ud569\ub2c8\ub2e4."),(0,l.kt)("li",{parentName:"ul"},(0,l.kt)("inlineCode",{parentName:"li"},"toList"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"toSet"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"toMap"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"groupingBy"),", ",(0,l.kt)("inlineCode",{parentName:"li"},"joining")," \ub4f1\uc758 Collector factories\ub97c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc911\uc694\ud569\ub2c8\ub2e4.")),(0,l.kt)("br",null),(0,l.kt)("h2",{id:"item-47-return-\ud0c0\uc785\uc73c\ub85c-\uc2a4\ud2b8\ub9bc\ubcf4\ub2e4\ub294-\uceec\ub809\uc158\uc744-\uc120\ud0dd\ud569\ub2c8\ub2e4"},"Item 47. Return \ud0c0\uc785\uc73c\ub85c \uc2a4\ud2b8\ub9bc\ubcf4\ub2e4\ub294 \uceec\ub809\uc158\uc744 \uc120\ud0dd\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub9ce\uc740 \uba54\uc11c\ub4dc\ub4e4\uc740 element \uc2dc\ud000\uc2a4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. \uadf8\ub7ec\ub098 Java 8\uc5d0\uc11c \uc2a4\ud2b8\ub9bc\uc774 \uc5ec\ub7ec \ud50c\ub7ab\ud3fc\uc5d0 \ucd94\uac00\ub418\uc5b4\uc11c sequence \ubc18\ud658 \ubc29\ubc95\uc5d0 \ub300\ud574 \uc801\uc808\ud55c \ubc18\ud658 \uc720\ud615\uc744 \uc120\uc815\ud558\ub294 \ubc29\ubc95\uc774 \uc5b4\ub824\uc6cc\uc84c\uc2b5\ub2c8\ub2e4. \ub2e4\ub9cc \uc774\uc5d0 \ub300\ud55c \uba85\ud655\ud55c \ud574\uacb0\ucc45\uc740 \uc5c6\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-java"},"// Stream <E>\uc5d0\uc11c Iterable <E> \ub85c\uc758 Adapter\npublic static <E> Iterable <E> iterableOf (Stream <E> stream) {\n  return stream::iterator;\n}\n\n// Iterable <E>\uc5d0\uc11c Stream <E> \ub85c\uc758 Adapter\npublic static <E> Stream <E> streamOf (Iterable <E> iterable) {\n  return StreamSupport.stream (iterable.spliterator (), false);\n}\n")),(0,l.kt)("p",null,"\ub2e4\uc74c\uacfc \uac19\uc774 for-each \ubb38\uc73c\ub85c \ubcc0\ud658 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. Collection \uc778\ud130\ud398\uc774\uc2a4 \ud558\uc704 \uc720\ud615 Iterable \ubc0f \ubcf4\uc720 stream\uc774 \ubc18\ubcf5 \uc2a4\ud2b8\ub9bc \uc561\uc138\uc2a4\ub97c \ubaa8\ub450 \uc81c\uacf5\ud558\uae30 \ub54c\ubb38\uc5d0, ",(0,l.kt)("strong",{parentName:"p"},"Collection\uc774\ub098 \uc801\uc808\ud55c subType \ub4f1\uc774 public, sequence-returning \uba54\uc11c\ub4dc\uc5d0 \uac00\uc7a5 \uc801\ud569\ud569\ub2c8\ub2e4.")," \ub2e4\ub9cc, ",(0,l.kt)("strong",{parentName:"p"},"Collection \ubc18\ud658\uc744 \uc704\ud574 \uba54\ubaa8\ub9ac\uc5d0 \ud070 \uc2dc\ud000\uc2a4\ub97c \uc800\uc7a5\ud558\ub294 \uac83\uc740 \uc88b\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4.")),(0,l.kt)("p",null,"\uc774\ub97c \uc0ac\uc6a9\ud55c \ucf54\ub4dc\ub294 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("c
1ode",{parentName:"pre",className:"language-java"},'// Returns the power set of an input set as custom collection\npublic class PowerSet {\n  public static final <E> Collection<Set<E>> of(Set<E> s) {\n    List<E> src = new ArrayList<>(s);\n    if (src.size() > 30)\n      throw new IllegalArgumentException("Set too big " + s);\n    return new AbstractList<Set<E>>() {\n      @Override public int size() {\n        return 1 << src.size(); // 2 to the power src.size()\n      }\n\n      @Override public boolean contains(Object o) {\n        return o instanceof Set && src.containsAll((Set)o);\n      }\n\n      @Override public Set<E> get(int index) {\n        Set<E> result = new HashSet<>();\n        for (int i = 0; index != 0; i++, index >>= 1)\n          if ((index & 1) == 1)\n            result.add(src.get(i));\n        return result;\n      }\n    };\n  }\n}\n')),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-java"},"// \uc785\ub825 \ubaa9\ub85d\uc758 \ubaa8\ub4e0 \ud558\uc704 \ubaa9\ub85d \uc2a4\ud2b8\ub9bc\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.\npublic class SubLists {\n  public static <E> Stream <List<E>> of (List <E> list) {\n    return Stream.concat (Stream.of (Collections.emptyList) ()),\n        prefixes (list) .flatMap (SubLists :: suffixes));\n  }\n\n  private static <E> Stream <List<E>> prefixes (List <E> list) {\n    return IntStream.rangeClosed (1, list.size ())\n        .mapToObj (end-> list.subList (0, end)) ;\n  }\n\n  private static <E> Stream <List<E>> suffixes (List <E> list) {\n    return IntStream.range (0, list.size ())\n        .mapToObj (start-> list.subList (start, list.size ( )));\n  }\n}\n")),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-java"},"// \uc785\ub825 \ubaa9\ub85d\uc758 \ubaa8\ub4e0 \ud558\uc704 \ubaa9\ub85d \uc2a4\ud2b8\ub9bc\uc744 \ubc18\ud658\ud569\ub2c8\ub2e4.\npublic static <E> Stream <List <E >> of (List <E> list) {\n  return IntStream.range (0, list.size ())\n      .mapToObj (\n        start- > IntStream.rangeClosed (start + 1, list.size ())\n            .mapToObj (end-> list.subList (start, end)))\n      .flatMap (x-> x);\n}\n")),(0,l.kt)("p",null,"\uc774\uc640 \uac19\uc774, element \uc2dc\ud000\uc2a4\ub97c \ubc18\ud658\ud558\ub294 \uba54\uc11c\ub4dc\ub97c \uc791\uc131\ud560 \ub54c, \uc77c\ubd80 \uc0ac\uc6a9\uc790\ub294 stream\uc73c\ub85c \ucc98\ub9ac\ud558\uace0 \ub2e4\ub978 \uc0ac\uc6a9\uc790\ub294 iteration\uc73c\ub85c \uc0ac\uc6a9\ud558\ub294 \uac83\uc744 \uc88b\uc544\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \ub458\ub2e4 \uc798\ubabb\ub41c \uac83\uc774 \uc544\ub2c8\uace0, \uc774 \ub450\uac1c\ub97c \ud544\uc694\uc5d0 \ub530\ub77c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uc88b\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 Collections\ub85c \ubc18\ud658\ud560 \uc218 \uc788\uc73c\uba74 \uc88b\uc2b5\ub2c8\ub2e4. (\uc791\uc740 \uacbd\uc6b0, ArrayList / \ud070 \uacbd\uc6b0, \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uceec\ub809\uc158)"),(0,l.kt)("br",null),(0,l.kt)("h2",{id:"item-48-\uc2a4\ud2b8\ub9bc\uc744-\ubcd1\ub82c\ub85c-\ub9cc\ub4e4-\ub54c-\uc8fc\uc758\ud569\ub2c8\ub2e4"},"Item 48. \uc2a4\ud2b8\ub9bc\uc744 \ubcd1\ub82c\ub85c \ub9cc\ub4e4 \ub54c \uc8fc\uc758\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"Java\ub294 \ub3d9\uc2dc \ud504\ub85c\uadf8\ub798\ubc0d \uc791\uc5c5\uc744 \uc6a9\uc774\ud558\uac8c \ud558\uae30 \uc704\ud574 \ub9ce\uc740 \ub178\ub825\uc744 \ud588\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc608\ub97c \ub4e4\uc5b4 \ub2e4\uc74c\uc758 \ucf54\ub4dc\ub97c \ubcd1\ub82c\ub85c \uad6c\uc131\ud558\ub294 \uacbd\uc6b0\uc785\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("code",{parentName:"pre",className:"language-java"},"// \ucc98\uc74c 20 \uac1c\uc758 Mersenne \uc18c\uc218\ub97c \uc0dd\uc131\ud558\ub294 \uc2a4\ud2b8\ub9bc \uae30\ubc18 \ud504\ub85c\uadf8\ub7a8\npublic static void main (String [] args) {\n  primes (). map (p-> TWO.pow (p.intValueExact ()). subtract (ONE))\n      .filter (mersenne-> mersenne.isProbablePrime (50))\n      .limit ( 20) .forEach (System.out :: println);\n}\n\nstatic Stream <BigInteger> primes () {\n  return Stream.iterate (TWO, BigInteger :: nextProbablePrime);\n}\n")),(0,l.kt)("p",null,"\uc774 \uc791\uc5c5\uc744 parallel() \uc2a4\ud2b8\ub9bc \ud30c\uc774\ud504 \ub77c\uc778\uc5d0 \ud638\ucd9c\uc744 \ucd94\uac00\ud574\uc11c \uc18d\ub3c4\ub97c \ub192\uc77c\ub824\uace0\ud558\uba74, \uc774\ub97c \ubcd1\ub82c\ud654 \ud558\ub294 \ubc29\ubc95\uc744 \ubaa8\ub974\uae30 \ub54c\ubb38\uc5d0 \uc2e4\ud328\ud569\ub2c8\ub2e4. \uc989, ",(0,l.kt)("strong",{parentName:"p"},"\ucd5c\uc0c1\uc758 \uc0c1\ud669\uc5d0\uc11c Stream.iteration\uc774\uac70\ub098 intermediate operation limited\uac00 \uc0ac\uc6a9\ub418\ub294 \uacbd\uc6b0 \ud30c\uc774\ud504 \ub77c\uc778\uc744 \ubcd1\ub82c\ud654\ud574\ub3c4 \uc131\ub2a5\uc801\uc778 \uc774\ub4dd\uc740 \uc5c6\uc2b5\ub2c8\ub2e4.")," \ub530\ub77c\uc11c \uc2a4\ud2b8\ub9bc \ud30c\uc774\ud504\ub77c\uc778\uc744 \ubb34\ucc28\ubcc4\uc801\uc73c\ub85c \ubcd1\ub82c\ud654\ud558\ub294 \uac83\uc774 \uc88b\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc77c\ubc18\uc801\uc73c\ub85c ",(0,l.kt)("inlineCode",{parentName:"p"},"ArrayList"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"HashMap"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"HashSet"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"ConcurrentHashMap"),", ",(0,l.kt)("inlineCode",{parentName:"p"},"arrays"),", int \ubc94\uc704, long \ubc94\uc704 \ub4f1\uc774 \ubcd1\ub82c \ucc98\ub9ac\uc758 \uc131\ub2a5 \ud5a5\uc0c1\uc744 \ud1b5\ud574 \uc2a4\ud2b8\ub9bc\uc5d0 \uac00\uc7a5 \uc801\ud569\ud569\ub2c8\ub2e4."),(0,l.kt)("p",null,"\uc2a4\ud2b8\ub9bc\uc744 \ubcd1\ub82c\ud654\ub97c \ud558\uac8c \ub418\uc5c8\uc744 \ub54c, \uc7a5\uc560 \ubc0f \uc131\ub2a5 \uc800\ud558\uac00 \ubc1c\uc0dd\ud560 \uc218 \uc788\uac8c \ub418\uc5c8\uc73c\uba70 \uc798\ubabb\ub41c \uacb0\uacfc \ubc0f \uc608\uce21\ud560 \uc218 \uc5c6\ub294 \ub3d9\uc791\uc73c\ub85c \uc774\uc5b4\uc9c0\uac8c \ub429\ub2c8\ub2e4."),(0,l.kt)("p",null,"\ub2e4\ub9cc \uc801\uc808\ud55c \uc0c1\ud669\uc5d0\uc11c, \uc2a4\ud2b8\ub9bc \ud30c\uc774\ud504\ub77c\uc778\uc5d0 parallel(\ubcd1\ub82c) \ud638\ucd9c\uc744 \ucd94\uac00\ud558\ub294 \uac83\ub9cc\uc73c\ub85c \ud504\ub85c\uc138\uc11c \ucf54\uc5b4 \uc218\uc5d0\uc11c \uac70\uc758 \uc120\ud615\uc5d0 \uac00\uae4c\uc6b4 \uc18d\ub3c4 \ud5a5\uc0c1\uc744 \ub2ec\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4."),(0,l.kt)("pre",null,(0,l.kt)("c
1ode",{parentName:"pre",className:"language-java"},"// \uc18c\uc218 \uacc4\uc0b0 \uc2a4\ud2b8\ub9bc \ud30c\uc774\ud504 \ub77c\uc778-\ubcd1\ub82c\ud654\uc758 \uc774\uc810\nstatic long pi (long n) {\n  return LongStream.rangeClosed (2, n)\n      .mapToObj (BigInteger :: valueOf)\n      .filter (i-> i.isProbablePrime (50))\n      .count();\n}\n\n// \uc544\ub798\ub294 parallel()\uc744 \ud1b5\ud574 \uc2dc\uac04 \ub2e8\ucd95\uc744 \ud55c \uacbd\uc6b0\uc785\ub2c8\ub2e4.\nstatic long pi (long n) {\n  return LongStream.rangeClosed (2, n)\n      .parallel ()\n      .mapToObj (BigInteger :: valueOf)\n      .filter (i-> i.isProbablePrime (50 ))\n      .count ();\n}\n")),(0,l.kt)("p",null,(0,l.kt)("strong",{parentName:"p"},"\uacc4\uc0b0\uc758 \uc815\ud655\uc131\uc744 \uc720\uc9c0\ud558\uace0 \uc18d\ub3c4\ub97c \ub192\uc77c \uac83\uc774\ub77c\uace0 \ubbff\uc744 \ucda9\ubd84\ud55c \uc774\uc720\uac00 \uc5c6\ub294 \uacbd\uc6b0, \uc2a4\ud2b8\ub9bc \ud30c\uc774\ud504 \ub77c\uc778\uc744 \ubcd1\ub82c\ud654\ud558\ub294 \uac83\uc740 \uc88b\uc9c0\uc54a\uc2b5\ub2c8\ub2e4.")," \uc774\ub97c \uc0ac\uc6a9\ud560 \ub54c\ub294, \uc62c\ubc14\ub978 \uc0c1\ud0dc\ub97c \uc720\uc9c0\ud558\uace0, \uc2e0\uc911\ud55c \uc131\ub2a5 \uce21\uc815\uc744 \uc218\ud589\ud574\uc11c \uc0ac\uc6a9\ud558\ub294 \uac83\uc774 \uaf2d \ud544\uc694\ud569\ub2c8\ub2e4."))}s.isMDXComponent=!0}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.