JavaRush /Java Blog /Random-KO /์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #159. Java ์Šค๋ ˆ๋“œ์˜ ์ˆ˜๋ช…์ฃผ๊ธฐ. Java 8์˜ ๊ธฐ๋Šฅ์  ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ

์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #159. Java ์Šค๋ ˆ๋“œ์˜ ์ˆ˜๋ช…์ฃผ๊ธฐ. Java 8์˜ ๊ธฐ๋Šฅ์  ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ

Random-KO ๊ทธ๋ฃน์— ๊ฒŒ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค

Java์˜ ์Šค๋ ˆ๋“œ ์ˆ˜๋ช…์ฃผ๊ธฐ

์ถœ์ฒ˜: ์ค‘๊ฐ„ ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Java ์Šค๋ ˆ๋“œ์˜ ๋‹ค์–‘ํ•œ ์ˆ˜๋ช… ์ฃผ๊ธฐ ์ƒํƒœ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ปคํ”ผ ๋ธŒ๋ ˆ์ดํฌ #159.  Java ์Šค๋ ˆ๋“œ์˜ ์ˆ˜๋ช…์ฃผ๊ธฐ.  Java 8 - 1์˜ ๊ธฐ๋Šฅ์  ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œJava์—์„œ ์Šค๋ ˆ๋“œ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์€ ์ฃผ๋กœ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ์œผ๋กœ ์‹œ์ž‘ํ•˜์—ฌ ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ๋กœ ๋๋‚˜๋Š” ๋‹ค์–‘ํ•œ ์ƒํƒœ๋กœ์˜ ์ „ํ™˜์œผ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. Thread ํด๋ž˜์Šค ์˜ start() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค๊ณ  ์‹œ์ž‘ํ•˜๋ฉด ์Šค๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์ค€๋น„๊ฐ€ ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค . Thread ํด๋ž˜์Šค์˜ sleep() ๋˜๋Š” wait() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์œผ๋กœ ์Šค๋ ˆ๋“œ๋ฅผ ๊ด€๋ฆฌํ•˜๋ ค๋ฉด ์Šค๋ ˆ๋“œ ์ƒํƒœ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. Java ์Šค๋ ˆ๋“œ์˜ ๋ผ์ดํ”„์‚ฌ์ดํด์ด ์ƒํƒœ๋ฅผ ์–ด๋–ป๊ฒŒ ๊ฒฐ์ •ํ•˜๋Š”์ง€ ์ดํ•ดํ•ด ๋ด…์‹œ๋‹ค. ์ด์— ๋Œ€ํ•œ Java ๋ฌธ์„œ์˜ ๋‚ด์šฉ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ์ˆ˜๋ช… ์ฃผ๊ธฐ ๋™์•ˆ ๋‹ค์„ฏ ๊ฐ€์ง€ ์ƒํƒœ ์ค‘ ํ•˜๋‚˜์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค.
  1. ์ƒˆ๋กœ์šด
  2. ์‹คํ–‰ ๊ฐ€๋Šฅ
  3. ๋‹ฌ๋ฆฌ๊ธฐ
  4. ๋ง‰ํžŒ
  5. ์ฃฝ์€
