๊ด€๋ฆฌ ๋ฉ”๋‰ด

Tech Log ๐Ÿ› ๏ธ

[java] ์ŠคํŠธ๋ฆผ ์š”์†Œ ์ฒ˜๋ฆฌ ๋ณธ๋ฌธ

TIL

[java] ์ŠคํŠธ๋ฆผ ์š”์†Œ ์ฒ˜๋ฆฌ

sehaan 2023. 2. 28. 17:29

์ž๋ฐ”8 ๋ถ€ํ„ฐ ์ปฌ๋ ‰์…˜ ๋ฐ ๋ฐฐ์—ด์˜ ์š”์†Œ ๋ฐ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ŠคํŠธ๋ฆผ์ด๋ž€ ?

์ŠคํŠธ๋ฆผ์€ ์š”์†Œ๋“ค์ด ํ•˜๋‚˜์”ฉ ํ˜๋Ÿฌ๊ฐ€๋ฉด์„œ ์ฒ˜๋ฆฌ๋œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๋‚ด์žฅ

 

์ŠคํŠธ๋ฆผ ์—†์ด ์ปฌ๋ ‰์…˜ ๋ฐ ๋ฐฐ์—ด์— ์ €์žฅ๋œ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” for ๋ฌธ์ด๋‚˜ iterator๋ฅผ ์ด์šฉํ–ˆ์–ด์•ผํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ŠคํŠธ๋ฆผ์˜ ๋“ฑ์žฅ์œผ๋กœ ๋งค๋ฌด ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.

 

์ŠคํŠธ๋ฆผ ์—†์ด ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ

List<String> list = ...;
for(int i=0;i<list.size();i++){
	String item = list.get(i);
}

์ŠคํŠธ๋ฆผ ์‚ฌ์šฉ

