Java 8 2014/03/18 Released

 언어의 형태가 바뀌었다.

 순수객체지향 지향 -> Functional Programming. 

 병렬 지원 - 라이브러리, 언어 차원에서 지원

 C# 4(2009)에서 지원, C++ 11(2011)에서 지원 (Visual studio 2010, gcc 4.6,4.8)


람다 표현식

 - 실행할 함수구문의 블럭을 보낸다.

 - 마지막 표현식이 리턴 값이 된다.

 - 중괄호 사용 시 리턴을 표기해줘야 한다.

 - 선언과 동시에 구현한다. 


  1. class Worker implements Runnable {
  2.  
  3.         @Override
  4.         public void run() {
  5.                 System.out.println("Hello Thread.");
  6.         }
  7.  
  8. }
  9.  
  10. class LengthComparator implements Comparator<String> {
  11.  
  12.         @Override
  13.         public int compare(String o1, String o2) {
  14.                 return Integer.compare(o1.length(), o2.length());
  15.         }
  16.  
  17. }
  18.  
  19. public class Ex1 {
  20.  
  21.         public static void main(String[] args) {
  22.                 // old 1
  23.                 new Thread(new Worker()).start();
  24.                 // old 2
  25.                 new Thread(new Runnable() { // assistance 가 지원된다.
  26.  
  27.                                         @Override
  28.                                         public void run() {
  29.                                                 // blah blah
  30.                                                 System.out.println("old_2");
  31.                                         }
  32.                                 }).run();
  33.  
  34.                 // new
  35.                 new Thread(() -> System.out.println("Hello") // 실행할 함수 구문의 블럭을 보낸다.
  36.                 // 인터페이스의 형태로 보낸다. functional interface
  37.                 ).start();
  38.                
  39.                 int oldCom = new LengthComparator().compare("f""s");
  40.                 Comparator<String> lengthComparator = (String first, String second) -> Integer
  41.                                 .compare(first.length(), second.length()); // 마지막 표현식이 리턴 값이 된다.
  42.                 Comparator<String> lenCom = (first, second) -> {
  43.                         return Integer.compare(first.length(), second.length()); //중괄호 사용시 리턴을 줘야한다.
  44.                 };
  45.                 System.out.println(oldCom);
  46.                 lengthComparator.compare("com""com");
  47.                 lenCom.compare("com""com2");
  48.                
  49.                 Button button = new Button();
  50.                 button.setButtonListener(()->System.out.println("click")); // 선언하며 구현한다.
  51.                 button.setButtonListener(new IButtonListener() {
  52.                        
  53.                         @Override
  54.                         public void onClick() {
  55.                                 System.out.println("old_click");
  56.                         }
  57.                 });
  58.                 // 옵저버 패턴의 구현 형식이 바뀌게 된다.
  59.                 button.click();
  60.         }
  61. }
  62. interface IButtonListener {
  63.         void onClick();
  64. }
  65. class Button {
  66.         IButtonListener listener;
  67.         void setButtonListener (IButtonListener listener) {
  68.                 this.listener = listener;
  69.         }
  70.         void click() {
  71.                 if(listener != null) {
  72.                         listener.onClick();
  73.                 }
  74.         }
  75. }
  76.  
  77. class Dialog implements IButtonListener {
  78.  
  79.         @Override
  80.         public void onClick() {
  81.                 System.out.println("click");
  82.         }
  83.        
  84. }


+ Recent posts