๊ฐ๋
์คํธ๋ฆผ์ ๋ฐ๋ณต์
์คํธ๋ฆผ์ ์ปฌ๋ ์ (๋ฐฐ์ด ํฌํจ)์ ์์๋ฅผ ํ๋์ฉ ์ฐธ์กฐํด์ ๋๋ค์์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ๋ณต์์ด๋ค.
๋๋ค์, ์คํธ๋ฆผ ๋ ๋ค ์๋ฐ 8๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅ
8์ด์ ์๋ Iterator๋ฅผ ์ฌ์ฉํจ
ํน์ง
1. ๋๋ค์์ผ๋ก ์์ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ์ ๊ณตํ๋ค.
- ์คํธ๋ฆผ์ด ์ ๊ณตํ๋ ๋๋ถ๋ถ์ ์์ ์ฒ๋ฆฌ ๋ฉ์๋๋ ํจ์์ ์ธํฐํ์ด์ค ๋งค๊ฐํ์ ์ ๊ฐ์ง๋ค.
- ๋งค๊ฐ๊ฐ์ผ๋ก ๋๋ค์ ๋๋ ๋ฉ์๋ ์ฐธ์กฐ๋ฅผ ๋์ ํ ์ ์๋ค.
2. ๋ด๋ถ ๋ฐ๋ณต์๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ์ฝ๋ค.
- ์ธ๋ถ ๋ฐ๋ณต์(ex. Iterator)
- ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ก ์ง์ ์ปฌ๋ ์ ์์๋ฅผ ๋ฐ๋ณตํด์ ์์ฒญํ๊ณ ๊ฐ์ ธ์ค๋ ์ฝ๋ ํจํด - ๋ด๋ถ ๋ฐ๋ณต์
- ๊ฐ๋ฐ์ ์ฝ๋๊ฐ ๋๋ค์์ด๋๊ณ , ์ปฌ๋ ์ ์ ๋ด๋ถ์ ์ผ๋ก ์์๋ค์ ๋ฐ๋ณตํ๋ ์คํธ๋ฆผ์ ํ์ฉํด์ ๋๋ค์์ ์์๋ง๋ค ์ ์ฉ์ํด.
- ์ปฌ๋ ์ ๋ด๋ถ์์ ์์๋ค์ ๋ฐ๋ณต์ํค๊ณ ๊ฐ๋ฐ์๋ ์์๋น ์ฒ๋ฆฌํด์ผํ ์ฝ๋๋ง ์ ๊ณตํ๋ ํจํด - ๋ด๋ถ ๋ฐ๋ณต์์ ์ด์ (Stream ์ ์ด์ )
- ๊ฐ๋ฐ์๋ ์์ ์ฒ๋ฆฌ ์ฝ๋์๋ง ์ง์ค(iterator.next()๊ฐ์ ๊ฒ์ ํ์ง ์์๋ ๋จ ์ค์ง ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง๋ง ์ ์ํจ)
- ๋ฉํฐ ์ฝ์ด CPU๋ฅผ ์ต๋ํ ํ์ฉํ๊ธฐ ์ํด ์์๋ค์ ๋ถ๋ฐฐ์์ผ ๋ณ๋ ฌ ์ฒ๋ฆฌ ์์ ์ ํ ์ ์๋ค. - ๋ณ๋ ฌ(parallel) ์ฒ๋ฆฌ
- parallelStream();
- ํ๊ฐ์ง ์์ ์ ์๋ธ ์์ ์ผ๋ก ๋๋๊ณ , ์๋ธ ์์ ๋ค์ ๋ถ๋ฆฌ๋ ์ค๋ ๋์์ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ ํ, ์๋ธ ์์ ๋ค์ ๊ฒฐ๊ณผ๋ค์ ์ต์ข ๊ฒฐํฉํ๋ ๋ฐฉ๋ฒ → ์์ ๊ฒฐ๊ณผ๊ฐ ์์ฐจ์ ์ด์ง ์์
- ์๋ฐ๋ ForkJoinPool ํ๋ ์์ํฌ๋ฅผ ์ด์ฉํด์ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
3. ์คํธ๋ฆผ์ ์ค๊ฐ ์ฒ๋ฆฌ์ ์ต์ข ์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค.
- ์ค๊ฐ ์ฒ๋ฆฌ : Stream์ ๋ฆฌํดํ๋ค. ์์๋ค์ ๋งคํ, ํํฐ๋ง, ์ ๋ ฌ ๋ฑ
(filter, map, limit, skip, sorted) - ์ต์ข
์ฒ๋ฆฌ : Stream์ ๋ฆฌํดํ์ง ์๋๋ค. ๋ฐ๋ณต, ์นด์ดํธ, ํ๊ท , ์ดํฉ ๋ฑ
(collect, allMatch, count, forEach, min, max..)
4. ์คํธ๋ฆผ์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ์ง ์์ผ๋ฉฐ ์ผํ์ฉ์ด๋ค.
์คํธ๋ฆผ ์ข ๋ฅ
java.util.stream ํจํค์ง์์ ์ธํฐํ์ด์ค ํ์ ์ผ๋ก ์ ๊ณต
๋ชจ๋ ์คํธ๋ฆผ ์ธํฐํ์ด์ค๋ BaseStream์ ์์๋ฐ๊ณ ์๋ค. ๊ณตํต ๋ฉ์๋๊ฐ ์ ์๋์ด ์๋ค.
Stream <T> | ๋ฒ์ฉ Stream |
IntStream | ๊ฐ ํ์ ์ด Int์ธ Stream |
LongStream | ๊ฐ ํ์ ์ด Long์ธ Stream |
DoubleStream | ๊ฐ ํ์ ์ด Double์ธ Stream |
Stream์ ์ค๊ฐ ์ฐ์ฐ ๋ช ๋ น์ด
Stream < T > distinct() | Stream์ ์์ ์ค๋ณต ์ ๊ฑฐ |
Stream < T > sorted() | Stream ์์ ์ ๋ ฌ |
Stream < T > filter(Predicate < T > predicate) | ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ์์๋ฅผ Stream์ผ๋ก ์์ฑ |
Stream < T > limit(long maxSize) | maxSize ๊น์ง์ ์์๋ฅผ Stream์ผ๋ก ์์ฑ |
Stream < T > skip(ling n) | ์ฒ์ n๊ฐ์ ์์๋ฅผ ์ ์ธํ๋ stream ์์ฑ |
Stream < T > peek(Consumer< T > action) | Tํ์ ์์์ ๋ง๋ ์์ ์ํ |
Stream < R > flatMap(Function< T, stream<? extends R>> Tmapper) | Tํ์ ์์๋ฅผ 1:N์ Rํ์ ์์๋ก ๋ณํํ์ฌ ์คํธ๋ฆผ ์์ฑ |
Stream < R > map(Function<? super T, ? extends R> mapper) | ์ ๋ ฅ Tํ์ ์ Rํ์ ์์๋ก ๋ณํํ ์คํธ๋ฆผ ์์ฑ |
Stream mapToInt(),mapToLong(),mapToDobule() | ๋ง์ฝ map Type์ด ์ซ์๊ฐ ์๋ ๊ฒฝ์ฐ ๋ณํํ์ฌ ์ฌ์ฉ |
Stream์ ์ต์ข ์ฐ์ฐ ๋ช ๋ น์ด
void forEach(Consumer <? super T> action) | Stream ์ ๊ฐ ์์์ ์ง์ ๋ ์์ ์ํ |
long count() | Stream ์ ์์ ๊ฐ์ |
Optional < T > sum (Comparator <? super T> comparator) | Stream ์ ์์ ํฉ |
Optional < T > max (Comparator <? super T> comparator) | Stream ์์์ ์ต๋ ๊ฐ |
Optional < T > min (Comparator <? super T> comparator) | Stream ์์์ ์ต์ ๊ฐ |
Optional < T > findAny() | Stream ์์์ ๋๋ค ์์ |
Optional < T > findFirst() | Stream ์ ์ฒซ ๋ฒ์งธ ์์ |
boolean allMatch(Pradicate < T > p) | Stream ์ ๊ฐ์ด ๋ชจ๋ ๋ง์กฑํ๋์ง boolean ๋ฐํ |
boolean anyMatch(Pradicate < T > p) | Stream ์ ๊ฐ์ด ํ๋๋ผ๋ ๋ง์กฑํ๋์ง boolean ๋ฐํ |
boolean noneMatch(Pradicate < T > p) | Stream ์ ๊ฐ์ด ํ๋๋ผ๋ ๋ง์กฑํ์ง์๋์ง boolean ๋ฐํ |
Object[] toArray() | Stream ์ ๋ชจ๋ ์์๋ฅผ ๋ฐฐ์ด๋ก ๋ฐํ |
reduce ์ฐ์ฐ | Stream ์ ์์๋ฅผ ํ๋์ฉ ์ค์ฌ๊ฐ๋ฉฐ ๊ณ์ฐํ๋ค. |
- Optional < T > reduce(Binary Operator<T> accumulator) - T reduce ( T identity, BinaryOperator<T> accumulator) - <U> U reduce (U indentity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner) |
- .reduce((x,y) -> x > y ? x : y ); - .reduce(1, (x,y) -> x * y); - .reduce(0.0, (val1, val2) -> Double.valueOf(val1 + val2 / 10), (val1, val2) -> val1 + val2); |
collector ์ฐ์ฐ | Stream์ ์์๋ฅผ ์์งํ์ฌ ์์๋ฅผ ๊ทธ๋ฃนํ ํ๊ฑฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ๋ฐํํ๋๋ฐ ์ฌ์ฉํ๋ค. |
- Collectors.toList() - Collectors.toSet() - Collectors.toMap() - Collectors.groupingBy - Collectors.partioningBy - Collectors.summarizingInt() |
์ฐธ๊ณ
- https://www.youtube.com/watch?v=2D9NRBIKKCc
- https://www.youtube.com/watch?v=kgagzL33Hc4&list=PLVsNizTWUw7FPokuK8Cmlt72DQEt7hKZu&index=163
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=qkrghdud0&logNo=220702640712
- https://kils-log-of-develop.tistory.com/659?category=923003
- https://khj93.tistory.com/entry/JAVA-%EB%9E%8C%EB%8B%A4%EC%8B%9DRambda%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%82%AC%EC%9A%A9%EB%B2%95
'๐ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection) (0) | 2021.08.11 |
---|---|
[Java] ๋๋ค์ (0) | 2021.08.10 |
[Java] ์ ๋ค๋ฆญ(Generic) (0) | 2021.07.28 |
[Java] ์๋ฐ ๊ฐ์ ๋จธ์ (Java Virtual Machine) (0) | 2021.07.28 |
[Java] Primitive type vs Reference type (0) | 2021.04.18 |
๋๊ธ