-
[Java] ํจ์ํ ์ธํฐํ์ด์ค์ ๋๋ค๐ปProgramming/Java 2024. 2. 23. 17:10
ํจ์ํ ์ธํฐํ์ด์ค๋?
์ถ์ ๋ฉ์๋๋ฅผ ๋ฑ 1๊ฐ๋ง ๊ฐ์ง๊ณ ์๋ ์ธํฐํ์ด์ค.
SAM(Single Abstract Interface) ์ธํฐํ์ด์ค๋ผ๊ณ ๋ ํ๋ค.
@FunctionalInterface๋ฅผ ์ด์ฉํ์ฌ ํํํ๋ค.
@FunctionalInterface public interface RunSomething { void doIt(); }
์๋ฐ 8์ด์๋ถํฐ๋ abstract๋ฅผ ๋ช ์ํด์ฃผ์ง ์์๋ ์๋์ผ๋ก ์ถ์ ๋ฉ์๋๋ก ๊ฐ์ฃผ๋๋ค.
๋ง์ฝ @FunctionalInterface์ด๋ ธํ ์ด์ ์ ๋ถ์ด๊ณ ์ถ์ ๋ฉ์๋๋ฅผ ๋๊ฐ ์ด์ ์ถ๊ฐํ์ ๊ฒฝ์ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค.
static ๋ฉ์๋๊ฐ ์๋, default ๋ฉ์๋๊ฐ ์๋ ์ถ์ ๋ฉ์๋๊ฐ ํ๊ฐ์ธ ์ธํฐํ์ด์ค๋ ๋ฌด์กฐ๊ฑด "ํจ์ํ ์ธํฐํ์ด์ค"์ด๋ค.
ํจ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋ ๊ฐ?
Java8 ์ด์ : ์ต๋ช ๋ด๋ถ ํด๋์ค ์ด์ฉ
public class Foo { public static void main(String[] args) { // ์ต๋ช ๋ด๋ถ ํด๋์ค (anonymous inner class) RunSomething runSomething = new RunSomething() { @Override public void doIt() { System.out.println("Hello!"); System.out.println("Hi!"); } }; } }
java8 ์ดํ: ๋๋ค ํํ์์ ์ด์ฉ
public class Foo { public static void main(String[] args) { // ์ต๋ช ๋ด๋ถ ํด๋์ค (anonymous inner class) RunSomething runSomething = () -> { System.out.println("Hello!"); System.out.println("Hi!"); }; } }
์ ๊ฐ์ด ์ฝ๋๋ฅผ ํจ์ฌ ๊ฐ๊ฒฐํ๊ฒ ์ถ์ ๊ฐ๋ฅ.
๋๋ค ํํ์(Lambda Expressions)์ด๋?
ํจ์ํ ์ธํฐํ์ด์ค์ "์ธ์คํด์ค"๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ผ๋ก ์ฐ์ผ ์ ์๋ค.
์ฝ๋๋ฅผ ์ค์ผ ์ ์๋ค.
๋ฉ์๋์ ๋งค๊ฐ๋ณ์, ๋ฆฌํด ํ์ , ๋ณ์๋ก ๋ง๋ค์ด ์ฌ์ฉํ ์๋ ์๋ค.
Java์์ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋?
ํจ์๋ฅผ First class object๋ก ์ฌ์ฉํ ์ ์๋ค.
์์ ํจ์(Pure function)
- ์ฌ์ด๋ ์ดํํธ๋ฅผ ๋ง๋ค ์ ์๋ค -> ํจ์ ๋ฐ์ ์๋ ๊ฐ์ ๋ณ๊ฒฝํ์ง ๋ชปํ๋ค.
(* ํจ์ ๋ฐ์ ์๋ ๊ฐ์ ์ฐธ์กฐํ๊ฑฐ๋ ๋ณ๊ฒฝํ๋ ค๊ณ ํ๋ฉด ์๋๋ค. ์ค๋ก์ง ํจ์ ๋ด๋ถ์์ ์ฐ๋ ๊ฐ, ํจ์๊ฐ ์ ๋ฌ๋ฐ์ ํ๋ผ๋ฏธํฐ๋ง ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค.)
- ํจ์ ๋ฐ์ ์ ์๋์ด์๋ ์ํ๊ฐ ์๋ค.
๊ณ ์ฐจ ํจ์(High-Order Function): ํจ์๊ฐ ํจ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ ์๊ณ ํจ์๋ฅผ ๋ฆฌํดํ ์๋ ์๋ค.
๋ถ๋ณ์ฑ
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํ๋ ์ด์
ํท๊ฐ๋ฆฌ๋ ๋ฌธ์ ์ ์ค๋ฅ๋ฅผ ํผํ ์ ์๋ค.
ํ ์คํธ์ ๋๋ฒ๊น ์ฉ์ด
๋ ๋์ ๋ชจ๋ํ์ ์งง์ ์ฝ๋๋ฅผ ์ ๊ณต
๊ฐ๋ฐ ์์ฐ์ฑ์ ๋์ผ ์ ์๋ค
๊ฐ๋ ์ฑ์ด ๋์ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ฝ๋ค
๋ถ์ ํจ๊ณผ๋ฅผ ์ ๊ฑฐํ ์ ์๋ค
ํจ์ ๋จ์์ ์ฝ๋ ์ฌ์ฌ์ฉ ์ฉ์ด
ํ๋ก๊ทธ๋จ์ ๋์์ ์์ธกํ๊ธฐ ์ฝ๋ค
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ํ๊ณ
์๋ง์ ํจ์๋ค์ ํ์ ํ๊ณ ์ ์ง๊ด๋ฆฌํ๊ธฐ ํ๋ฌ
๊ด๋ฒ์ํ ํ๊ฒฝ ์ค์ ์ด ํ์ํ ์ ์๋ค
ํจ์๊ฐ ๋ง์์ง ์๋ก ํจ์๋ฅผ ์กฐํฉํ๊ธฐ ๋ณต์กํด์ง๋ฉฐ ๊พธ์คํ ๋ฆฌํฉํ ๋ง์ด ํ์ํ ์ ์๋ค
References
์ธํ๋ฐ - ๋ฐฑ๊ธฐ์ ์ ๋ ์๋ฐ, Java 8
'๐ปProgramming > Java' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java] HashMap ์ฌ์ฉ๋ฒ (0) 2024.03.10 [Java] extends์ implements์ ์ฐจ์ด (0) 2023.10.04