Backend Language/Spring boot(Java)

[Stream.forEach(... -> ....)] JPA๋กœ List<Entity> ๋ถˆ๋Ÿฌ์˜จ ํ›„, ์•ˆ์— ์žˆ๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„ ๋•Œ

chaerlo127 2022. 2. 16. 14:27
728x90

์•ฑ ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋ฉด์„œ User๊ฐ€ ์“ด ๊ธ€์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ, ๋ชจ๋“  ๊ธ€์ด ๋ถˆ๋Ÿฌ์™€์ง€๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ผ์ • ๋ถ€๋ถ„์˜ ๊ธ€๋งŒ ๋ถˆ๋Ÿฌ์™€์ง€๊ฒŒ api๋ฅผ ์ˆ˜์ •ํ•ด๋‹ฌ๋ผ๋Š” ๋ถ€ํƒ์„ ๋ฐ›์•˜๋‹ค.

์ธํ„ฐ๋„ท์— ์ฐพ์•„๋ณด๋‹ˆ, FrontEnd์˜ ์—ญํ• ์ธ ๊ฒƒ ๊ฐ™์•˜์ง€๋งŒ ์ผ๋‹จ ์•Œ๊ฒ ๋‹ค๊ณ  ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๋Œ€ํ•œ api๋ฅผ ์ˆ˜์ •ํ•ด๋ณด๊ณ ์žํ–ˆ๋‹ค. 

(์•ž์œผ๋กœ๋Š” ์ด๊ฒŒ ์„œ๋ฒ„์˜ ์—ญํ• ์ธ์ง€, ํ”„๋ก ํŠธ์˜ ์—ญํ• ์ธ์ง€ ๋‹ค์‹œ ํ™•์ธํ•œ ํ›„ api๋ฅผ ์ƒ์„ฑํ•ด์•ผ๊ฒ ๋‹ค)

Jpa Repository๋ฅผ ํ†ตํ•ด์„œ User๊ฐ€ ์“ด ๊ธ€์˜ ๊ฐ’์„ ๋ถˆ๋Ÿฌ์˜ค๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ, Return variable์ด List<Entity>๊ฐ€ ๋˜๋ฏ€๋กœ ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š”๋ฐ for๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ List์— ์žˆ๋Š” ๊ฐ’์„ ๋˜๋‹ค๋ฅธ List๋กœ ์˜ฎ๊ฒจ์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณต์žกํ•œ ๋ฐ˜๋ณต๋ฌธ์ด ์‚ฌ์šฉ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜์—ˆ๋‹ค.

 

for๋ฌธ์œผ๋กœ List<Entity>๋ฅผ ๋˜ ๋‹ค๋ฅธ List๋กœ ์˜ฎ๊ธฐ๋ฉด์„œ ์•ˆ์— ์žˆ๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต๊ณ , ์ฝ”๋“œ๊ฐ€ ๊ธธ์–ด์ง€๊ณ , ์—๋Ÿฌ๊ฐ€ ๋‚˜๋ฉด์„œ ํ•ด๊ฒฐ์ด ๋‚˜์ง€ ์•Š์•„ ๋งŽ์€ ์–ด๋ ค์›€์„ ๊ฒช์—ˆ๋‹ค. 

 

๋ฌดํ•œ ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณธ๊ฒฐ๊ณผ "์ž๋ฐ”8 Streams"์—์„œ List์˜ ๊ฐ’์„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” Stream.forEach(... -> ....)์„ ์•Œ๊ฒŒ ๋˜์—ˆ๊ณ  ์ด๋ฅผ ํ†ตํ•ด์„œ API๋ฅผ ์„ฑ๊ณตํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด๋Š” JPA๋งŒ ๊ตญํ•œ๋˜์ง€ ์•Š๊ณ , List๋ผ๋ฉด ๋ฌด์—‡์ด๋“ ์ง€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์˜ˆ์‹œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

List<Story> story =  storyRepository.findByUserId(userId); 
//userId๋กœ ์ฐพ์•„์„œ list๋กœ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
int like = +1; 
// ์ž์ฃผ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฐ’์ด ์•„๋‹ˆ๋ผ๋ฉด, method์ด ์•„๋‹ˆ๋ผ ์ง์ ‘ attribute์— ๋„ฃ์–ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹์Œ
story.stream().forEach(o -> o.changeLike(like));
//story list์˜ ๊ฐ’์„ ๋ณ€๊ฒฝ, story Entity์˜ changeLike method์— int ๊ฐ’์„ ๋„ฃ๊ณ  like ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” code
storyRepository.save(story);
//๋ณ€๊ฒฝ ๊ฐ’ ์ €์žฅ

////////////////////////////////////////////////////////////////////////////////////////
//story Entity ์•ˆ์— changeLike method๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
public void changeLike(int like){
	this.like +=like; // ์›๋ž˜์˜ like ๊ฐ’์—์„œ parameter๋กœ ๋ฐ›์•„์˜จ like ๋ฅผ ๋”ํ•˜๋Š” method
    }


///////////////////////////////////////////////////////////////////////////////////////
/*
 ์ฆ‰, stream() ์‚ฌ์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
*/

list_Name.Stream().forEach(name -> name.method());

 

 

Stream์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์ง€ ์•Š๋‹ค๋Š” ๊ธ€์„ ๋ด์™”์ง€๋งŒ, ์•„์ง๊นŒ์ง€๋Š” stream ์ด์™ธ์˜ for๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ์ž‘์„ฑํ•˜๋Š” ์ฝ”๋“œ ๋ฒ•์„ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ผ์‹œ์ ์œผ๋กœ stream์œผ๋กœ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

์•ž์œผ๋กœ ํ•ด๊ฒฐํ•ด๋ณด๊ฑฐ๋‚˜, stream์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋‹จ์ ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ๋ณ€๊ฒฝ์„ ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

728x90

 

728x90