๋๋ค ํํ์(Lambda Expressionโ)
Java 8์ ๋๋ค ํํ์์ด ๋์ ๋๋ฉด์ ํจ์ํ ์ธ์ด ๋น์ทํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ด ๊ฐ๋ฅํด ์ก๋ค. ๋๋ค ํํ์์ ์ด๋ฆ์ด ์๋ ์ต๋ช ํจ์๋ฅผ ์๋ฏธํ๋ค. ์ฐ๋ฆฌ๊ฐ ๋๋ค์ ๊ด์ฌ์ ๋ฌ์ผ ํ๋ ๋ช ๊ฐ์ง ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- OOP ์ธ์ด์ธ Java์์ ํจ์ํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๊ฒ ํด ์ค๋ค.
- ๋๋ค ํํ์์ ์ด์ฉํจ์ผ๋ก์จ ๊ฐ๊ฒฐํ๊ณ ๋ช ํํ ์ฝ๋๋ก ๊ทธ ์๋๋ฅผ ํํํ ์ ์๋ค.
- Collection filtering, Iteration , Extraction ๋ฑ์์ ๋๋ผ์ด ์ฝ๋ ์์ฐ์ฑ์ ๋ณด์ธ๋ค.
๋๋ค๋ ๋ค์๊ณผ ๊ฐ์ ํน์ง์ ๊ฐ์ง๋ค.
- ์ต๋ช : ๋ณดํต์ ๋ฉ์๋์ ๋ฌ๋ฆฌ ์ด๋ฆ์ด ์์ผ๋ฏ๋ก ์ต๋ช ์ด๋ผ ํํํ๋ฉฐ, ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํจ์ผ๋ก ์ธํ์ฌ ๊ตฌํํด์ผ ํ ์ฝ๋์ ๋ํ ๊ฑฑ์ ๊ฑฐ๋ฆฌ๊ฐ ์ค์ด๋ ๋ค.
- ํจ์ : ๋๋ค๋ ๋ฉ์๋์ฒ๋ผ ํน์ ํด๋์ค์ ์ข ์๋์ง ์์ผ๋ฏ๋ก ํจ์๋ผ๊ณ ๋ถ๋ฅธ๋ค. ํ์ง๋ง ๋ฉ์๋์ฒ๋ผ ํ๋ผ๋ฏธํฐ ๋ฆฌ์คํธ, ๋ฐ๋, ๋ฐํ ํ์, ๊ฐ๋ฅํ ์์ธ ๋ฆฌ์คํธ๋ฅผ ํฌํจํ๋ค.
- ์ ๋ฌ : ๋๋ค ํํ์์ ๋ฉ์๋ ์ธ์๋ก ์ ๋ฌํ๊ฑฐ๋ ๋ณ์๋ก ์ ์ฅํ ์ ์๋ค.
- ๊ฐ๊ฒฐ์ฑ : ์ต๋ช ํด๋์ค์์์ ๊ฐ์ ์์ง๊ตฌ๋ ํ ์ฝ๋๋ฅผ ๊ตฌํํ ํ์๊ฐ ์๋ค.
๋๋ค๋ ๋ฌด๋ช ์ ๋ฉ์๋(Anonymous Method)๋ฅผ ๋งํ๋ค๊ณ ํ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๋ฐ์์์ ๋๋ค๋ ๊ตฌํํด์ผ ํ๋ ๋ฉ์๋๊ฐ ํ๋์ธ ํจ์ํ ์ธํฐํ์ด์ค(Functional Interface)๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ์ ๋๋ค๋ฅผ ํตํด ๋ชธ์ฒด๋ฅผ ๋ค ๊ธฐ์ ํ์ง ์๊ณ , ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค.
์ด๋ฌํ ๊น๋ญ์ผ๋ก Interface๋ฅผ ์ด์ฉํ์ฌ ๋๋ค ํจ์๋ฅผ ๋ง๋ฆ์ผ๋ก์จ Interface์ ํจ์๊ฐ ๋จ 1๊ฐ๋ง ์์ด์ผ ๋๋ค์์ ์ฌ์ฉํ ์ ์๋ค๋ ์ ์ฝ์ด ์๋ค. ์ฌ์ค ์๋ฐ์์ Interface๋ฅผ ์ด์ฉํ์ฌ ๋๋ค๋ฅผ ํํํ๋ค๊ณ ํจ์ ๋ด๋ถ์ ์ผ๋ก Proxy ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๊ทธ ์์ ๋๋ค ํํ์ ๋ฉ์๋๋ก ๋ง๋ ๋ค.
๊ธฐ๋ณธ์ ์ธ ๋๋ค ํํ์์ ๋ํ ๋ฌธ๋ฒ์ ํ์ธํด ๋ณด์.
(argument ,,,) -> (body)
: 0๊ฐ ์ด์์ ์ธ์๋ฅผ ์คํํ๊ณ ์ ํ๋ ํจ์ body๋ก ์ ๋ฌํ๋ค๋ ์๋ฏธ์ด๋ฉฐ, ์ด๋ ๋๋ค ํํ์์ ์ผ๋ฐ์ ์ธ ๊ตฌ๋ฌธ์ด๋ค.
๋๋ค๋ ํฌ๊ฒ ์ธ ๋ถ๋ถ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ
- ํ๋ผ๋ฏธํฐ ๋ฆฌ์คํธ : xxx๋ฉ์๋์ ํ๋ผ๋ฏธํฐ() : (int a1, int a2)
- ํ์ดํ : ํ์ดํ ( -> )๋ ๋๋ค์ ํ๋ผ๋ฏธํฐ ๋ฆฌ์คํธ์ ๋ฐ๋๋ฅผ ๊ตฌ๋ถํ๋ค
- ๋๋ค์ ๋ฐ๋ : ๋๋ค์ ๋ฐํ ๊ฐ์ ํด๋นํ๋ ํํ์์ด๋ค.
๊ฐ๋จํ ์๋ฅผ ์์ฑํด ๋ณด๋๋ก ํ๊ฒ ๋ค.
๋จผ์ ์ธ์๊ฐ ์๋ ๋ฉ์๋๋ฅผ ๊ฐ๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด ๋๋ค.
MyInter.java
public interface MyInter {
void abc();
}
์ด๋ฒ์๋ ์ธ์๊ฐ ์๋ ๋ฉ์๋๋ฅผ ๊ฐ๋ ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด ๋๋ค.
MyInterArg.java
public interface MyInterArg {
void def(int a, int b);
}
๋ค์์ผ๋ก ํ๋ก๊ทธ๋จ ์คํ์ ์ํ ํด๋์ค๋ฅผ ์์ฑํ๋ฉด ๋๊ฒ ๋ค.
Main.java
public class Main {
public static void main(String[] args) {
//1. ์ธ์๊ฐ ์๋ ์ถ์ ๋ฉ์๋ ์ฒ๋ฆฌ
MyInter inter = new MyInter() {
@Override
public void abc() {
System.out.println("์ผ๋ฐ์ ์ธ ์ต๋ช
ํด๋์ค์ ๋ฉ์๋ ์ค๋ฒ๋ผ์ด๋ฉ");
}
};
inter.abc(); //๋ฌด๋ช ํด๋์ค์ ๋ฉ์๋ ํธ์ถ
//๋๋ค์์ผ๋ก ํํ
MyInter inter2 = ()->System.out.println("๋๋ค์์ผ๋ก ํํ");
inter2.abc(); //๋๋ค๋ก ํํ๋ ๋ฉ์๋ ํธ์ถ
System.out.println();
//2. ์ธ์๊ฐ ์๋ ์ถ์ ๋ฉ์๋ ์ฒ๋ฆฌ
MyInterArg interArg = new MyInterArg() {
@Override
public void def(int a, int b) {
System.out.println("๋ ์์ ํฉ์ " + (a + b));
}
};
interArg.def(3, 4); //์ธ์๊ฐ ์๋ ๋ฌด๋ช ํด๋์ค์ ๋ฉ์๋ ํธ์ถ
//๋๋ค์์ผ๋ก ํํ
MyInterArg interArg2 = (a, b)->System.out.println("๋๋ค์์ผ๋ก ํํ:" + (a + b));
interArg2.def(3, 4); //์ธ์๊ฐ ์๋ ๋๋ค๋ก ํํ๋ ๋ฉ์๋ ํธ์ถ
}
}
์ด๋ฒคํธ ํธ๋ค๋ฌ ๋ฉ์๋์์ ์ฌ์ฉ๋๋ ๋๋ค ํํ์
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ButtonProcess extends JFrame{
public ButtonProcess(){
super("lambda test");
setBounds(100, 100, 300, 300);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(null);
Button btn = new Button("button1");
btn.setBounds(10, 50, 100, 50);
add(btn);
btn.addActionListener(new ActionListener() { //์ ํต์ ๋ฐฉ๋ฒ
@Override
public void actionPerformed(ActionEvent e) {
setTitle("์ฒซ๋ฒ์งธ ๋ฒํผ");
}
});
Button btn2 = new Button("button2");
btn2.setBounds(10, 150, 100, 50);
add(btn2);
btn2.addActionListener(e -> setTitle("2๋ฒ์งธ ๋ฒํผ")); //๋๋ค ๋ฐฉ๋ฒ
}
public static void main(String[] args) {
new ButtonProcess();
}
}
*** ๋ค์ํ ๋๋ค ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ***
- ๋ถ๋ฆฐ ํํ์ : (List<String> list) ->list.isEmpty()
- ๊ฐ์ฒด ์์ฑ : () -> new Apple(10)
- ๊ฐ์ฒด์์ ์๋น : (Apple a) -> { System.out.println(a.getWeight()); }
- ๊ฐ์ฒด์์ ์ ํ/์ถ์ถ : (String s) ->s.length()
- ๋ ๊ฐ์ ์กฐํฉ : (int a, int b) -> a * b
- ๋ ๊ฐ์ฒด ๋น๊ต : (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight())
* ๋ฉ์๋ ๋ ํผ๋ฐ์ค๋ ๋๋ค์ ์ถ์ฝํ์ด๋ค.
๋๋ค์ ๋ฉ์๋ ๋ ํผ๋ฐ์ค ๋จ์ถ ํํ ์์
- (Apple a) ->a.getWeight() = > Apple::getWeight()
- () ->Thread.currentThread().dumpStack() => Thread.currentThread()::dumpStack
- (str, i) ->str.substring(i) => String::substring
- (String s) ->System.out.println(s) => System.out::println
์ถ์ฒ: ์ปด์ธ์๊ณผ ์ ํต http://cafe.daum.net/flowlife/HqLo/72
'๐ป ํ๋ก๊ทธ๋๋ฐ > JAVA' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2-4 ๋ ผ๋ฆฌ์ฐ์ฐ์ (0) | 2016.06.26 |
---|---|
2-3 ๊ด๊ณ ์ฐ์ฐ์, ๋ ผ๋ฆฌ ์ฐ์ฐ์, ๊ธฐํ (0) | 2016.06.26 |
2-2 ์ฐ์ ์ฐ์ฐ, ์นํ์ฐ์ฐ, ๋์ , ์ฆ๊ฐ, ๋ถํธ (0) | 2016.06.22 |
2-10 Scanner ์ฌ์ฉ๋ฒ๊ณผ ๋ฐ๋ณต For (0) | 2016.06.22 |
2-1 JAVA๊ฐ ๊ฐ์ง๋ ์ฌ๋ฌ ํ๊ณผ Cast์ Promotion (0) | 2016.06.22 |