1. New(์‹ ์ƒ ์ƒํƒœ)๋Š” Thread ํด๋ž˜์Šค์—์„œ Thread ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ํ๋ฆ„์ด ์ƒ์„ฑ๋˜๊ณ  "์‹ ์ƒ" ์ƒํƒœ์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์ƒˆ๋กœ์šด ์ƒํƒœ๋กœ ๋“ค์–ด๊ฐ€์ง€๋งŒ ์ธ์Šคํ„ด์Šค์—์„œ start() ๋ฉ”์„œ๋“œ๊ฐ€ ์•„์ง ํ˜ธ์ถœ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. 2. ์‹คํ–‰ ๊ฐ€๋Šฅ. ์ด ์ƒํƒœ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ ์Šค๋ ˆ๋“œ์—์„œ start() ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋˜๋ฉด ์‹œ์ž‘ํ•  ์ค€๋น„๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด ์ƒํƒœ์—์„œ ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์„œ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์งˆ ๋•Œ๊นŒ์ง€(CPU ์‹œ๊ฐ„) ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค. ์ฆ‰, ์Šค๋ ˆ๋“œ๋Š” ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์Šค๋ ˆ๋“œ์˜ ๋Œ€๊ธฐ์—ด(์‹œ๋ฆฌ์ฆˆ)์ด ๋ฉ๋‹ˆ๋‹ค. 3. ์‹คํ–‰ ์ค‘(์‹คํ–‰ ์ค‘ ์ƒํƒœ). ์‹คํ–‰์ด๋ž€ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์Šค๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ•  ์‹œ๊ฐ„ ์Šฌ๋กฏ์„ ํ• ๋‹นํ–ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๊ฐ€ ์‹ค์ œ ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ƒํƒœ์ž…๋‹ˆ๋‹ค. 4. ์ฐจ๋‹จ๋จ(์ฐจ๋‹จ๋œ ์ƒํƒœ). ์Šค๋ ˆ๋“œ๊ฐ€ ์ผ์‹œ ์ค‘์ง€๋˜๊ฑฐ๋‚˜, ํœด๋ฉด ์ƒํƒœ์— ์žˆ๊ฑฐ๋‚˜, ์ฃผ์–ด์ง„ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•ด ์ผ์ • ์‹œ๊ฐ„ ๋™์•ˆ ๋Œ€๊ธฐํ•˜๋Š” ๊ฒฝ์šฐ ์ฐจ๋‹จ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. 5. ์ฃฝ์€ ์ƒํƒœ. ์ด ์กฐ๊ฑด์€ run() ๋ฉ”์„œ๋“œ๊ฐ€ ๋ช…๋ น ์‹คํ–‰์„ ์™„๋ฃŒํ•  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์ค‘์ง€๋˜๊ฑฐ๋‚˜ Dead ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์Šค๋ ˆ๋“œ๊ฐ€ run() ๋ฉ”์„œ๋“œ๋ฅผ ์ข…๋ฃŒํ•˜๋ฉด ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋˜๊ฑฐ๋‚˜ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค.

Java 8์˜ ๊ธฐ๋Šฅ์  ์ธํ„ฐํŽ˜์ด์Šค ๋ฐ ๊ธฐ๋ณธ ๋ฉ”์†Œ๋“œ

์ถœ์ฒ˜: Medium ์ด ๊ธฐ์‚ฌ์—์„œ๋Š” Java 8์— ๋„์ž…๋œ ์ผ๋ถ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ, ์ฆ‰ ๊ธฐ๋Šฅ์  ์ธํ„ฐํŽ˜์ด์Šค์™€ ๊ธฐ๋ณธ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๋ฐฉ๋ฒ•์ด๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

์šฐ๋ฆฌ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๊ฐ€ ์ถ”์ƒ ๋ฉ”์†Œ๋“œ์™€ ๋น„์ถ”์ƒ ๋ฉ”์†Œ๋“œ(๊ตฌํ˜„๋œ ๋ฉ”์†Œ๋“œ)๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” 100% ์ถ”์ƒ์ž…๋‹ˆ๋‹ค(์ด ๋ชจ๋“  ๋ฉ”์†Œ๋“œ์—๋Š” ์„œ๋ช…๋งŒ ์žˆ๊ณ  ๊ตฌํ˜„์€ ์—†์Šต๋‹ˆ๋‹ค). ํ•˜์ง€๋งŒ ํด๋ž˜์Šค ๋Œ€์‹  ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ํ•„์š”ํ•˜๊ณ  ๊ตฌํ˜„๋œ ๋ชจ๋“  ํด๋ž˜์Šค ๊ฐ„์— ๊ณตํ†ต ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ์š”? ์™œ๋ƒํ•˜๋ฉด ๊ตฌํ˜„ ์ฝ”๋“œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐ ํด๋ž˜์Šค์—์„œ ๋ฐ˜๋ณตํ•ด์„œ ๋ฐ˜๋ณต๋˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Java 8์—๋Š” ๊ธฐ๋ณธ ํ‚ค์›Œ๋“œ ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค . ์ธํ„ฐํŽ˜์ด์Šค์— ๊ตฌํ˜„๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ๋ฉ”์„œ๋“œ์— ๊ธฐ๋ณธ ํ‚ค์›Œ๋“œ๋ฅผ ํ• ๋‹นํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ์  ์ธํ„ฐํŽ˜์ด์Šค๋ž€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ธฐ๋Šฅ์  ์ธํ„ฐํŽ˜์ด์Šค๋Š” ํ•˜๋‚˜์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ์™€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ‘œ์ค€ ๋˜๋Š” ์ •์  ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ธฐ๋Šฅ์  ์ธํ„ฐํŽ˜์ด์Šค์˜ ์˜ˆ๋กœ๋Š” CompareTo()๋ผ๋Š” ํ•˜๋‚˜์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” Comparable์ด ์žˆ์Šต๋‹ˆ๋‹ค . Runnable์—๋Š” run() ๋ฉ”์„œ๋“œ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. @FunctionalInterface ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ธฐ๋Šฅ์  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค์— ํ•˜๋‚˜์˜ ์ถ”์ƒ ๋ฉ”์„œ๋“œ๋งŒ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
@FunctionalInterface
public interface MyfunctionalInterface{
   public void myabstractmethod();
   public static void method1(){
       //ะ˜ะผะฟะปะตะผะตะฝั‚ะฐั†ะธั
    }
   public default void method2(){
       //ะ˜ะผะฟะปะตะผะตะฝั‚ะฐั†ะธั
    }
}

