๋ชฉ์ฐจ
์ฐ์ฐจ๋ ์์ด๋๋ฐ ๊ณต๋ถ๋ ๋์ด ์๊ณ ์์ง ๋ชจ๋ฅด๋๊ฒ ๋๋ฌด ๋ง๋ค.

๊ทธ๋์ ๋ ธ์ ํด์ ์ฝ๋ฉ์ ๋ชปํ๊ธฐ ์ ๊น์ง๋ ๊พธ์คํ ๋ถ์กฑํ ๋ถ๋ถ์ ๊ณต๋ถํด์ ๋ฉ๊ฟ ์๊ฐ์ด๋ค.
Java Lambda ์ ๋ฆฌ(java 1.8 ์ด์๋ถํฐ ๊ฐ๋ฅ)
Java์ Lambda์ ๋ํด์ ๊ณต๋ถํ ๋ค ์ด๋ฅผ ๊ธฐ๋กํด ๋ณด๊ฒ ๋ค.๐
java์ ๋๋ค์์ ์ต๋ช ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํ ํํ์์(์์ ๋ฅผ ๋ณด๋ฉด์ ์ดํดํ๋๊ฒ ์ญ์ ๋น ๋ฅด๋ค.)
๋๋คํจ์๋?๐
๋๋คํจ์์ ๊ฐ๋ ์ ๋๋ฌด์ํค๋ฅผ ๋ณด๋ฉด ์๋์ฒ๋ผ ๋์์๋ค.
๋๋ค์, ๋๋ ๋๋ค ํจ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๋ ๊ฐ๋ ์ผ๋ก ์ต๋ช ํจ์(๏งซๅๅฝๆธ, Anonymous functions)๋ฅผ ์ง์นญํ๋ ์ฉ์ด์ด๋ค.
์ต๋ช ํจ์๋ ๋ง ๊ทธ๋๋ก ์ด๋ฆ์ด ์๋ ํจ์์ด๋ค.
์ต๋ช ํจ์๋ค์ ๊ณตํต์ผ๋ก ์ผ๊ธ๊ฐ์ฒด(First Class citizen)๋ผ๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค.
์ด๋ ๋ค๋ฅธ ๊ฐ์ฒด๋ค์ ์ผ๋ฐ์ ์ผ๋ก ์ ์ฉ ๊ฐ๋ฅํ ์ฐ์ฐ์ ๋ชจ๋ ์ง์ํ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฆฌํค๊ณ ๋ณดํต ํจ์์ ์ธ์๋ก ๋๊ธฐ๊ธฐ, ์์ ํ๊ธฐ, ๋ณ์์ ๋์ ํ๊ธฐ์ ๊ฐ์ ์ฐ์ฐ์ ์ง์ํ ๋ ์ผ๊ธ ๊ฐ์ฒด๋ผ๊ณ ํ๋ค๊ณ ์ํค๋ฐฑ๊ณผ์ ๋์์๋ค.
ํจ์๋ฅผ ๋ง๋ค์ง ์๊ณ ํจ์์ฒ๋ผ ์ฌ์ฉํ๋ ๊ฒ(ํจ์๋ฅผ ํ๋์ ์์ผ๋ก ํํ)
๋๋ค์ ์ฅ๋จ์ ๐ค
๋๋ค์ ์ฅ์
1. ์ฝ๋์ ๊ฐ๊ฒฐ์ฑ : ๋๋ค ์ฌ์ฉ ์ ๋ถ ํ์ํ ๋ฐ๋ณต๋ฌธ์ ์ค์ด๊ณ ๋ณต์กํ ์์ ๋จ์ํ๊ฒ ํํ ๊ฐ๋ฅ
2. ์ง์ฐ์ฐ์ฐ ์ํ : ๋๋ค๋ ์ง์ฐ์ฐ์์ ์ํ ํจ์ผ๋ก์จ ๋ถํ์ํ ์ฐ์ฐ ์ต์ํ ๊ฐ๋ฅ
์ง์ฐ์ฐ์ฐ์ด๋ ๋ง ๊ทธ๋๋ก ๋ถํ์ํ ์ฐ์ฐ์ ํผํ๋ ค๊ณ ์ฐ์ฐ์ ์ง์ฐ์ํด์ ์๋ฏธํ๋ค.
3. ๋ณ๋ ฌ์ฒ๋ฆฌ ๊ฐ๋ฅ : ๋ฉํฐ์ฐ๋ ๋๋ฅผ ํ์ฉํ์ฌ ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์
๋ณ๋ ฌ์ฒ๋ฆฌ๋ ์ฌ์ด ์๋ก ํ๋์ ์ผ(ํ๋ก๊ทธ๋จ)์ ์ฌ๋ฌ ๋ช (ํ๋ก์ธ์)์ด์ ๋๋ ์ ํจ์ผ๋ก ์ฒ๋ฆฌ ์๋๋ฅผ ์ฌ๋ฆฌ๋ ๊ฑธ ์๋ฏธํ๋ค.
์ฐ๋ฆฌ๋๋ผ ์๋ด์ผ๋ก ๋ฐ์ง๋ฉด "๋ฐฑ์ง์ฅ๋ ๋ง๋ค๋ฉด ๋ซ๋ค"
๋๋ค์ ๋จ์
1. ๋๋ค์์ ํธ์ถ์ด ๊น๋ค๋กญ๋ค.(๋ฌธ๋ฒ์ ๋ชจ๋ฅด๋ฉด ๊ทธ๋ด ์ ์์ ๋ฏ)
2. ๋๋ค stream ์ฌ์ฉ ์ ๋จ์ ๋ฐ๋ณต๋ฌธ(for, while) ์ฌ์ฉ ์ ์ฑ๋ฅ์ด ๋จ์ด์ง
3. ๋ถํ์ํ๊ฒ ๋จ์ฉ ์ ์คํ๋ ค ๊ฐ๋ ์ฑ์ ๋จ์ด ๋จ๋ฆด ์ ์์
4. ๋๋ค๋ก ๋ง๋ ํจ์๋ ์ฌ์ฌ์ฉ ๋ถ๊ฐ
5. ๋๋ฒ๊น ์ด ๊น๋ค๋ก์
์ญ์ ์ด๋ก ๋ณด๋ค๋ ์ฝ๋๋ฅผ ๋ณด๋๊ฒ ๋ ๋ ์ดํด๊ฐ ๋น ๋ฅผ ๊ฒ ๊ฐ๋ค.
๋๋ค์ ์ฝ๋๐
๋๋ค์ ์ด์ java ๋ฌธ๋ฒ
์ธํฐํ์ด์ค๋ฅผ ์ด์ฉํด ๋คํ์ฑ์ ์ ๊ณตํ๊ธฐ ์ํด์ ์ธํฐํ์ด์ค(Goods)๋ฅผ ๋ง๋ค๊ณ ๊ทธ๊ฒ์ ๊ตฌํํ ๊ตฌํ์ฒด ํด๋์ค(Computer)๋ฅผ ๋ง๋ ๋ค ์ฌ์ฉ ์ ์ธํฐํ์ด์ค ํ์ ์ ์ฐธ์กฐ๋ณ์(com)์ ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ์ฌ์ฉํ๊ฑฐ๋ ์๋์ฒ๋ผ ์คํํ๋ ์ชฝ์์ ์ต๋ช ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด ์ฌ์ฉํ์์
์ผํ์ฉ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ ๋ง์ผ Goods ๊ตฌํ์ฒด๊ฐ ์์ฃผ ์ฌ์ฉ๋์ด์ผ ๋๋ ๊ฒฝ์ฐ๋ ์์ฒ๋ผ
์ต๋ช ๊ฐ์ฒด๋ฅผ ๊ณ์ ์ฌ์ฉ ์ ์ฝ๋๊ฐ ๋งค์ฐ ์ง์ ๋ถํด์ง ๊ฒ์
๋๋ค์
๊ตฌํ์ฒด์ ์ถ๋ ฅ๋ฌธ์ ์ฃผ์์ฒ๋ฆฌํ๊ณ ๋ฉ์ธ ๋ฉ์๋์์ ๋๋ค์์ผ๋ก ๋ฐ๋ก ์ถ๋ ฅ๋ฌธ์ ์ ์ํ์
ํต์ฌ์ ๋งค๊ฐ๋ณ์ + ์คํ๋ฌธ์ผ๋ก ๊ตฌ์ฑ๋จ(์ ๊ทผ์, ๋ฐํํ ๋ชจ๋ ์๋ต๋๋ ๊ตฌ์กฐ์)
() -> {} ํํ์ด๊ณ ์ฒซ ๊ดํธ()์ ํด๋น ์ธํฐํ์ด์ค ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ ์ ๋ ฅํ๋ฉด ๋จ
๊ทธ ๋ค์ ->๋ฅผ ์ ๋ ฅ ํ ์ค๊ดํธ{} ์์ ์ํํ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋จ
Ob ob = new Ob(); ์ธ์คํด์คํ ํ ํ์ ์์
ํจ์๋ฅผ ๋ฐ๋ก ๋ง๋ค์ง ์๊ณ (๋งค๊ฐ๋ณ์)๋ฅผ ์ด์ฉํด์ -> {์ํ์ฝ๋} ์ด๊ฑธ ๋ฐ๋ก ์คํํ๋ค๊ณ ์ดํดํ๋ฉด ๋ ๋ฏ
๋๋ค์ ์์ ๐คก
1. ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ( (ํ์ ๋งค๊ฐ๋ณ์)-> {}; )
๋๋ค์์ ํ์ํ ๊ธฐํธ๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ๊ฒฝ์ฐ
2. ๋งค๊ฐ๋ณ์ ํ์ ์๋ต( (๋งค๊ฐ๋ณ์)-> {}; )
๋งค๊ฐ๋ณ์๊ฐ 1๊ฐ ์ด๊ฑฐ๋ 2๊ฐ ์ด์์ ๋งค๊ฐ๋ณ์ ํ์ ์ด ๋ชจ๋ ๊ฐ์ ๊ฒฝ์ฐ ํ์ ์๋ต ๊ฐ๋ฅ
๋งค๊ฐ๋ณ์ ํ์ ๊ฐ์ ๊ฒฝ์ฐ
๋งค๊ฐ๋ณ์๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ
3. ๋งค๊ฐ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ( ()-> {}; )
๋งค๊ฐ๋ณ์๊ฐ ์๋ ๊ฒฝ์ฐ ์๋์ฒ๋ผ ์ฝ๋ ๋ชธํต๋ง ๊ตฌํํ๋ฉด ๋๋๋ฐ ๋ง์ผ return type์ด ์๋ ๊ฒฝ์ฐ return ํด์ค์ผ ํ๋ค.
4. ์ค๊ดํธ ์๋ต( ()->; )
์ํํ ์ฝ๋๊ฐ 1๊ฐ์ผ ๋๋ ์ค๊ดํธ{}๋ฅผ ์๋ตํ ์ ์์, ์ด ๋ ์ค์ํ ์ ์ return์ด ํ์ํ ๋ฉ์๋์ธ ๊ฒฝ์ฐ return ํค์๋๋ฅผ ์๋ตํด์ผ ํจ
์์ ์ ์ฌ์ฉ๋ ์ธํฐํ์ด์ค๋ return type์ด int์ด๊ธฐ์ return์ ์๋ตํด์ผ ํ๋ค.
return ๋ถ์ผ ๊ฒฝ์ฐ ์๋์ฒ๋ผ ์๋ฌ ๋ฐ์
5. ์๊ดํธ ์ค๊ดํธ ์๋ต( ๋งค๊ฐ๋ณ์ -> ; )
๋งค๊ฐ๋ณ์๊ฐ 1๊ฐ์ด๊ณ ์ํํ ์ฝ๋๋ 1๊ฐ์ด๋ฉด ์๋์ฒ๋ผ ()์ {} ์๋ต ๊ฐ๋ฅ(๋ฉ์๋ return type์ด void์ฌ์ผ ํจ)
ํ์ง๋ง ์ธํฐํ์ด์ค ์ถ์ ๋ฉ์๋์ return type์ด ์๋ ๊ฒฝ์ฐ๋ {} ์๋ต ๋ถ๊ฐ
์ ์ํ์์ ์ถ์ ๋ฉ์๋์ return type์ int๋ก ๋ณ๊ฒฝํ๋ฉด ์๋์ฒ๋ผ ์๋ฌ๋ฐ์
String ํ์ ๋๋ค์
์ฌ์ฉ ์์ ์ฝ๋
ํจ์ํ ์ธํฐํ์ด์ค
@FunctionalInterface
public interface Caculator {
// return type void๋ก ๋ฐ๊ฟจ๋ค int๋ก ๋ฐ๊ฟจ๋ค, ๋งค๊ฐ๋ณ์ ์ถ๊ฐ ํ๋ฉด์ ํ
์คํธ
public int cal(int num1);
}
๋๋ค์ ์ฝ๋
public class Test2 {
public static void main(String[] args) {
// ๋๋ค์ ๋ชจ๋ ๊ธฐํธ ์ฌ์ฉ
//Caculator cal = (int n1, int n2) -> {return n1 + n2;};
//System.out.println(cal.cal(1000, 20000));
// ํ์
์๋ต(๋งค๊ฐ๋ณ์ 2๊ฐ ํ์
์ด ๊ฐ์)
//Caculator cal2 = (n1, n2) -> {return n1+n2;};
//System.out.println(cal2.cal(10, 200));
// ๋งค๊ฐ๋ณ์ ์๋ต
//Caculator cal3 = () -> System.out.println("๋งค๊ฐ๋ณ์ ์์");
//cal3.cal();
// ์ค๊ดํธ ์๋ต(์ํ์ฝ๋ 1๊ฐ)
//Caculator cal = (n1) -> n1 + 1000;
//System.out.println(cal.cal(1000000));
// ์๊ดํธ, ์ค๊ดํธ ์๋ต(๋งค๊ฐ๋ณ์ 1๊ฐ, ์ํ์ฝ๋ 1๊ฐ)
//Caculator cal = n1 -> System.out.println(n1);
//cal.cal(10000);
//Caculator cal = n1 -> n1 + 10000;
//cal.cal(10000);
}
}
๋๋ค ์ฌ์ฉ ์กฐ๊ฑด๐ค
๋๋ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์๋ ์กฐ๊ฑด์ด ์์, ๋ฐ๋ก ์ธํฐํ์ด์ค์ ์ถ์ ๋ฉ์๋๊ฐ 1๊ฐ์ธ ๊ฒฝ์ฐ์ด์ผ ํจ
๋๋ค์์ ์ต๋ช ํจ์์ด๊ธฐ ๋๋ฌธ์ ๋ฉ์๋๊ฐ ์ฌ๋ฌ๊ฐ์ธ ๊ฒฝ์ฐ ์ด๋ค ๋ฉ์๋๋ฅผ ์ต๋ช ํจ์๋ก ๊ตฌํํ ๊ฑด์ง ์ ์ ์๋ค.
์ด๋ฅผ ์ํ ์ฌ๋ฌ๊ฐ์ง ๊ท์น์ด ์์ง๋ง ์ ์ผ ๋ช ํํ ๊ฒ์ @FunctionalInterface์ ๋ถ์ฌ์ฃผ๋ ๊ฒ์ด๋ค.
์๋์ฒ๋ผ ๋๋ค์ ํํ์ ์ฌ์ฉ๋ ์ธํฐํ์ด์ค์ @FunctionalInterface์ ๋ถ์ด๋ฉด ์๋ฐ ์ปดํ์ผ๋ฌ๊ฐ ์์์ ์๋ฌ๋ฅผ ์ก์์ค
ํจ์ํ ์ธํฐํ์ด์ค์ ์๋์ฒ๋ผ ์ถ์ ๋ฉ์๋๋ฅผ 1๊ฐ ๋ ๋ง๋ค ๊ฒฝ์ฐ ์๋ฌ ๋ฐ์ ์ํด
๋๋ค์ ์ฌ์ฉ ์ธํฐํ์ด์ค์ @FunctionalInterface์ ๋ถ์ด๋ ์ต๊ด์ ๊ธฐ๋ฅผ ๊ฒ
์ฐธ์กฐ : ํ์ง์ฐ์ ์๋ฒ์ฌ์ด๋ ๊ธฐ๋ถ ๋ธ๋ก๊ทธ, 2018.09.28, https://khj93.tistory.com/entry/JAVA-%EB%9E%8C%EB%8B%A4%EC%8B%9DRambda%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EA%B3%A0-%EC%82%AC%EC%9A%A9%EB%B2%95
[JAVA] ๋๋ค์(Lambda)์ ๊ฐ๋ ๋ฐ ์ฌ์ฉ๋ฒ
๋๋คํจ์๋? ๋๋ค ํจ์๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ์ฌ์ฉ๋๋ ๊ฐ๋ ์ผ๋ก ์ต๋ช ํจ์(Anonymous functions)๋ฅผ ์ง์นญํ๋ ์ฉ์ด์ ๋๋ค. ํ์ฌ ์ฌ์ฉ๋๊ณ ์๋ ๋๋ค์ ๊ทผ๊ฐ์ ์ํ๊ณผ ๊ธฐ์ด ์ปดํจํฐ๊ณผํ ๋ถ์ผ์์์
khj93.tistory.com
๋ฐฐ์์ด ์ฆ๊ฑฐ์ด ๊ฐ๋ฐ์, 2019,04,09, https://galid1.tistory.com/509
Java - Lambda Expression(๋๋ค์)์ด๋?
๋๋ค์์ด๋ ๋๋ค์ ์ด๋ ๋ฌด์์ผ๊น์. ๊ทธ ๋์ java๋ฅผ ์ด์ฉํ๋ค๊ฐ lambda์ ์ด๋ ๊ฒ์ ์ฒ์ ๋ณด์์๋๋ ๋งค์ฐ ์์ํ๊ณ ๊ฑฐ๋ถ๊ฐ์ด ๋๊ปด์ก์ต๋๋ค. ํ์ง๋ง, java8์์ ์ถ๊ฐ๋ stream๊ณผ ๊ฐ์๊ณณ์์ ํ๋๋ฒ
galid1.tistory.com
ํ๋ฆฐ ์ ์์ ๊ฒฝ์ฐ ๋๊ธ ๋ถํ ๋๋ฆฝ๋๋ค.๐

'IT > development' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[php] php <-> cubrid driver ์ฐ๋ (0) | 2022.11.23 |
---|---|
[Java] Java Stream ์ฌ์ฉ๋ฒ ์ ๋ฆฌ(jdk 1.8 ๋ถํฐ ์ฌ์ฉ ๊ฐ๋ฅ) (0) | 2022.11.23 |
[IDE] eclipse tomcat "Serve modules without publishing"... (0) | 2022.11.23 |
[php] Windows 10 Laravel ์ค์น... (0) | 2022.11.23 |
[apache/php] apache/php ๋ก์ปฌํ๊ฒฝ ์ธํ (apm, xampp ๋ฏธ์ฌ์ฉ) (0) | 2022.11.23 |
๋๊ธ