Java 8 2014/03/18 Released
언어의 형태가 바뀌었다.
순수객체지향 지향 -> Functional Programming.
병렬 지원 - 라이브러리, 언어 차원에서 지원
C# 4(2009)에서 지원, C++ 11(2011)에서 지원 (Visual studio 2010, gcc 4.6,4.8)
람다 표현식
- 실행할 함수구문의 블럭을 보낸다.
- 마지막 표현식이 리턴 값이 된다.
- 중괄호 사용 시 리턴을 표기해줘야 한다.
- 선언과 동시에 구현한다.
class Worker implements Runnable {
@Override
public void run() {
System.out.println("Hello Thread.");
}
}
class LengthComparator implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return Integer.compare(o1.length(), o2.length());
}
}
public class Ex1 {
public static void main(String[] args) {
// old 1
new Thread(new Worker()).start();
// old 2
new Thread(new Runnable() { // assistance 가 지원된다.
@Override
public void run() {
// blah blah
System.out.println("old_2");
}
}).run();
// new
new Thread(() -> System.out.println("Hello") // 실행할 함수 구문의 블럭을 보낸다.
// 인터페이스의 형태로 보낸다. functional interface
).start();
int oldCom = new LengthComparator().compare("f", "s");
Comparator<String> lengthComparator = (String first, String second) -> Integer
.compare(first.length(), second.length()); // 마지막 표현식이 리턴 값이 된다.
Comparator<String> lenCom = (first, second) -> {
return Integer.compare(first.length(), second.length()); //중괄호 사용시 리턴을 줘야한다.
};
System.out.println(oldCom);
lengthComparator.compare("com", "com");
lenCom.compare("com", "com2");
Button button = new Button();
button.setButtonListener(()->System.out.println("click")); // 선언하며 구현한다.
button.setButtonListener(new IButtonListener() {
@Override
public void onClick() {
System.out.println("old_click");
}
});
// 옵저버 패턴의 구현 형식이 바뀌게 된다.
button.click();
}
}
interface IButtonListener {
void onClick();
}
class Button {
IButtonListener listener;
void setButtonListener (IButtonListener listener) {
this.listener = listener;
}
void click() {
if(listener != null) {
listener.onClick();
}
}
}
class Dialog implements IButtonListener {
@Override
public void onClick() {
System.out.println("click");
}
}