JAVA chapter14. 람다식. 14.1 람다식이란?. 14.2 람다식 기본 문법. 14.3 타겟 타입과 함수적 인터페이스
JAVA/CONCEPT 2017. 11. 30. 22:32 |chapter14. 람다식.
14.1 람다식이란?
* 함수적 프로그래밍
1. y=f(x) 형태의 함수로 구성된 프로그래밍 기법
- 데이터를 매개값으로 전달하고 결과를 받는 코드들로 구성
- 객체 지향 프로그래밍 보다는 효율적인 경우
// 대용량 데이터의 처리시에 유리
: 데이터 포장 객체를 생성후 처리하는 것 보다, 데이터를 바로 처리하는 것이 속도에 유리하다
: 멀티 코어 CPU에서 데이터를 병렬 처리하고 취합할 때 객체보다는 함수가 유리
// 이벤트 지향 프로그래밍(이벤트가 발생하면 핸들러 함수 실행)에 적합
: 반복적인 이벤트 처리는 핸들러 객체보다는 핸들러 함수가 적합
2. 현대적 프로그래밍 기법
- 객체 지향 프로그래밍 + 함수적 프로그래밍
* 자바 8부터 함수적 프로그래밍 지원
- 람다식(Lamda Expressions)을 언어 차원에서 제공
// 람다 계산법에서 사용된 식을 프로그래밍 언어에 접목
// 익명 함수(anonymous function)을 생성하기 위한 식
- 자바에서 람다식을 수용한 이유
// 코드가 매우 간결해 진다
// 컬렉션 요소(대용량 데이터)를 필터링 또는 매핑해서 쉽게 집계할 수 있다.
- 자바는 람다식을 함수적 인터페이스의 익명 구현 객체로 취급
// 어떤 인터페이스를 구현할지는 대입되는 인터페이스에 달려있다.
14.2 람다식 기본 문법
* 함수적 스타일의 람다식을 작성하는 방법
14.3 타겟 타입과 함수적 인터페이스
* 타겟 타입(target type)
- 람다식이 대입되는 인터페이스를 말한다
- 익명 구현 객체를 만들 때 사용할 인터페이스이다.
14.3.1 함수적 인터페이스(functional interface)
- 모든 인터페이스는 람다식의 타겟 타입이 될 수 없다.
// 람다식은 하나의 메소드를 정의하기 때문에
// 하나의 추상 메소드만 선언된 인터페이스만 타겟 타입이 될 수 있음
- 함수적 인터페이스
// 하나의 추상 메소드만 선언된 인터페이스를 말한다
- @FunctionalInterface 어노테이션 (실수를 줄이기 위해서 쓴다. 선택 사항)
// 하나의 추상 메소드만을 가지는지 컴파일러가 체크하도록 함
// 두 개 이상의 추상 메소드가 선언되어 있으면 컴파일 오류가 발생
14.3.2 매개변수와 리턴값이 없는 람다식
1 2 3 4 5 6 | package sec03.exam01_no_arguments_no_return; @FunctionalInterface // 확실히 하기 위해 public interface MyFunctionalInterface { public void method(); } | cs |
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 | package sec03.exam01_no_arguments_no_return; public class MyFunctionalInterfaceExample { public static void main(String[] args) { MyFunctionalInterface fi; // 4개 다 똑같다 // 1번째 fi= () -> { String str = "method call1"; System.out.println(str); }; fi.method(); // 2번째 fi = () -> { System.out.println("method call2"); }; fi.method(); // 3번째 // 실행문이 하나라면 중괄호 {}는 생략가능 fi = () -> System.out.println("method call3"); fi.method(); // 람다식을 사용하지 않고, 익명 객체를 만든다면 // 4번째 fi = new MyFunctionalInterface() { public void method() { System.out.println("method call4"); }; }; fi.method(); } } | cs |
14.3.3 매개 변수가 있는 람다식
1 2 3 4 5 6 | package sec03.exam02_arguments; @FunctionalInterface // 확실히 하기 위해 public interface MyFunctionalInterface { public void method(int x); } | cs |
|
14.3.4 리턴값이 있는 람다식
1 2 3 4 5 6 | package sec03.exam03_return; @FunctionalInterface public interface MyFunctionalInterface { public int method(int x, int y); } | cs |
|
|
'JAVA > CONCEPT' 카테고리의 다른 글
JAVA chapter14. 람다식. 14.5 표준 API의 함수적 인터페이스 (1) (0) | 2017.12.01 |
---|---|
JAVA chapter14. 람다식. 14.4 클래스 멤버와 로컬 변수 사용 (0) | 2017.12.01 |
JAVA chapter13. 제네릭. 13.5 제한된 타입 파라미터(<T extends 최상위타입>) (0) | 2017.11.30 |
JAVA chapter13. 제네릭. 13.4 제네릭 메소드(<T,R> R method(T t)) (0) | 2017.11.30 |
JAVA chapter13. 제네릭. 13.3 멀티 타입 파라미터(class<K,V,...>, interface<K,V,...>) (0) | 2017.11.30 |