| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 자바스크립트
- 후기
- 백준
- Web
- 이펙티브
- JPA
- 독후감
- MySQL
- boot
- 맛집
- jface
- Git
- Spring
- javascript
- RCP
- 인터페이스
- 리뷰
- java
- node
- elasticsearch
- 자바
- 엘라스틱서치
- effective
- nodejs
- kibana
- Spring Boot
- 알고리즘
- 스프링
- java8
- error
- Today
- Total
wedul
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));
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 |
