Java8 기초 설명
JAVA/Java 8

Java8 기초 설명

반응형

Java8과 Java7은 많은 부분이 바뀌어서 이제

Java8을 모르는 사람은 다른사람들과 협업하기 어려워 질 수도 있다.
작년에 공부하였던 부분을 다시 복습 할겸 포스팅을 진행한다.

Java8이 도입되면서 많이 변경된 부분이 함수형 프로그램이 가능하도록 되었다는 것이다.
그것의 중심에는 람다식 표현식이 있다.

람다 표현식(lambda expression)
 람다식 이란? 
단순히 정의하면프로그래밍에서 식별값 없이 실행   있는 함수 표현 방법함수를 변수에 할당파라미터로 전달하는게 가능
이미 많은 언어에서 지원하고 있다. Ruby, C#, Python,,,,,
그러나 자바는 함수형 프로그램 언어가 아니 여서 기존에 사용할  없었다.
 
 함수형 인터페이스(functional interface)
 함수 인터페이스functional interface는 단 하나의 추상 메소드가 정의 가능한 인터페이스이다. 인터페이스가 함수형 인터페이스임을 나타내는 수단으로서 FunctionalInterface 어노테이션이 도입되었다. 예를 들어, java.lang.Runnable은 다음과 같은 함수 인터페이스를 지닌다.
    @FunctionalInterface
    public interface Runnable {
        public abstract void run();
    }
하지만, 어노테이션을 통해 명시적으로 지정하지 않더라도 함수 인터페이스의 정의를 만족하는 인터페이스라면 자바 컴파일러가 주석의 유무에 상관없이 함수 인터페이스로서 취급한다
 
 람다식 기본 구성
 
  (int x, int y) -> { return x + y; }
  (x, y) -> x + y
  x -> x * x
  () -> x
  x -> { System.out.println(x); }
 
화살표(->) 왼쪽은 매개변수 목록  입력 값 유형이고오른쪽은 몸체  동작에 대한 정의이다.




1
2
3
4
5
6
7
8
9
10
// 람다 표현식 기본 예제
public class Java8Test {
    public static void main(String args[]) {
        Thread testThread = new Thread(() -> { 
            System.out.println("best wedul");
        });
        
        testThread.start();
    }
}
cs





※ 이미지 참조 : slideshare



 매개변수 타입 추론



매개변수 타입 추론 1.
numbers.forEach((Integer value) -> System.out.println(value));

-- forEach 메소드와 Consumer 인터페이스 
numbers.forEach(new Consumer<Integer>() {
    public void accept(Integer value) {
        System.out.println(value);
    }
});

 위의 예제의 경우 자바 컴파일러가 람다식을 분석해 Consumer 인터페이스의  구현된 메소드(accept) 동일한 타입(시그니처)인지 검사하고람다식을 마치 Consumer 인터페이스를 구현한 클래스의 인스턴스인  처럼 사용한다.
 
 또한 람다 식의 인수의 타입 선언은  부분의 경우 컴파일러가 추론할  있고다음과 같이 생략이 가능하다.
numbers.forEach(value -> System.out.println(value)); 





매개변수 타입 추론 2.


1
2
3
4
5
6
7
8
9
b.addActionListener((ActionEvent e -> {
   Text.setText("버튼 클릭");
});
 
Public void addActionListener(ActionListener l) {
   Public interface ActionListener{
     Void actionPerforemd(ActionEvent e)
  }
}
cs



자바 컴파일러가 람다식을 분석해 ActionListener 인터페이스의  구현된 메소드(actionPerformed) 동일한 타입인지 검사한다.


 람다식 장점 
 
코드의 간결성 : 효율적인 람다 함수의 사용을 통하여 불필요한 코드를 삭제할  있다.
 - 필요한 정보만을 사용하는 방식을 통한 퍼포먼스 향상 : 지연 연산을 지원하는 방식을 통하여 효율적인 퍼포먼스를 기대


반응형

'JAVA > Java 8' 카테고리의 다른 글

Java8 인터페이스의 정적 메소드  (0) 2018.05.30
Java8 인터페이스 default Method (디폴트 메소드)  (0) 2018.05.30
Java8 변수 유효 범위  (0) 2018.05.30
Java8 생성자 레퍼런스  (0) 2018.05.30
Java8 메서드 레퍼런스  (0) 2018.05.30