๋๋ค์(lambda expression)
- ๋ฉ์๋๋ฅผ ํ๋์ ์์ผ๋ก ํํํ ๊ฒ
- ๋ฉ๋๋ฅผ ๋ณ์์ฒ๋ผ ๋ค๋ฃจ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ง
public interface A {
void m();
}
์๋ฅผ๋ค์ด ์์ ๊ฐ์ ํจ์ํ ์ธํฐํ์ด์ค๊ฐ ์๋ค๊ณ ๊ฐ์ ํ์
ํจ์ํ ์ธํฐํ์ด์ค
- ํ๋์ ์ถ์ ๋ฉ์๋์ ์ ์ธ์ ํฌํจํ ์ธํฐํ์ด์ค
- ๋จ์ผ ์ถ์ ๋ฉ์๋๋ฅผ ๊ฐ์ง๋ค
public class AA implements A {
public void m() {
System.out.println("AA");
}
}
public class Test {
public static void main(String[] args) {
A a1 = new AA();
}
}
๊ธฐ์กด์๋ A ๋ผ๋ ์ธํฐํ์ด์ค์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด A ์ธํฐํ์ด์ค๋ฅผ implementsํ AAํด๋์ค๋ฅผ ๋ฐ์์์ ์ ์ํ์๋ค
public class Test {
A a2 = new A() {
public void m() {
System.out.println("์ต๋ช
๋ด๋ถํด๋์ค");
}
}
}
๋๋ ์ต๋ช ๋ด๋ถ ํด๋์ค๋ฅผ ์ฌ์ฉํ ์๋ ์๋ค
public class Test{
A a3 = () -> System.out.println("๋๋ค์");
}
๋๋ค์์ ์์ ๊ฐ์ ์ต๋ช ๋ด๋ถ ํด๋์ค์์ new ๋ฅผ ์๋ตํ๊ณ ๋ฉ์๋(์ด์ฐจํผ ํ๋๋ฐ์ ์๊ธฐ ๋๋ฌธ์)๋ ์๋ตํ ๋ค ๊ตฌํ ๋ด์ฉ์ ์ ๋ ฅํ๋๊ฒ์ด ๋๋ค์์ด๋ค
๋๋ค์์ผ๋ก ์ฌ์ฉํ๋ ์ธํฐํ์ด์ค๋ ๋ฐ๋์ ๋ฉ์๋๊ฐ ํ๋์ฌ์ผ ํ๊ณ , ๋๋ค์์ ๊ตฌํํ๋ ๋ฉ์๋์ ๋ด์ฉ์ ์ธํฐํ์ด์ค ๋ฉ์๋์ ๋ด์ฉ์ด๋ค
๋๋ค์ ํํ ๋ฐฉ๋ฒ
public interface A { // ํ๋ผ๋ฏธํฐ x, ๋ฆฌํด๊ฐ x
void m();
}
public interface A { // ํ๋ผ๋ฏธํฐ o, ๋ฆฌํด๊ฐ x
void m(String str);
}
public interface A { // ํ๋ผ๋ฏธํฐ x, ๋ฆฌํด๊ฐ o
String m();
}
public interface A { // ํ๋ผ๋ฏธํฐ o, ๋ฆฌํด๊ฐ o
int m(int x, int y);
}
public class Test{
public static void main(String[] args) {
A a = () -> System.out.println("A");
B b = str -> System.out.println(str); // ํ๋ผ๋ฏธํฐ๊ฐ ํ๋๋ผ๋ฉด ๊ดํธ๋ ์๋ต ๊ฐ๋ฅ
C c = () -> {
System.out.println("C");
return "C";
}
// ๋ง์ฝ ๊ตฌํ๋ถ๊ฐ 1์ค์ด๋ผ๋ฉด {}์ return์ ํจ๊ป ์๋ตํด์ผํจ
// C c = () -> "C";
D d = (x, y) -> x + y
}
}
๋๋ค์์ผ๋ก ์ฌ์ฉํ ์ธํฐํ์ด์ค์๋ @FunctionalInterface
๋ฅผ ๋ถ์ฌ์ฃผ๋ฉด ๋ฉ์๋๋ฅผ ๋ ์ด์ ์ถ๊ฐํ ์ ์์