Java์ ์ค๋ ๋ ์๋ช
์ฃผ๊ธฐ
์ถ์ฒ:
์ค๊ฐ ์ด ๊ธฐ์ฌ์์๋ Java ์ค๋ ๋์ ๋ค์ํ ์๋ช
์ฃผ๊ธฐ ์ํ์ ๋ํด ์ค๋ช
ํฉ๋๋ค. Java์์ ์ค๋ ๋์ ๋ผ์ดํ์ฌ์ดํด์ ์ฃผ๋ก ์ค๋ ๋ ์์ฑ์ผ๋ก ์์ํ์ฌ ์ค๋ ๋ ์ข
๋ฃ๋ก ๋๋๋ ๋ค์ํ ์ํ๋ก์ ์ ํ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
Thread ํด๋์ค ์
start() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ค๋ ๋๋ฅผ ๋ง๋ค๊ณ ์์ํ๋ฉด ์ค๋ ๋๋ฅผ ์คํํ ์ค๋น๊ฐ ๋ ๊ฒ์
๋๋ค . Thread ํด๋์ค์
sleep() ๋๋
wait() ๋ฉ์๋๊ฐ ํธ์ถ๋๋ฉด ์ค๋ ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ฉ๋๋ค. ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด ์ค๋ ๋ ์ํ๋ฅผ ์๋ณํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. Java ์ค๋ ๋์ ๋ผ์ดํ์ฌ์ดํด์ด ์ํ๋ฅผ ์ด๋ป๊ฒ ๊ฒฐ์ ํ๋์ง ์ดํดํด ๋ด
์๋ค. ์ด์ ๋ํ Java ๋ฌธ์์ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ค๋ ๋๋ ์๋ช
์ฃผ๊ธฐ ๋์ ๋ค์ฏ ๊ฐ์ง ์ํ ์ค ํ๋์ ๋ค์ด๊ฐ ์ ์๋ ํ๋ก๊ทธ๋จ ์คํ ๊ฒฝ๋ก์
๋๋ค.
- ์๋ก์ด
- ์คํ ๊ฐ๋ฅ
- ๋ฌ๋ฆฌ๊ธฐ
- ๋งํ
- ์ฃฝ์
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. ๋ฐํ ์ ํ์ ํด๋น ํ๋ฆฌ๋ฏธํฐ๋ธ์
๋๋ค.
GO TO FULL VERSION