Lambda
์๋ฐ๋ ๊ฐ์ฒด์งํฅ์ธ์ด์ด์ง๋ง, ์๋ฐ 8์ ๋์ ๋ ๋๋ค์์ ํตํด ํจ์ํ ์ธ์ด์ ํน์ง์ ์ฌ์ฉํ ์ ์๋ค. ๋๋ค์์ ์ฌ์ฉํ๋ฉด ๋ฉ์๋๋ฅผ ํ๋์ ์์ผ๋ก ํํํ ์ ์์ผ๋ฉฐ, ์ฝ๋์ ์์ ์ค์ด๋ฉด์ ๊ฐ๋ ์ฑ์ ๋์ผ ์ ์๋ค. ๋ํ ๋๋ค์์ ๋ฉ์๋์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ์ ์์ผ๋ฉฐ, ๋ฉ์๋์ ๊ฒฐ๊ณผ๋ก ๋ฐํํ ์๋ ์๋ค.
ํจ์ํ ์ธํฐํ์ด์ค(Functional Interface)
ํจ์ํ ์ธํฐํ์ด์ค๋ ๋จ ํ๋์ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๋ ์ธํฐํ์ด์ค๋ฅผ ๋งํ๋ฉฐ, ํด๋น ๋ฉ์๋๋ฅผ ํจ์๋ผ๊ณ ๋ถ๋ฅธ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ต๋ช ํด๋์ค์ ๊ฐ์ฒด๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
์ ์ฝ๋์ ๋ฉ์๋ max()
๋ฉ์๋๋ฅผ ๋๋ค์์ผ๋ก ์๋์ ๊ฐ์ด ํํํ ์ ์๋ค.
์ด์ฒ๋ผ MyFunction
์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ์ต๋ช
ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋๋ค์์ผ๋ก ๋์ฒดํ ์ ์๋ ์ด์ ๋ ๊ตฌํํ ์ธํฐํ์ด์ค๊ฐ ํจ์ํ ์ธํฐํ์ด์ค์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ํจ์ํ ์ธํฐํ์ด์ค๊ฐ ๋๊ธฐ ์ํ ์กฐ๊ฑด์ default ๋ฉ์๋๋ static ๋ฉ์๋๋ฅผ ๊ฐ์ง ์ ์์ง๋ง, ๊ตฌํํด์ผ ํ ์ถ์ ๋ฉ์๋๋ ํ๋๋ง ์กด์ฌํด์ผ ํ๋ค.
๊ฒฐ๊ตญ ๊ตฌํํด์ผ ํ ์ถ์ ๋ฉ์๋๊ฐ ํ๋์ด๊ธฐ ๋๋ฌธ์ ๋๋ค์์ ํตํด ์ต๋ช
ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ ๊ฒ์ด๋ค.
@FunctionalInterface
@FunctionalInterface
์ด๋
ธํ
์ด์
์ ์ถ์ ๋ฉ์๋๊ฐ ํ๋๋ง ์กด์ฌํ๋์ง ์ปดํ์ผ๋ฌ๊ฐ ์ฒดํฌํ๋๋ก ํ์ฌ ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ ์ํ๋์ง ํ์ธํ ์ ์๋ค.
์๋๋ ์ค์ Comparator ์ธํฐํ์ด์ค์ ์ ์์ด๋ค.
๋ฐํ๊ณผ ๋งค๊ฐ๋ณ์
๋ฉ์๋์ ๋งค๊ฐ๋ณ์๊ฐ ํจ์ํ ์ธํฐํ์ด์ค์ธ ๊ฒฝ์ฐ ๋๋ค์์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ฐํํ์ ์ด ํจ์ํ ์ธํฐํ์ด์ค์ธ ๊ฒฝ์ฐ ๋๋ค์์ผ๋ก ๋ฐํํ ์ ์๋ค.
java.util.function ํจํค์ง
์ผ๋ฐ์ ์ผ๋ก ์์ฃผ ์ฐ์ด๋ ํ์์ ๋ฉ์๋๋ฅผ ํจ์ํ ์ธํฐํ์ด์ค๋ค์ ๋ฏธ๋ฆฌ ์ ์ํด๋์ ํจํค์ง๋ก ์์ฃผ ์ฐ์ด๋ ํจ์ํ ์ธํฐํ์ด์ค๋ ์๋์ ๊ฐ๋ค.
java.lang.Runnable
void run()
์์
์์
Supplier
T get()
์์
T
Consumer
void accept(T t)
T
์์
Function<T, R>
R apply(T t)
T
R
Predicate
boolean test(T t)
T
boolean
์ ์ธํฐํ์ด์ค ์ค Function<T, R>
๊ณผ Predicate<T>
๋ฅผ ํ์ฉํ ์์๋ ์๋์ ๊ฐ๋ค.
๊ทธ ์ธ์๋ BiFunction<T, U, R>
๊ณผ BiPredicate<T, U>
๋ฑ๊ณผ ๊ฐ์ ๋ ๊ฐ ์ด์์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง๋ ํจ์ํ ์ธํฐํ์ด์ค๋ ์์ผ๋ฉฐ,
UnaryOperator<T>
์ BinaryOperator<T>
๋ ๋งค๊ฐ๋ณ์์ ๋ฐํ๊ฐ์ ํ์
์ด ๊ฐ๋ ํจ์ํ ์ธํฐํ์ด์ค๋ ์กด์ฌํ๋ค.
๋ฉ์๋ ์ฐธ์กฐ(Method Reference)
๋ฉ์๋ ์ฐธ์กฐ๋ ๋๋ค์์ผ๋ก ํํํ ์ ์๋ ์ต๋ช ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ์ฝ๋๋ฅผ ๋ ๊ฐ๊ฒฐํ๊ฒ ํํํ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค. ์ ๋ฌ ๋ฐ์ ์ธ์๋ฅผ ๊ทธ๋๋ก ๋ค๋ฅธ ๋ฉ์๋๋ก ์ ๋ฌํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ ์ ์๋ค.
์ฐธ๊ณ ์๋ฃ
Last updated
Was this helpful?