{"id":2479,"date":"2016-10-31T15:41:24","date_gmt":"2016-10-31T15:41:24","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=2479"},"modified":"2017-01-27T09:29:07","modified_gmt":"2017-01-27T00:29:07","slug":"java8-stream%ec%97%90-%eb%8c%80%ed%95%9c-%eb%b3%91%eb%a0%ac%ec%b2%98%eb%a6%ac","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=2479","title":{"rendered":"Java8, Stream\uc5d0 \ub300\ud55c \ubcd1\ub82c\ucc98\ub9ac"},"content":{"rendered":"<p><a href='http:\/\/www.gisdeveloper.co.kr\/?p=2441'>Java 8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc2a4\ud2b8\ub9bc(Streams)<\/a>\uc5d0 \ub300\ud55c \uae30\ub2a5\uc5d0 \ub300\ud574 \uc815\ub9ac\ud55c \uc801\uc774 \uc788\uc2b5\ub2c8\ub2e4. Java 8\uc5d0\uc11c \uc2a4\ud2b8\ub9bc\uc740 List \ub4f1\uacfc \uac19\uc740 \uc790\ub8cc\uad6c\uc870\ub97c \ud1b5\ud574 \uc0dd\uc131\ud560 \uc218 \uc788\ub294 \uba54\ubaa8\ub9ac \uc0c1\uc758 \ub610 \ub2e4\ub978 \uc790\ub8cc\uad6c\uc870\uc778\ub370\uc694. \uc774 \uc2a4\ud2b8\ub9bc \uc790\ub8cc\uad6c\uc870\ub97c \ud1b5\ud574 Filter, Sorted, map, forEach, anyMatch, allMatch, noneMatch, count, Reduce \ub9f4\ubc84 \ud568\uc218\ub97c \ud638\ucd9c\ud560 \uc218 \uc788\uc73c\uba70, \uc774\ub7ec\ud55c \ud568\uc218 \ud638\ucd9c\uc5d0 \ub300\ud574 \ud558\ub098\uc758 \uc2a4\ub808\ub4dc\ub9cc\uc744 \uc0ac\uc6a9\ud574 \ucc98\ub9ac\ud560 \uac83\uc778\uc9c0, \uc544\ub2c8\uba74 \uba40\ud2f0 \uc2a4\ub808\ub4dc\ub97c \ud1b5\ud574 \ubcd1\ub82c\ub85c \ucc98\ub9ac\ud560 \uac83\uc778\uc9c0 \uac1c\ubc1c\uc790\uac00 \ub9e4\uc6b0 \uac04\ub2e8\ud788 \uc815\ud560 \uc218 \uc788\ub294 \ub9e4\ucee4\ub2c8\uc998\uc744 \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc608\ub97c \ub4e4\uc5b4\uc11c, \ubc31\ub9cc\uac1c\uc758 UUID \ubb38\uc790\uc5f4\uc744 \ub2f4\uace0 \uc788\ub294 \ub9ac\uc2a4\ud2b8\uac00 \uc788\ub2e4\uace0 \ud569\uc2dc\ub2e4. \uc989, \uc544\ub798\uc758 \ucf54\ub4dc\ub97c \ud1b5\ud574 \uba54\ubaa8\ub9ac \uc0c1\uc5d0 \uad6c\uc131\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\r\npublic static void main(String args[]) {\r\n    int max = 1000000;\r\n    List<String> values = new ArrayList<>(max);\r\n\t\t\r\n    for (int i=0; i<max; i++) {\r\n        UUID uuid = UUID.randomUUID();\r\n        String strUuid = uuid.toString();\t\t\t\r\n        values.add(strUuid);\r\n    }\r\n\t\t\r\n    \/\/ sequential(values);\r\n    \/\/ parallel(values);\r\n}\r\n<\/pre>\n<p>11\ubc88\uacfc 12\ubc88 \ucf54\ub4dc\uac00 \uac01\uac01 \ubc31\ub9cc\uac1c\uc758 \ubb38\uc790\uc5f4\ub97c \uac16\ub294 \ub9ac\uc2a4\ud2b8\ub97c \uc815\ub82c\ud558\ub294 \ubc29\uc2dd\uc744 \ud558\ub098\uc758 \uc2a4\ub808\ub4dc\ub85c \ud560 \uac83\uc778\uc9c0, \uba40\ud2f0 \uc2a4\ub808\ub4dc\ub85c \ucc98\ub9ac\ud560 \uac83\uc778\uc5d0 \ub300\ud55c \ud568\uc218 \ud638\ucd9c\uc785\ub2c8\ub2e4. \uba3c\uc800 sequential \ud568\uc218\ub97c \uc0b4\ud3b4\ubcf4\uba74 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\r\npublic static void sequential(List<String> v) {\r\n    long t0 = System.nanoTime();\r\n    \/*long count = *\/ v.stream().sorted().count();\r\n    long t1 = System.nanoTime();\r\n\t\t\r\n    long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0);\r\n    System.out.println(String.format(\"sequential sort took: %d ms\", millis));\r\n}\r\n<\/pre>\n<p>3\ubc88 \ucf54\ub4dc\uac00 \uc2a4\ud2b8\ub9bc\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 sorted \ud568\uc218\ub97c \ud1b5\ud574 \uc9c1\uad00\uc801\uc73c\ub85c \uc815\ub82c\ud558\ub294 \uac83\uc73c\ub85c\uc368 \ucf54\ub4dc \ud55c\uc904\uc774\uc9c0\ub9cc \uadf8 \ub0b4\ubd80\ub294 \ub2e4\uc18c \ubcf5\uc7a1\ud558\uace0, \ud2b9\ud788\ub098 \ubc31\ub9cc\uac1c\uc5d0 \ub300\ud55c \uc815\ub82c\uc774\ubbc0\ub85c \uc0c1\ub2f9\ud55c CPU \ub9ac\uc18c\uc2a4\ub97c \uc0ac\uc6a9\ud560 \uac83\uc785\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ub2e4\uc74c\uc740 \uba40\ud2f0 \uc2a4\ub808\ub4dc\ub97c \ud1b5\ud55c parallel \ud568\uc218\uc785\ub2c8\ub2e4.<\/p>\n<pre>\r\npublic static void parallel(List<String> v) {\r\n    long t0 = System.nanoTime();\r\n    \/* long count = *\/ v.parallelStream().sorted().count();\r\n    long t1 = System.nanoTime();\r\n\t\t\r\n    long millis = TimeUnit.NANOSECONDS.toMillis(t1 - t0);\r\n    System.out.println(String.format(\"parallel sort took: %d ms\", millis));\r\n}\r\n<\/pre>\n<p>sequential \ud568\uc218\uc640\uc758 \ucc28\uc774\uc810\uc774\ub77c\uace0\ub294 \uc624\uc9c1 \uc2a4\ud2b8\ub9bc\uc744 \uc0dd\uc131\ud558\uae30 \uc704\ud574 3\ubc88 \ucf54\ub4dc\uc758 stream() \ub300\uc2e0 parallelStream() \ud638\ucd9c\uc785\ub2c8\ub2e4. \uc774\uc81c \uc2e4\ud589\ud574 \ubcf4\uba74 \uc81c \ub178\ud2b8\ubd81\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uacb0\uacfc\uac00 \ub098\uc635\ub2c8\ub2e4.<\/p>\n<pre>\r\nsequential sort took: 708 ms\r\nparallel sort took: 244 ms\r\n<\/pre>\n<p>\uc81c \ub178\ud2b8\ubd81\uc774 \uba40\ud2f0 \ucf54\uc5b4 CPU\uc774\ubbc0\ub85c \ub3d9\uc77c\ud55c \uc5f0\uc0b0\uc774\uc9c0\ub9cc \ubcd1\ub82c\ub85c \uc815\ub82c\ud558\ub294\ub370 \uc18c\uc694\ub418\ub294 \uc2dc\uac04\uc774 \ud6e8\uc52c \ub354 \ube60\ub978 \ucc98\ub9ac\ub41c \uacb0\uacfc\ub97c \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. Java 8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc2a4\ud2b8\ub9bc\uc744 \ud1b5\ud574 \ub370\uc774\ud130\uc758 \ub369\uc5b4\ub9ac\ub97c \ub9e4\uc6b0 \uc9c1\uad00\uc801\uc774\uba70 \ub9e4\uc6b0 \uc27d\uac8c \ubcd1\ub82c\ub85c \ucc98\ub9ac\ud560 \uc218 \uc788\ub2e4\ub294 \uac83\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc694\uc998 golang\uacfc \uac19\uc740 \ucd5c\uc2e0\uc758 \uc5b8\uc5b4\uc5d0\uc11c\ub3c4 \uadf8\ub807\uace0... Java\ub098 C++\uacfc \uac19\uc740 \uc5b8\uc5b4\uc5d0\uc11c \ub78c\ub2e4 \uc9c0\uc6d0\uc744 \ud1b5\ud574 \uc791\uc131\ub41c \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubd10\ub3c4 \uadf8\ub807\uace0.. OOP \ubcf4\ub2e4\ub294 \ud568\uc218 \uc9c0\ud5a5\uc801\uc778 \ucf54\ub529\uc774 \uc0c1\ub2f9\ud788 \uac15\uc870\ub418\ub294 \uac83\uc744 \ub290\ub08d\ub2c8\ub2e4. OOP \uc801\uc778 \uc0ac\uace0\ubc29\uc2dd \ubcf4\ub2e4\ub294 \ucef4\ud3ec\uc9c0\uc158(Composition)\uacfc \uc7ac\uadc0\uc801 \ud638\ucd9c\uc744 \ud1b5\ud55c \ud568\uc218 \uc791\uc131 \uadf8\ub9ac\uace0 \uc9e7\uc740 \ucf54\ub4dc\ub85c \uad6c\uc131\ud55c \ub2e8\uc704 \ud568\uc218\ub4e4\uc758 \uc870\ud569\uc744 \ud1b5\ud55c \ud504\ub85c\uadf8\ub798\ubc0d \ubc29\uc2dd\uc5d0 \uc775\uc219\ud574 \uc9c0\ub294 \uac83\uc774 \ud544\uc694\ud560 \ub4ef \ud569\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java 8\uc5d0\uc11c \uc81c\uacf5\ud558\ub294 \uc2a4\ud2b8\ub9bc(Streams)\uc5d0 \ub300\ud55c \uae30\ub2a5\uc5d0 \ub300\ud574 \uc815\ub9ac\ud55c \uc801\uc774 \uc788\uc2b5\ub2c8\ub2e4. Java 8\uc5d0\uc11c \uc2a4\ud2b8\ub9bc\uc740 List \ub4f1\uacfc \uac19\uc740 \uc790\ub8cc\uad6c\uc870\ub97c \ud1b5\ud574 \uc0dd\uc131\ud560 \uc218 \uc788\ub294 \uba54\ubaa8\ub9ac \uc0c1\uc758 \ub610 \ub2e4\ub978 \uc790\ub8cc\uad6c\uc870\uc778\ub370\uc694. \uc774 \uc2a4\ud2b8\ub9bc \uc790\ub8cc\uad6c\uc870\ub97c \ud1b5\ud574 Filter, Sorted, map, forEach, anyMatch, allMatch, noneMatch, count, Reduce \ub9f4\ubc84 \ud568\uc218\ub97c \ud638\ucd9c\ud560 \uc218 \uc788\uc73c\uba70, \uc774\ub7ec\ud55c \ud568\uc218 \ud638\ucd9c\uc5d0 \ub300\ud574 \ud558\ub098\uc758 \uc2a4\ub808\ub4dc\ub9cc\uc744 \uc0ac\uc6a9\ud574 \ucc98\ub9ac\ud560 \uac83\uc778\uc9c0, \uc544\ub2c8\uba74 \uba40\ud2f0 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=2479\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Java8, Stream\uc5d0 \ub300\ud55c \ubcd1\ub82c\ucc98\ub9ac&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[60],"tags":[51],"class_list":["post-2479","post","type-post","status-publish","format-standard","hentry","category-java","tag-java"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/2479","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2479"}],"version-history":[{"count":1,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/2479\/revisions"}],"predecessor-version":[{"id":2769,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/2479\/revisions\/2769"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2479"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2479"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2479"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}