Stream<String> stream = list.stream();
stream.forEach(item -> //item์ฒ˜๋ฆฌ);

 

์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ญ๊ฐ€ ์ข‹์„๊นŒ?

1. ๋‚ด๋ถ€๋ฐ˜๋ณต์ž์ด๋ฏ€๋กœ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋‹ค. 

2. ๋žŒ๋‹ค์‹์œผ๋กœ ๋‹ค์–‘ํ•œ ์š”์†Œ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ์™€ ์ตœ์ข… ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ํŒŒ์ดํ”„ ๋ผ์ธ์„ ํ˜•์„ฑํ•   ์ˆ˜ ์žˆ๋‹ค.

 

๋‚ด๋ถ€๋ฐ˜๋ณต์ž

์ŠคํŠธ๋ฆผ์˜ ์žฅ์  1๋ฒˆ์—์„œ ๋‚ด๋ถ€๋ฐ˜๋ณต์ž์ด๋ฏ€๋กœ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋ผ๊ณ  ํ•˜์˜€๋‹ค.๊ทผ๋ฐ ์—ฌ๊ธฐ์„œ '๋‚ด๋ถ€ ๋ฐ˜๋ณต์ž'๋ž€ ๋ฌด์—‡์ผ๊นŒ?

 

๋จผ์ € for ๋ฌธ์„ ๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

List<String> list = ...;
for(int i=0;i<list.size();i++){
	String item = list.get(i);
}

๊ธฐ์กด for๋ฌธ์€ ์™ธ๋ถ€ ๋ฐ˜๋ณต์ž์ด๋‹ค.

 

์™ธ๋ถ€๋ฐ˜๋ณต์ž๋ž€ ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๋ฅผ ์ปฌ๋ ‰์…˜ ๋ฐ”๊นฅ์ชฝ์œผ๋กœ ๊บผ๋‚ด์™€์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์˜ˆ์‹œ ์ฝ”๋“œ์—์„œ๋Š” ์ปฌ๋ ‰์…˜์˜ ์š”์†Œ๋“ค์„ item ์ด๋ผ๋Š” ๋ณ€์ˆ˜๋‚ด์— ๊ฐ€์ ธ์™€์„œ ์ฒ˜๋ฆฌํ•˜๊ณ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ,

๋‚ด๋ถ€๋ฐ˜๋ณต์ž(์ŠคํŠธ๋ฆผ) ์€ ์ปฌ๋ ‰์…˜ ๋‚ด๋ถ€์—์„œ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณต ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปฌ๋ ‰์…˜ ์š”์†Œ๋“ค์„ ๋ฐ–์œผ๋กœ ๊บผ๋‚ผ ํ•„์š”๊ฐ€ ์—†์–ด์„œ ๋”์šฑ ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ด๋‹ค.

 

์ด ์™ธ์—๋„ ๋‚ด๋ถ€ ๋ฐ˜๋ณต์ž๋Š” ๋ฉ€ํ‹ฐ์ฝ”์–ด CPU๋ฅผ ์ตœ๋Œ€ํ•œ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์š”์†Œ๋“ค์„ ๋ถ„๋ฐฐ์‹œ์ผœ ๋ณ‘๋ ฌ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ค‘๊ฐ„ ์ฒ˜๋ฆฌ์™€ ์ตœ์ข…์ฒ˜๋ฆฌ

์ŠคํŠธ๋ฆผ์€ ํฌ๊ฒŒ ์„ธ๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

//์˜ค๋ฆฌ์ง€๋‚  ์ŠคํŠธ๋ฆผ
Stream<Student>  student = list.stream();
//์ค‘๊ฐ„์ฒ˜๋ฆฌ ์ŠคํŠธ๋ฆผ(๋งคํ•‘)
IntStream scoreStream = studentStream.mapToInt( student -> student.getScore());
//์ตœ์ข…์ฒ˜๋ฆฌ ์ŠคํŠธ๋ฆ (์ง‘๊ณ„)
double avg = scoreItem  = scoreStream.average().getAsDouble();

1. ์˜ค๋ฆฌ์ง€๋„ ์ŠคํŠธ๋ฆผ

 

2. ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ ์ŠคํŠธ๋ฆผ   

- ๋งคํ•‘ ์ค‘๊ฐ„ ์ŠคํŠธ๋ฆผ์ด ์—ฐ๊ฒฐ ๋  ์ˆ˜ ์žˆ๋‹ค.   

- ํ•„ํ„ฐ๋ง , ๋งคํ•‘ ,์ •๋ ฌ ์ž‘์—… ์ˆ˜ํ–‰

 

3. ์ตœ์ข… ์ฒ˜๋ฆฌ ์ŠคํŠธ๋ฆผ   

- ์ค‘๊ฐ„ ์ฒ˜๋ฆฌ์—์„œ ์ •์ œ๋œ ์š”์†Œ๋“ค์„ ๋ฐ˜๋ณตํ•˜๊ฑฐ๋‚˜ , ์ง‘๊ณ„ ์ž‘์—…(์นด์šดํŒ…, ์ข…ํ•ฉ , ํ‰๊ท )์„ ์ˆ˜ํ–‰

- ์ตœ์ข… ์ฒ˜๋ฆฌ ์ŠคํŠธ๋ฆผ์ด ์—†์œผ๋ฉด ์ŠคํŠธ๋ฆผ์ด ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

 

์ŠคํŠธ๋ฆผ์˜ ์ข…๋ฅ˜

 

 

BaseStream ์—๋Š” ๋ชจ๋“  ์ŠคํŠธ๋ฆผ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ณตํ†ต ๋ฉ”์†Œ๋“œ๋“ค์ด ์ •์˜๋˜์–ด์žˆ๋‹ค.

 

BaseStream์˜ ์ž์‹ ์ธํ„ฐํŽ˜์ด์Šค๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒ์† ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

1. Stream 

     - ๊ฐ์ฒด ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌ

2. IntStream

    - int ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌ

3. LongStream

    - long ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌ

4. DoubleStream

    - double ์š”์†Œ๋ฅผ ์ฒ˜๋ฆฌ

 

๋ฆฌ์†Œ์Šค๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ ์–ป๊ธฐ

1. ์ปฌ๋ ‰์…˜์œผ๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ ์–ป๊ธฐ     

- List ์™€ Set ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๋ชจ๋“  ์ปฌ๋ ‰์…˜์—์„œ ๊ฐ์ฒด์ŠคํŠธ๋ฆผ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

      ex) Product ๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฆฌ์ŠคํŠธ๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ์„ ๋ฐ›๋Š” ์ฝ”๋“œ

Stream<Product> stream =  list.stream();

2. ๋ฐฐ์—ด๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ ์–ป๊ธฐ   

-  java.utils.Arrays ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ ๋ฐฐ์—ด๋กœ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

//๋ฌธ์ž์—ด ๋ฐฐ์—ด
String[] strArray = {"ํ™๊ธธ๋™","์‹ ์šฉ๊ถŒ","๊น€๋ฏธ๋‚˜"};
//๋ฌธ์ž์—ด ์ŠคํŠธ๋ฆผ(strStream) ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
String<String> strStream = Arrays.stream(strArray);

//์ •์ˆ˜ ๋ฐฐ์—ด
int[] intArray = {1,2,3,4,5};
//๋ฌธ์ž์—ด ์ŠคํŠธ๋ฆผ(intStream) ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
IntStream intS1tream  = Arrays.stream(intArray);

 

์ด์™ธ์—๋„ ์ˆซ์ž ๋ฒ”์œ„๋‚˜ ํŒŒ์ผ ๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ ๋ฆฌ์†Œ์Šค๋กœ ๋ถ€ํ„ฐ ์ŠคํŠธ๋ฆผ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.