Day20 - jeremy0405/Codesquad_CS GitHub Wiki

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ง€๋‚œ์ฃผ์— ๋žŒ๋‹ค๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€๋ฅผ ์ง„ํ–‰ํ–ˆ์—ˆ๋‹ค.

์ด๋ฒˆ์ฃผ์—๋„ ๊ณ„์† Runnable ๋˜๋Š” Callable์„ ๋“ฑ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๋žŒ๋‹ค์‹์„ ๊ณ„์† ์‚ฌ์šฉํ•  ์ผ์ด ์žˆ์—ˆ๋Š”๋ฐ ์ด๊ฒŒ ๋žŒ๋‹ค๋ฅผ ์•Œ๋งž๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด๊ฐ€? ๋ผ๋Š” ์ƒ๊ฐ์ด ๊ณ„์†๋“ค์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.


์ˆœ์ˆ˜ ํ•จ์ˆ˜

์ˆœ์ˆ˜ ํ•จ์ˆ˜๋Š” ์ˆ˜ํ•™์˜ ํ•จ์ˆ˜์™€ ๋‹ฎ์•„ ์žˆ๋‹ค. ์ž…๋ ฅ์— ๋”ฐ๋ผ ํ•ญ์ƒ ๋™์ผํ•œ ์œ ์ผํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์™€์•ผ ํ•œ๋‹ค. ์ˆ˜ํ•™์˜ ํ•จ์ˆ˜์™€ ์•ฝ๊ฐ„ ๋‹ค๋ฅธ ์ ์€ ์ž…๋ ฅ์ด ์—†์–ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค๋Š” ๊ฒƒ ๋ฟ์ด๋‹ค. ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ์กฐํ•ฉํ•ด์„œ ํ•ญ์ƒ ๋™์ผํ•œ input์— ๋Œ€ํ•ด์„œ ๋™์ผํ•œ output์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์š”์ฆ˜์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ๋งŽ์ด ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋“ค์˜ ์กฐํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์Šค๋ ˆ๋“œ ์„ธ์ดํ”„ํ•˜๊ฒŒ ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” output ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.


private CompletableFuture<Void> startMakingCoffee(String coffee) {  
  return CompletableFuture.runAsync(() -> {  
	  System.out.println(Thread.currentThread().getName() + " " + coffee + " ์ œ์กฐ์‹œ์ž‘=======================");  
	  try {  
		  Thread.sleep(Coffee.getTime(coffee) * 1000L);  
	  } catch (InterruptedException e) {  
		  e.printStackTrace();  
	  }  
	  System.out.println(Thread.currentThread().getName() + " =======================" + coffee + " ์ œ์กฐ์™„๋ฃŒ");  	
	  }, executorService);  
}

๋‚ด๊ฐ€ ๊ตฌํ˜„ํ•œ CompletableFuture์ธ๋ฐ runAsync() ๋ฉ”์„œ๋“œ๋Š” Runable์„ ์ธ์ž๋กœ ๋ฐ›๋Š”๋‹ค. ๊ทผ๋ฐ ์ด ์ƒํ™ฉ์—์„œ input์„ coffee๋กœ ๋„ฃ๊ณ  ์‹ถ์€๋ฐ Runnable์—๋Š” input์ด ์—†๋‹ค. ๋˜ํ•œ SupplyAsync() ๋ฅผ ์จ๋„ Supplier๋ฅผ ์ธ์ž๋กœ ๋ฐ›๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๋˜ํ•œ input์„ ๋ฐ›์ง€ ์•Š์œผ๋‹ˆ ์œ„์™€ ๊ฐ™์€ ํ•จ์ˆ˜๊ฐ€ ์ˆœ์ˆ˜ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„์ด ๋œ ์•Œ๋งž์€ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ธ์ง€ ์˜๋ฌธ์ด ๋“ค์—ˆ๋‹ค.

๋‚˜๋Š” coffee๋ผ๋Š” input์— ๋”ฐ๋ผ ๊ณ ์œ ํ•œ output์„ ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜๋Š” ์œ„์™€ ๊ฐ™์ด ์งœ๋Š” ๊ฒƒ๋„ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ ๋งž๋Š” ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค..

โš ๏ธ **GitHub.com Fallback** โš ๏ธ