More Related Content Similar to Java lambda (20) More from Hyosang Hong (18) Java lambda1. JAVA Lambda
์์ฑ์ : ํํจ์
์ด๋ฉ์ผ : hyomee@naver.com
์์ค : https://github.com/hyomee/JAVA_EDU
ํ๋ก๊ทธ๋จ์ ์ฌ๋์ด ์ดํดํ๋ ์ฝ๋๋ฅผ ์์ฑ.
๋๋ ค๋ ๊พธ์คํ๋ฉด ๊ฒฝ๊ธฐ์์ ์ด๊ธด๋ค.
3. 1. ์ต๋ช
(Anonymous) Class
16. Lambda
โข ํ๋ก๊ทธ๋จ์์์ผ์์ ์ผ๋กํ๋ฒ๋ง์ฌ์ฉ๋๊ณ ๋ฒ๋ ค์ง๋๊ฐ์ฒด๋ฅผ๋งค๋ฒ๊ฐ์ฒด๋ฅผ๋ง๋ค์ด์ผํ๋?
โข ํ์ฅ์ฑ์๊ณ ๋ คํด์๊ฐ์ฒด๋ฅผ์์ฑํด์ผํ๋๋ฐโฆ์์ ์ดํธํ ๊น?
โข ์ฌ์ฉ์ฒ:์ธ์คํด์ค๋ณ์,์ธ์คํด์ค๋ฉ์๋,์ธ์คํด์ค๋ฉ์๋์๋งค๊ฐ๋ณ์
โ ์ด๋ฆ์ ์ ์ ์๋ ๊ฐ์ฒด๋ก ํ๋ฒ๋ง ์ฌ์ฉํ๊ณ ๋ฒ๋ ค์ง๋ ๊ฐ์ฒดโ
16-1. ์ต๋ช
(Anonymous) Class
์ฌ์ฉํ๋ ์ด์
โข ํด๋์ค์์ฑ
โข ์ธํฐํ์ด์ค์๊ตฌํ
๊ตฌํ ํ๋ ๋ฐฉ๋ฒ
01. ํด๋์ค์์ฑ
โข 1.์ถ์ํด๋์ค์์ฑ ์์ : AnonymousAbstract.java
์์ : https://github.com/hyomee/JAVA_EDU/tree/main/L/src/com/hyomee/anonymous
โข 2. ์ถ์ํด๋์ค ๊ตฌํ Class ์์ฑ
์์ : AnonymousAbstarctClass.java - ์ธ์คํด์ค ๋ณ์
์ต๋ช
(Anonymous) Class
โข ํด๋์ค๋ฅผ์ ์ํ์ง์๊ณ ํ์ํ ๋์ด๋ฆ์์ด์ฆ์์ ์ธํ๊ณ ์ธ์คํด์คํํด์์ฌ์ฉ
โข ๊ฐ์ฒด์์๋ง๋๋๋ก์ปฌํด๋์ค์๋์ผํ๋ค
โข new์์์ด์ฌ์์๋๊ณณ์ด๋๋ ์ง์ฌ์ฉ๊ฐ๋ฅํ๋์์ฑ์๋์ ์ํ ์์์
โข ์ต๋ช
ํด๋์ค๋ด๋ถ์์์ธ๋ถ์๋ฉ์๋๋ด๋ณ์๋ฅผ์ฐธ์กฐํ ๋๋๋ฉ์๋์์ง์ญ๋ณ์์ค
final๋ก์ ์ธ๋๋ณ์๋ง์ฐธ์กฐ๊ฐ๋ฅ
-๋ณ์๋Stack์์๊ณ ๊ฐ์ฒด๋Heap์์์,์ฆMethod์คํ์ด๋๋๊ณ Stack๋์ฌ๋ผ์ง์ง๋ง
Heap์์๋Method๋์ฌ๋ผ์ง์ง์๊ธฐ๋๋ฌธ
4. 1. ์ต๋ช
(Anonymous) Class
16. Lambda
16-1. ์ต๋ช
(Anonymous) Class
์์ : https://github.com/hyomee/JAVA_EDU/tree/main/L/src/com/hyomee/anonymous
โข 2.์ถ์ํด๋์ค ๊ตฌํ Class ์์ฑ
์์ : AnonymousAbstarctClass.java - ์ธ์คํด์ค Method
์์ : AnonymousAbstarctClass.java - ์ธ์คํด์ค ๋ฉ์๋์ ํ๋ผ๋ฉํฐ
โข 3. ์คํ
โข 2. ์ถ์ํด๋์ค ๊ตฌํ Class ์์ฑ
์์ : AnonymousMain.java
ํ๋ผ๋ฉํฐ๋ก ๊ฐ์ฒด ์์ฑ ํ์ฌ ํ๋ผ๋ฉํฐ๋ก ์ ๋ฌ
์์ : AnonymousChild .java ์ฐธ์กฐ
5. 1. ์ต๋ช
(Anonymous) Class
16. Lambda
16-1. ์ต๋ช
(Anonymous) Class
02. ์ธํฐํ์ด์ค์๊ตฌํ
โข 1. ์ธํฐํ์ด์ค๊ตฌํ
์์ : https://github.com/hyomee/JAVA_EDU/tree/main/L/src/com/hyomee/anonymous
์์ : AnonymousInterface.java
โข 2. ์ธํฐํ์ด์ค๊ตฌํ์ฒด
์์ : AnonymousInterfaceClass.java
โข 3. ์คํ
์ต๋ช
๊ฐ์ฒด ์์ฑ
๋๋ค ์์ฑ
6. 1. Lambda
16. Lambda
โข ์๋ฐ8์ด์ ์๋Method๋ผ๋ํจ์ํํ๊ฐ์กด์ฌํ์ง๋ง๊ฐ์ฒด๋ฅผํตํด์๋ง์ ๊ทผ์ด๊ฐ๋ฅํ๊ณ ,Method๊ทธ์์ฒด๋ฅผ๋ณ์๋ก์ฌ์ฉํ์ง๋๋ชปํ๋ค.
โข ์๋ฐ8์์๋ํจ์๋ฅผ๋ณ์์ฒ๋ผ์ฌ์ฉํ ์์๊ธฐ๋๋ฌธ์,ํ๋ผ๋ฏธํฐ๋ก๋ค๋ฅธ๋ฉ์๋์์ธ์๋ก์ ๋ฌํ ์์๊ณ ,๋ฆฌํด๊ฐ์ผ๋กํจ์๋ฅผ๋ฐ์์๋์๋ค.
โข ์ด๋ฆ์๋์ต๋ช
ํจ์๊ตฌํ์์์ฃผ๋ก์ฌ์ฉํ๋ฉฐํจ์ํ์ธํฐํ์ด์ค์์ธ์คํด์ค(๊ตฌํ๊ฐ์ฒด)๋ฅผํํ
:ํจ์ํ์ธํฐํ์ด์ค(์ถ์๋ฉ์๋๊ฐํ๋์ธ์ธํฐํ์ด์ค)๋ฅผ๊ตฌํ๊ฐ์ฒด๋ฅผ๋๋ค์์ผ๋กํํ
โ ์๋ฐ์์ ํจ์ํ ํ๋ก๊ทธ๋จ ๋ฐฉ์์ผ๋ก ๊ตฌํ ํด ์ฃผ๋ ๋ฌธ๋ฒโ
16-2. Lambda
๋๋ค ( Lambda )
JAVA์์ ํจ์ํ ํ๋ก๊ทธ๋จ
โข ํจ์
โข ํจ์์ ์ ->๊ตฌํ ->์ฌ์ฉ
void fun() {
โฆ
}
fun()
โข JAVA
โข ํจ์๋์์
โข Class, Interface ์Method
class C {
void method() {
โฆ..
}
}
C c = new C();
c.method();
โข JAVA Lambda
์ต๋ช
๋ฉค๋ฒ ๋ณ์๋ก ๊ตฌํ ๋ฐฉ๋ฒ ์ ์ฉ
โข ํ๋์์ถ์๋ฉ์๋๋ง์๋interface ์์ฑ-.>์ต๋ช
Class (๋ฉค๋ฒ๋ณ์)์์ฑ->Lambda๋ก๋ณ๊ฒฝ
Interface Example {
R apply(A arg);
}
01. ์ธํฐํ์ด์ค
Example exp = new Example() {
@Override
public R apply(A arg) {
body
}
};
02. ์ธ์คํด์ค์์ฑ
Example exp = (arg) {
body
};
03. ์ธ์๋ชฉ๋ก๊ณผํจ์๋ชธํต
์์ ์ธํ๊ณ ๋ชจ๋์ ๊ฑฐ
Example exp = (arg) - >{
body
} ;
04. ๋ฌธ๋ฒ์ ์ฉ
7. 1. Lambda
16. Lambda
โ ์๋ฐ์์ ํจ์ํ ํ๋ก๊ทธ๋จ ๋ฐฉ์์ผ๋ก ๊ตฌํ ํด ์ฃผ๋ ๋ฌธ๋ฒโ
16-2. Lambda
ํํ์
โข (arg1, arg2...) -> { body }
โข (params) -> expression
โข (params) -> statement
โข (params) -> { statements }
โข (int a, int b) -> { return a + b; };
> ํ์
์ถ๋ก ์ ์ํ ํ์
์ ๊ฑฐ
: (a, b) -> { return a+b } ;
> ๋ฌด์์ธ๊ฐ๋ฅผ ๋ฐํ ํ๊ฑฐ๋ ํ ์ค ํํ์์ด ๊ฐ๋ฅ ํ๋ฉด return ์ญ
์
: (a, b) -> a+b;
โข () -> System.out.println("Hello ");
> ํ๋ผ๋ฏธํฐ์๊ณ Hello ์ถ๋ ฅ System.out::println;
โข () -> System.out.println("Hello "); // ํ๋ผ๋ฏธํฐ ์๊ณ Hello ์ถ๋ ฅ
โข (String s) -> { System.out.println(s); } // String s์
๋ ฅ๋งค๊ฐ๋ณ์๋ก ๋ฐ์ ์ถ๋ ฅ
โข () -> 8514790 //ํ๋ผ๋ฏธํฐ์๊ณ 8514790๊ฐ ๋ฆฌํด
โข () -> { return 3.14 }; //ํ๋ผ๋ฏธํฐ์๊ณ 3.14๋ฆฌํด
8. 1. Lambda
16. Lambda
16-2. Lambda
์ถ์ ๋ฉ์๋๋ฅผ ์ด์ฉํ ๋๋ค
class C {
void method() {
โฆ..
}
}
C c = new C();
c.method();
interface ์ต๋ช
์ด๋ ํด๋์ค ํจ์ ์คํน
๋ฆฌํด : ์์
๋งค๊ฐ : ์์
interface IfNoRnNoArg {
void method();
}
IfNoRnNoArg iNrNa = new IfNoRnNoArg() {
void method () {
โฆ
}
};
IfNoRnNoArg iNrNa = ( ) - > { โฆ }; iNrNa.method();
๋ฆฌํด : ์์
๋งค๊ฐ : ์์
interface IfNoRnArg {
void method(int a);
}
IfNoRnArg iNra = new IfNoRnArg() {
void method( int a ) {
โฆ
}
};
IfNoRnArg iNra = (int a) -> {
โฆ
}
iNra.method(1);
๋ฆฌํด : ์์
๋งค๊ฐ : ์์
interface IfRnNoArg {
int method();
}
IfRnNoArg irNa = new IfRnNoArg () {
int method() {
int a = 0
โฆ
return a
}
};
IfRnNoArg irNa = () -> {
int a = 10;
return a;
};
irNa.method();
๋ฆฌํด : ์์
๋งค๊ฐ : ์์
interface IfRnArg {
int method(int a, int b);
}
IfRnArg ira = new IfRnNoArg () {
int method(int a, int b) {
return a + b;
}
};
IfRnArg ira = (a, b) -> {
return a + b;
};
ira.method(5, 10)
๋ฐฐ์ด
interface IfArray {
int [] method(int length)
}
IfRnArg ira = new IfArray () {
int method(int length) {
return new int[length];
}
};
IfRnArg ira = (length) -> {
return new int[length];
};
or
IfRnArg ira = int[] :: new;
int [] a1 = ira.
ira.method(10);
์์ : LambdaFunctional.java
10. 1. Lambda
16. Lambda
16-2. Lambda
์กด์ฌ ํ๋ ๊ฐ์ฒด ๋๋ค ํํ
์์ : ExistsClassLamda.java
01. ๊ฐ์ฒด์์ฑ
๋๋ค๋ก ๊ฐ์ฒด ์์ฑ ๋ฐฉ๋ฒ
๋๋ค ์ ์ธ ๋ฐฉ๋ฒ : ํด๋์ค๊ฐ์ฒด :: ์ธ์คํด์ค๋ฉ์๋๋ช
11. 1. Lambda
16. Lambda
16-2. Lambda
์กด์ฌ ํ๋ ๊ฐ์ฒด ๋๋ค ํํ
์์ : ExistsClassLamda.java
02. ๊ธฐ์กด ๊ฐ์ฒด์๋ฉ์๋์คํ
ํด๋์ค์ ๊ธฐ์กด ํจ์ ์ง์
๋๋ค ์ ์ธ ๋ฐฉ๋ฒ : ํด๋์ค๊ฐ์ฒด :: ์ธ์คํด์ค๋ฉ์๋๋ช
ํด๋์ค์ ๊ธฐ์กด ํจ์ ์ ํ
ํด๋์ค์ ๊ธฐ์กด ํจ์ ์ ํ
๋๋ค๋ก Class ์์ฑ
12. 1. Lambda
16. Lambda
16-2. Lambda
์กด์ฌ ํ๋ ๊ฐ์ฒด ๋๋ค ํํ
์์ : ExistsClassLamda.java
03. Static ๋ฉ์๋์คํ ๋๋ค ์ ์ธ ๋ฐฉ๋ฒ : ํด๋์ค๊ฐ์ฒด :: ์ ์ ๋ฉ์๋๋ช
04. ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉ ํจ
๊ฐ์ฒด๋ฅผ ๋ฉ์๋ ๋ด๋ถ๋ก ๋ณด๋์ผ๋ฏ๋ก ๋ฉ์๋ ๋ด๋ถ์์ ์์ฑ
ํ ํ์ ์์
13. 1. ํจ์ํ ์ธํฐํ์ด์ค
16. Lambda
16-3. ํจ์ํ ์ธํฐํ์ด์ค
ํจ์ํ ์ธํฐํ์ด์ค
โข ์ถ์Method๊ฐํ๋๋ฟ์ธ์ธํฐํ์ด์ค(Single Abstract Method:SAM)
โข ์ฌ๋ฌ๊ฐ์Default Method๊ฐ์์์์๋ค.
โข @FunctionalInterface ์ด๋
ธํ
์ด์
์ํจ์ํ์ธํฐํ์ด์ค์ด๋ค
โข Runnable, ActionListener, Comparable์ํจ์ํ์ธํฐํ์ด์ค
:์๋ฐ8์ด์ :์ต๋ช
ํด๋์ค์ด์ฉ
:์๋ฐ8์ดํ:๋๋ค์์ด์ฉ
java.util.function ์์ ์ ๊ณต ํ๋ ํจ์ํ ์ธํฐํ์ด์ค
โข Predicate: ํ๋์๋งค๊ฐ๋ณ์๋ฅผ์ฃผ๋booleanํ์ ๋ฐํ
โข Consumer:ํ๋์๋งค๊ฐ๋ณ์๋ฅผ์ฃผ๋voidํaccept ๋ฉ์๋
โข Function: T์ ํ์์ธ์๋ฅผ์ทจํ๊ณ R์ ํ์๊ฒฐ๊ณผ๋ฅผ๋ฐํํ๋์ถ์๋ฉ์๋apply
โข Supplier: ๋ฉ์๋์ธ์๋์๊ณ T์ ํ์๊ฒฐ๊ณผ๋ฅผ๋ฐํํ๋์ถ์๋ฉ์๋get
โข UnaryOperator:ํ๋์์ธ์์๋ฆฌํดํ์
์๊ฐ์ง๋ค. T->T
โข BinaryOperator:๋๊ฐ์์ธ์,๋์ผํํ์
์๊ฒฐ๊ณผ๋ฅผ๋ฐํํ๋์ถ์๋ฉ์๋apply
01. ๊ฐ์ฅ๊ธฐ๋ณธ์ด๋๋ํจ์ํ์ธํฐํ์ด์ค
02. ํ๋ผ๋ฉํฐ๊ฐ๋๊ฐ์ธํจ์ํ์ธํฐํ์ด์ค
03. ํ๋ผ๋ฉํฐ๋ฅผ๋ฐ๊ณ ๋์ผํํ์
์๋ฆฌํดํ๋ํจ์ํ์ธํฐํ์ด์ค
04. ๊ธฐ๋ณธํํ์
์ํจ์ํ์ธํผํ์ด์ค
16. 1. ํ์
์ถ๋ก
16. Lambda
16-3. ํ์
์ถ๋ก
ํ์
์ถ๋ก
โข ์๋ฐ์ปดํ์ผ๋ฌ๋๋๋คํํ์์ด์ฌ์ฉ๋์ปจํ
์คํธ(๋์ํ์)๋ฅผ์ด์ฉํด์๋๋คํํ์๊ณผ๊ด๋ จ๋ํจ์ํ์ธํฐํ์ด์ค๋ฅผ์ถ๋ก ํ๋ค.
โข ์ฆ,๋์ํ์์์ด์ฉํด์ํจ์๋์คํฌ๋ฆฝํฐ๋ฅผ์์์์ผ๋ฏ๋ก์ปดํ์ผ๋ฌ๋๋๋ค์์๊ทธ๋์ฒ๋์ถ๋ก ํ ์์๋ค.
โข ๊ฒฐ๊ณผ์ ์ผ๋ก์ปดํ์ผ๋ฌ๋๋๋คํํ์์ํ๋ผ๋ฏธํฐํ์์์ ๊ทผํ ์์์ผ๋ฏ๋ก๋๋ค๋ฌธ๋ฒ์์์ด๋ฅผ์๋ตํ ์์๋ค.
โข ์ฆ,์๋ฐ์ปดํ์ผ๋ฌ๋๋ค์์ฒ๋ผ๋๋คํ๋ผ๋ฏธํฐํ์์์ถ๋ก ํ ์์๋ค.
โข ์ฌ๋ฌํ๋ผ๋ฏธํฐ๋ฅผํฌํจํ๋๋๋คํํ์์์๋์ฝ๋๊ฐ๋
์ฑํฅ์์ด๋๋๋๋ฌ์ง๋ค.
interface IfRnArg {
int method(int a, int b);
}
IfRnArg ira = new IfRnNoArg () {
int method(int a, int b)
{
return a + b;
}
};
IfRnArg ira = (int a, int b) -> {
return a + b;
};
IfRnArg ira = (a, b) -> {
return a + b;
};