JAVA - 함수형 인터페이스

2020. 9. 26. 18:52개인공부/java

함수는 들어오는 값이 같으면 나오는 값도 같아야한다.

 

2. 함수형 인터페이스와 람다 표현식 소개

 

함수형 인터페이스 (Functional Interface)

  • ●  추상 메소드를 딱 하나만 가지고 있는 인터페이스

  • ●  SAM (Single Abstract Method) 인터페이스

  • ●  @FuncationInterface 애노테이션을 가지고 있는 인터페이스

    람다 표현식 (Lambda Expressions)

  • ●  함수형 인터페이스의 인스턴스를 만드는 방법으로 쓰일 수 있다.

  • ●  코드를줄일수있다.

  • ●  메소드 매개변수, 리턴 타입, 변수로 만들어 사용할 수도 있다.

    자바에서 함수형 프로그래밍

  • ●  함수를 First class object로 사용할 수 있다.

  • ●  순수 함수 (Pure function)

    • ○  사이드 이팩트가 없다. (함수 밖에 있는 값을 변경하지 않는다.)

    • ○  상태가 없다. (함수 밖에 있는 값을 사용하지 않는다.)

  • ●  고차 함수 (Higher-Order Function)

    함수가함수를매개변수로받을수있고함수를리턴할수도있다.

  • ●  불변성

 



 

 

4. 람다 표현식 람다

 

(인자 리스트) -> {바디}

인자 리스트

  • ●  인자가없을때:()

  • ●  인자가 한개일 때: (one) 또는 one

  • ●  인자가 여러개 일 때: (one, two)

  • ●  인자의 타입은 생략 가능, 컴파일러가 추론(infer)하지만 명시할 수도 있다. (Integer one,

    Integer two)

    바디

  • ●  화상표 오른쪽에 함수 본문을 정의한다.

  • ●  여러줄인경우에{}를사용해서묶는다.

  • ●  한 줄인 경우에 생략 가능, return도 생략 가능.

    변수 캡처 (Variable Capture)

  • ●  로컬변수캡처

    • ○  final이거나 effective final 인 경우에만 참조할 수 있다.

    • ○  그렇지 않을 경우 concurrency 문제가 생길 수 있어서 컴파일가 방지한다.

  • ●  effective final

    • ○  이것도 역시 자바 8부터 지원하는 기능으로 사실상" final인 변수.

    • ○  final 키워드 사용하지 않은 변수를 익명 클래스 구현체 또는 람다에서 참조할 수

      있다.

  • ●  익명 클래스 구현체와 달리 쉐도윙하지 않는다.

익명 클래스는 새로 스콥을 만들지만, 람다는 람다를 감싸고 있는 스콥과 같다.

참고

 

Nested Classes (The Java™ Tutorials > Learning the Java Language > Classes and Objects)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See JDK Release Notes for information about new fe

docs.oracle.com

 

Lambda Expressions (The Java™ Tutorials > Learning the Java Language > Classes and Objects)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See JDK Release Notes for information about new fe

docs.oracle.com

 

 

 

 

 

 

5. 메소드 레퍼런스


람다가 하는 일이 기존 메소드 또는 생성자를 호출하는 거라면, 메소드 레퍼런스를 사용해서

매우 간결하게 표현할 수 있다. 메소드 참조하는 방법

스태틱 메소드 참조
특정 객체의 인스턴스 메소드 참조

임의 객체의 인스턴스 메소드 참조 생성자 참조

타입::스태틱 메소드
객체 레퍼런스
::인스턴스 메소드

타입::인스턴스 메소드 타입::new

 

Method References (The Java™ Tutorials > Learning the Java Language > Classes and Objects)

The Java Tutorials have been written for JDK 8. Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available. See JDK Release Notes for information about new fe

docs.oracle.com

 

 

 

출저 : 자바8 - 백기선님.

'개인공부 > java' 카테고리의 다른 글

Java - Date와 Time Api  (0) 2020.09.27
JAVA - stream  (0) 2020.09.27
JAVA - 메타 애너테이션  (0) 2020.09.26
JAVA - 표준 애너테이션  (0) 2020.09.26
JAVA -애너테이션  (0) 2020.09.25