๋๋ค์(Lambda Expression)
ํจ์์ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ผ๋ก 'y = f(x)' ํํ์ ํจ์๋ก ๊ตฌ์ฑ๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ฒ์ด๋ค.
์ฆ, ๋๋ค์์ ํจ์๋ฅผ ํ๋์ ์(expression)์ผ๋ก ํํํ ๊ฒ์ด๋ค.
ํจ์๋ฅผ ๋๋ค์์ผ๋ก ํํํ๋ฉด ๋ฉ์๋์ ์ด๋ฆ์ด ํ์ ์๊ธฐ ๋๋ฌธ์, ๋๋ค์์ ์ต๋ช ํจ์(Anonymous Function)์ ํ ์ข ๋ฅ๋ผ๊ณ ๋ณผ ์ ์๋ค.
์๋ฐ 8๋ถํฐ ์ง์ํ๋ฉฐ ์๋ฐ๋ ๋๋ค์์ ํจ์์ ์ธํฐํ์ด์ค์ ์ต๋ช ๊ตฌํ ๊ฐ์ฒด๋ก ์ทจ๊ธํ๋ค.
'๋๋ค์ → ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง ์ฝ๋ ๋ธ๋ก → ์ต๋ช ๊ตฌํ ๊ฐ์ฒด'
- ์ต๋ช
ํจ์(Anonymous Function) : ํจ์์ ์ด๋ฆ์ด ์๋ ํจ์๋ก, ์ต๋ช
ํจ์๋ค์ ๋ชจ๋ ์ผ๊ธ ๊ฐ์ฒด์ด๋ค.
- ์ผ๊ธ ๊ฐ์ฒด์ธ ํจ์๋ ๋ณ์์ฒ๋ผ ์ฌ์ฉ๊ฐ๋ฅํ๋ฉฐ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌ์ด ๊ฐ๋ฅํ๋ ๋ฑ์ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
- ๋ณ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ ์์ ๋ด์ ์ ์๋ค.
- ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ ๊ฐ๋ฅ
- ๋ฐํ๊ฐ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
- ํ ๋น์ ์ฌ์ฉ๋ ์ด๋ฆ๊ณผ ๋ฌด๊ดํ๊ฒ ๊ณ ์ ํ ๊ตฌ๋ณ์ด ๊ฐ๋ฅ
- ์ผ๊ธ ๊ฐ์ฒด์ธ ํจ์๋ ๋ณ์์ฒ๋ผ ์ฌ์ฉ๊ฐ๋ฅํ๋ฉฐ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌ์ด ๊ฐ๋ฅํ๋ ๋ฑ์ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
- ํจ์์ ์ธํฐํ์ด์ค : ํ ๊ฐ์ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ธํฐํ์ด์ค
- static, default ๋ฉ์๋๊ฐ ์์ด๋ ๊ด์ฐฎ๋ค.
- ์ต๋ช
๊ตฌํ ๊ฐ์ฒด : ์ด๋ฆ์ด ์๋ ๊ฐ์ฒด๋ก, ํ๋ฒ์ฐ๊ณ ๋ฒ๋ฆด ๊ฐ์ฒด๊ฐ ํ์ํ ๋ ์ต๋ช
๊ตฌํ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ค.
- ์ผํ์ฑ์ด๋ฉฐ, ์ฌ์ฌ์ฉํ ํ์ ์๊ณ ํ์ผ๋จ์์ ๊ด๋ฆฌ ๋์์ด ์๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๋ ์ฌ์ฉํ๋ค.
- ์ธํฐํ์ด์ค๋ช ๋ณ์ = new ์ธํฐํ์ด์ค๋ช () {};
์์ฑ ๋ฐฉ๋ฒ
// ๊ธฐ๋ณธ ํ์
(ํ์
๋งค๊ฐ๋ณ์, ...) -> {์คํ๋ฌธ; ... }
// 1. ๋งค๊ฐ ํ์
์ ๋ฐํ์์์ ๋์
๊ฐ์ ๋ฐ๋ผ ์๋์ผ๋ก ์ธ์ํ๊ธฐ ๋๋ฌธ์ ์๋ต ๊ฐ๋ฅ
(a) -> { System.out.println(a); }
// 2. ํ๋์ ๋งค๊ฐ๋ณ์๋ง ์์ ๊ฒฝ์ฐ์๋ ๊ดํธ() ์๋ต ๊ฐ๋ฅ
a -> { System.out.println(a); }
// 3. ํ๋์ ์คํ๋ฌธ๋ง ์๋ค๋ฉด ์ค๊ดํธ {} ์๋ต ๊ฐ๋ฅ
a -> System.out.println(a);
// 4. ๋งค๊ฐ๋ณ์๊ฐ ์๋ค๋ฉด ๊ดํธ () ์๋ตํ ์ ์์
() -> { System.out.println(a); }
// 5. ๋ฆฌํด๊ฐ์ด ์๋ ๊ฒฝ์ฐ, return ๋ฌธ์ ์ฌ์ฉ
(x, y) -> { return x + y; }
// 6. ์ค๊ดํธ {}์ return ๋ฌธ๋ง ์์ ๊ฒฝ์ฐ, ์ค๊ดํธ๋ฅผ ์๋ต
(x, y) -> x + y
ํน์ง
- ๋๋ค์ ๋ด์์ ์ฌ์ฉ๋๋ ์ง์ญ ๋ณ์๋ final์ด ๋ถ์ง ์์๋ ์์๋ก ๊ฐ์ฃผ๋๋ค.
- ๋๋ค์์ ๋ณ๋ ์ค๋ ๋์์ ์ํ์ด ๊ฐ๋ฅํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ธ๋ถ ์ง์ญ ๋ณ์๋ฅผ ์ ์ดํ๋ ์ค๋ ๋์ ๋๋ค์์ ์ํํ๋ ์ค๋ ๋๊ฐ ์๋ก ๋ค๋ฅผ ์ ์๋ค.
- ๋ง์ฝ, A๋ ์ง์ญ ๋ณ์๋ฅผ ์ ์ดํ๋ ์ค๋ ๋์ด๊ณ , B๋ ๋๋ค์์ ์คํํ๋ ์ค๋ ๋์ผ ๋, ๋๋ค์์๋ ์ธ๋ถ ์ง์ญ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์บก์ฒ๋ง์ ํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค์์ ์คํํ๋ ์ค๋ ๋์์๋ ์ง์ญ ๋ณ์์ ๊ฐ์ ์ฐธ์กฐํ๊ธฐ ์ํด ์ด๋ฅผ ๋ณต์ฌํ๋ค.
- ๊ทธ๋ฐ๋ฐ, ๋ณต์ฌ๋๋ ๊ฐ์ธ ์ธ๋ถ ์ง์ญ ๋ณ์๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๊ฒ ๋๋ ๊ฒฝ์ฐ, ๋ณต์ฌ๋ ๊ฐ์ด ์ต์ ๊ฐ์์ ๋ณด์ฅํ ์ ์๋ค. ์คํ ์์ญ์ ์ค๋ ๋ ๋ง๋ค ์์ฑ๋๊ธฐ ๋๋ฌธ์ ์ค๋ ๋ A, B๊ฐ ๊ฐ๋ ์คํ ์์ญ์ ๊ฐ์ ๊ณ ์ ํ๋ค. ๋ฐ๋ผ์ ํ ์ค๋ ๋์์ ๋ค๋ฅธ ์ค๋ ๋์ ์คํ์ ์๋ ๊ฐ์ ๋ณ๊ฒฝ์ฌํญ์ ํ์ธํ ์ ์๋ค.
- ๋ฐ๋ผ์ ๋ณต์ฌ๋ ๊ฐ์ ๋ณด์ฅํ ์ ์์ผ๋ฏ๋ก ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ์์ธกํ ์ ์๋ ์ํฉ์ด ๋ฐ์ํ๋ค. ์ด๊ฒ์ด ๋๋ค์์์ ์ฐธ์กฐํ๋ ์ธ๋ถ ์ง์ญ ๋ณ์๊ฐ ๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์์ผ ํ๋ ์ด์ ์ด๋ค.
- ๋๋ค์์ผ๋ก ์ ์ธ๋ ๋ณ์๋ช ์ ๋ค๋ฅธ ๋ณ์๋ช ๊ณผ ์ค๋ณต๋ ์ ์๋ค.
์ข ์ข ์ต๋ช ๊ตฌํ ๊ฐ์ฒด์ ๋๋ค์์ ๋์ผ์ํ์ง๋ง ๋ค์๊ณผ๊ฐ์ ์ฐจ์ด์ ์ด ์๋ค.
1. ๋๋ค์์ ์ต๋ช ๊ตฌํ ๊ฐ์ฒด ์ฒ๋ผ ๋ณ๋์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ฑฐ๋ ์ปดํ์ผ ๊ฒฐ๊ณผ ๋ณ๋์ ํด๋์ค๋ฅผ ์์ฑํ์ง ์๋๋ค๋ ๊ฒ
2. ๋๋ค์ ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๋ณ์๋ Variable Capture(๊ฐ ๋ณต์ฌ)๊ฐ ๋ฐ์ํ๋ฉฐ, ์ด ๊ฐ์ final์ด๊ฑฐ๋ final ์ฒ๋ผ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ฒ
์ฌ์ฉํ๋ ์ ์ฅ์์๋ '์ธ์คํด์ค ๋ณ์๋ฅผ ์ ์ธํ๊ณ ๋๋ค์ ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๋ณ์๋ final์ด๊ฑฐ๋ final ์ฑ๊ฒฉ์ ๊ฐ์ ธ์ผ ํ๋ค'๊ณ ๊ธฐ์ตํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. [์ถ์ฒ]
์ฅ์
- ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ๋ง๋ค ์ ์๋ค.
- ์์ ๊ฐ๋ฐ์์ ์๋๊ฐ ๋ช ํํ ๋๋ฌ๋ ๊ฐ๋ ์ฑ์ด ๋์์ง๋ค.
- ํจ์๋ฅผ ๋ง๋๋ ๊ณผ์ ์์ด ํ๋ฒ์ ์ฒ๋ฆฌํ ์ ์์ด ์์ฐ์ฑ์ด ๋์์ง๋ค.
- ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์์ ์ ๋ฆฌํ๋ค. ๋ฐ์ดํฐ ํฌ์ฅ ๊ฐ์ฒด๋ฅผ ์์ฑ ํ ์ฒ๋ฆฌํ๋ ๊ฒ๋ณด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋์ ์ ๋ฆฌํ๋ค.
- ๋ณ๋ ฌ ํ๋ก๊ทธ๋๋ฐ์ด ์ฉ์ดํ๋ค.
- ๋ฉํฐ ์ฝ์ด CPU์์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ฌ ์ฒ๋ฆฌํ๊ณ ์ทจํฉํ ๋ ๊ฐ์ฒด๋ณด๋ค ํจ์๊ฐ ์ ๋ฆฌํ๋ค.
๋จ์
- ๋๋ค๋ฅผ ์ฌ์ฉํ๋ฉด์ ๋ง๋ ์ต๋ช ํจ์๋ ์ฌ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ๋๋ฒ๊น ์ด ์ด๋ ต๋ค.
- ๋๋ค๋ฅผ ๋จ๋ฐํ๋ฉด ๋น์ทํ ํจ์๊ฐ ์ค๋ณต ์์ฑ๋์ด ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง ์ ์๋ค.
- ์ฌ๊ท๋ก ๋ง๋ค๊ฒฝ์ฐ์ ๋ถ์ ํฉํ๋ค.
๊ฒฐ๊ตญ ๋ฌด์กฐ๊ฑด ๋๋ค๊ฐ ์ข๋ค๋ ๋ณด์ฅ์ ์๋ค. ์ํฉ์ ๋ฐ๋ผ ํ์์ ๋ง๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํ๋ค.
ํจ์์ ์ธํฐํ์ด์ค
ํจ์์ ์ธํฐํ์ด์ค๋ ํ ๊ฐ์ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ ์ธํฐํ์ด์ค๋ฅผ ๋งํ๋ค.
ํจ์๋ฅผ 1๊ธ ๊ฐ์ฒด์ฒ๋ผ ๋ค๋ฃฐ ์ ์๊ฒ ํด์ฃผ๋ ์ด๋ ธํ ์ด์ (@FunctionalInterface)์ผ๋ก, ์ธํฐํ์ด์ค์ ์ ์ธํ์ฌ ๋จ ํ๋์ ์ถ์ ๋ฉ์๋๋ง์ ๊ฐ๋๋ก ์ ํํ๋ ์ญํ ์ ํ๋ค.
- ๋งค๊ฐํ์ ์ผ๋ก ์ฌ์ฉ๋์ด ๋๋ค์์ ๋งค๊ฐ๊ฐ์ผ๋ก ๋์ ํ ์ ์๋๋ก ํด์ค๋ค.
- ์๋ฐ์ ๋๋ค์์ด ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์ฌ์ฉํ๋ค.
java.util.function ํจํค์ง์ ํฌํจ๋์ด ์๋ค.
ํ์ค API๋ก ์ ๊ณต๋๋ ํจ์์ ์ธํฐํ์ด์ค ์ข ๋ฅ
- Consumer
- ์๋น์๋ผ๋ ๋ป์ผ๋ก, ๋ฐ์ดํฐ๋ฅผ ์๋น๋งํ๊ณ ๋๋๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ํจ์์ ์ธํฐํ์ด์ค๋ค.
- ๋งค๊ฐ๊ฐ๋ง ์๊ณ ๋ฆฌํด๊ฐ์ด ์๋ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- Supplier
- ๋ฐ์ดํฐ๋ฅผ ๊ณต๊ธํ๋ ์๋ฏธ. ๊ณต๊ธ์ ๊ธฐ๋ฅ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฆฌํด์์ผ์ค๋ค.
- ๋งค๊ฐ๊ฐ์ ์๊ณ ๋ฆฌํด๊ฐ๋ง ์๋ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- Function
- A ๋ฐ์ดํฐ๋ฅผ B ๋ฐ์ดํฐ๋ก ๋ณํํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
- ๋งค๊ฐ๊ฐ๊ณผ ๋ฆฌํด๊ฐ์ด ๋ชจ๋ ์๋ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ์ฃผ๋ก ๋งค๊ฐ๊ฐ์ ๋ฆฌํด๊ฐ์ผ๋ก ๋งคํ(ํ์ ๋ณํ)ํ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
- Operator
- ์ด๋ค ๋ฐ์ดํฐ ์ฐ์ฐํ ๋ ์ฌ์ฉํ๋ค.
- ๋งค๊ฐ๊ฐ๊ณผ ๋ฆฌํด๊ฐ์ด ๋ชจ๋ ์๋ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
- ์ฃผ๋ก ๋งค๊ฐ๊ฐ์ ์ฐ์ฐํ๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
- Predicate
- ์ด๋ค ๋งค๊ฐ๊ฐ์ ์กฐ์ฌํด์ true ๋๋ false๋ฅผ ๋ฆฌํดํ ๋ ์ฌ์ฉํ๋ค.
- ๋งค๊ฐ๊ฐ๊ณผ ๋ฆฌํด๊ฐ(true/false)๊ฐ ์๋ค.
๋ฉ์๋, ์์ฑ์ ์ฐธ์กฐ(Method/Constructor Reference)
ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ๋๋ค์์ด ์๋ ์ผ๋ฐ ๋ฉ์๋/์์ฑ์๋ฅผ ์ฐธ์กฐ์์ผ ์ ์ธํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฝ๋ก ๋๊ฐ(::)๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ค์์ ๋ ๊ฐ๋ตํ๊ฒ ํํํ ์ ์๊ฒ ํ๋ค. ์ผ๋ฐ ๋ฉ์๋๋ฅผ ์ฐธ์กฐํ๊ธฐ ์ํด์ ๋ค์์ 3๊ฐ์ง ์กฐ๊ฑด์ ๋ง์กฑํด์ผ ํ๋ค.
- ํจ์ํ ์ธํฐํ์ด์ค์ ๋งค๊ฐ๋ณ์ ํ์ = ๋ฉ์๋์ ๋งค๊ฐ๋ณ์ ํ์
- ํจ์ํ ์ธํฐํ์ด์ค์ ๋งค๊ฐ๋ณ์ ๊ฐ์ = ๋ฉ์๋์ ๋งค๊ฐ๋ณ์ ๊ฐ์
- ํจ์ํ ์ธํฐํ์ด์ค์ ๋ฐํํ = ๋ฉ์๋์ ๋ฐํํ
์ข ๋ฅ
- static ๋ฉ์๋ ์ฐธ์กฐ
- ํด๋์ค_์ด๋ฆ::๋ฉ์๋_์ด๋ฆ
- ์ธ์คํด์ค ๋ฉ์๋ ์ฐธ์กฐ
- ์ธ์คํด์ค_๋ณ์::๋ฉ์๋_์ด๋ฆ
- ๋๋ค์์ ๋งค๊ฐ๋ณ์๋ก ์ ๊ทผ ๊ฐ๋ฅํ ๋ฉ์๋ ์ฐธ์กฐ
- ๋งค๊ฐ๋ณ์์_ํ์ _ํด๋์ค_์ด๋ฆ::๋ฉ์๋_์ด๋ฆ
- ์์ฑ์ ์ฐธ์กฐ
- ํด๋์ค_์ด๋ฆ::new
์ฐธ๊ณ
'๐ > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] ๋ณ์์ scope์ static (0) | 2021.08.11 |
---|---|
[Java] ๊ฐ๋น์ง ์ปฌ๋ ์ (Garbage Collection) (0) | 2021.08.11 |
[Java] ์คํธ๋ฆผ Stream (0) | 2021.07.28 |
[Java] ์ ๋ค๋ฆญ(Generic) (0) | 2021.07.28 |
[Java] ์๋ฐ ๊ฐ์ ๋จธ์ (Java Virtual Machine) (0) | 2021.07.28 |
๋๊ธ