☕JAVA/🐣 강의 [JAVA]

[JAVA][기초] 람다식 / 함수형 인터페이스

디카페인라떼 2022. 11. 15. 19:10

[기초] 시리즈는 본강의를 수강후 정리한 글들 입니다.

Java for Beginner - YouTube

 

Java for Beginner

[교재 link] https://github.com/namoosori/java-for-beginner/tree/master/doc Java for Beginner 강의에서 다루는 내용은 다음과 같습니다. - Java 개요 : Java 언어가 어떤 언어이고 Java 언어를 이용해 프...

www.youtube.com


💡람다식의 이해

  • 불필요한 코드를 줄이고, 코드의 이해를 도움.
  • 메소드로 전달할 수 있는 익명 함수를 단순화한 코드의 블록
  • 특정 클래스에 종속되지 않으며 함수라는 이름으로 명명
  •  함수 자체를 전달인자로 보내거나 변수에 저장하는 것이 가능

 

📌예제

    List<String> list = new ArrayList<>();
    list.add("Java");
    list.add("C");
    list.add("Python");

    for (String str : list){ // 기존 방식
      System.out.println(str);
    }
    System.out.println();
 list.stream().forEach((String str) ->  {System.out.println(str);} );

👉forEach를 사용하여 String str 을 매개변수로 꺼내서 -> {실행문}을 실행하겠다

list.stream().forEach(str ->  System.out.println(str) );

👉 람다식이 한줄로 끝난다면 실행문 { ;} 생략가능

👉파라미터의 타입이 예측가능하다면 타입명 () 생략가능

👉그러나 파라미터가 하나가 아닐 경우 () 필요

list.stream().forEach(System.out::println );

👉함수 레퍼런스 식

🚩 보통 2로 사용하지만 가끔 3이 더 추천되는 경우도 있음!


💡함수형 인터페이스

  • 람다표현식은 익명 구현 클래스를 생성하고 객체화 한다.
  • 익명 구현 클래스로 생성된 람다 표현식은 인터페이스로 대입 가능하며 이 인터페이스를 함수형 인터페이스라고 함.
  •  하나의 추상 메소드를 갖는 인터페이스는 모두 함수형 인터페이스가 될 수 있음.
  •  다수의 디폴트 메소드를 갖는 인터페이스라도 추상 메소드가 하나라면 함수형 인터페이스.
  •  하나의 추상 메소드를 가지면 무조건 함수형 인터페이스가 될 수 있음.
  • 그러나 이미 자바가 만들어 놓은 함수형 인터페이스들이 많이 있기 때문에 직접 만들 일은 적음 -> 잘 사용하면 됨.
  •  함수형 인터페이스를 정의할 때 @FumctionalInterface 어노테이션을 이용해 컴파일 검사를 진행.
  •  함수형 인터페이스의 추상메소드 시그니처를 함수 디스크립터 function descriptor 하고 함.

  •  java.util.function 패키지를 통해 다양한 함수형 인터페이스를 제공
  • 기본형 특화는 Auto-Boxing 동작을 제한한 함수형 인터페이스
    •  primitive 타입에 대해서 Auto-boxing, unBoxing이 진행 됐을 대 성능상의 문제가 있을 수 있으니 그럴 경우  기본형 특화 되어있는 인터페이스를 사용하여라!
  • 주로 사용하는 인터페이스
함수형 인터페이스 메소드 설명
Predicate<T> test() 데이터에 대해 필터링을 하거나 조건에 맞는 지 확인
Comsumer<T> accept() 작업을 수행 , 반환 없음
Function<T,R> apply()  값을 받아서 다른 값으로 반환
Supplier<T> get()  파라미터 없이 리턴 값만 있는 경우