๊ธฐ๋Šฅ์  ์ธํ„ฐํŽ˜์ด์Šค ์œ ํ˜•

์†Œ๋น„์ž - ํ•˜๋‚˜์˜ ์ธ์ˆ˜๋ฅผ ์ทจํ•˜๊ณ  ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • Consumer์˜ ์„ธ ๊ฐ€์ง€ ๋ณ€ํ˜•์€ DoubleConsumer, IntConsumer ๋ฐ LongConsumer์ž…๋‹ˆ๋‹ค(ํ—ˆ์šฉ๋˜๋Š” ์ธ์ˆ˜ ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฆ„).
  • ์ด์ค‘ ์†Œ๋น„์ž - ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์•„๋ฌด๊ฒƒ๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์กฐ๊ฑด์ž - ํ•˜๋‚˜์˜ ์ธ์ˆ˜๋ฅผ ์ทจํ•˜๊ณ  ๋ถ€์šธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • Predicate์˜ ์„ธ ๊ฐ€์ง€ ๋ณ€ํ˜•์€ DoublePredicate, IntPredicate ๋ฐ LongPredicate์ž…๋‹ˆ๋‹ค(ํ—ˆ์šฉ๋˜๋Š” ์ธ์ˆ˜ ์œ ํ˜•์— ๋”ฐ๋ผ ๋‹ค๋ฆ„).
  • Bi-Predicate - ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ถ€์šธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
ํ•จ์ˆ˜ - ํ•˜๋‚˜์˜ ์ธ์ˆ˜๋ฅผ ์ทจํ•˜๊ณ  ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • ๋งŽ์€ ๋ฒ„์ „์˜ ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜ ์œ ํ˜•์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ int , long ๋ฐ double์ด ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • ์ด์ค‘ ๊ธฐ๋Šฅ - ๋‘ ๊ฐœ์˜ ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ํ•˜๋‚˜์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • Unary ๋ฐ Binary ์—ฐ์‚ฐ์ž๋Š” ๊ฐ๊ฐ Function ๋ฐ Bi-Function์„ ๊ตฌํ˜„ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ์ถ”๊ฐ€ ์กฐ๊ฑด์€ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ๋™์ผํ•˜๊ณ  ๋™์ผํ•œ ์œ ํ˜•์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๊ณต๊ธ‰์—…์ฒด - ์ž…๋ ฅ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ๋‹จ์ผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ๋ฒ„์ „์˜ ๊ณต๊ธ‰์ž: BooleanSupplier, IntSupplier, LongSupplier ๋ฐ DoubleSupplier. ๋ฐ˜ํ™˜ ์œ ํ˜•์€ ํ•ด๋‹น ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ์ž…๋‹ˆ๋‹ค.
์ฝ”๋ฉ˜ํŠธ
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION