JAVA - 람다와 스트림(1)

jodbsgh·2022년 4월 26일
0

💡"JAVA"

목록 보기
54/67

람다식(Lambda Expression)

  • 함수(메서드)를 간단한 식(Expression)으로 표현하는 방법

    ( a, b ) -> a > b ? a : b

  • 익명 함수(이름이 없는 함수, anonymous function)

    ( int a, int b ) -> { return a > b ? a : b; }

  • 함수와 메서드의 차이

  1. 근본적으로 동일, 함수는 일반적 용어, 메서드는 객체지향개념 용어
  2. 함수는 클래스에 독립적, 메서드는 클래스에 종속적

람다식 작성하기

  1. 메서드의 이름과 반환타입을 제거하고 '->'를 블록{}앞에 추가한다.

    ( int a, int b ) ->{ return a > b ? a : b; }

  2. 반환값이 있는 경우, 식이나 값만 적고 return문 생략 가능(세미콜론 생략 가능)

    ( int a, int b ) -> a > b ? a : b

  3. 매개변수의 타입이 추론 가능하면 생략 가능(대부분의 경우 생략 가능)

    ( a, b ) -> a > b ? a : b

람다식 작성하기 - 주의사항

  1. 매개변수가 하나인 경우, 괄호() 생략가능( 타입이 없을 때만)

    a -> a * a //ok 단, 괄호 생략 불가능한 경우도 있다.

  2. 블록 안의 문장이 하나뿐 일 때, 괄호{} 생략가능(끝에 세미콜론 생략)

    ( int i ) -> System.out.println( i )

    단, 하나뿐인 문장이 return문이면 괄호{} 생략 불가능

    ( int a, int b ) -> {return a>b ? a:b;} //ok
    ( int a, int b ) -> return a>b ? a:b //에러

람다식은 사실 익명함수가 아니라 익명 객체다

  • 람다식은 익명 함수가 아니라 익명 객체이다.
  • 람다식(익명 객체)을 다루기 위한 참조변수가 필요. 참조변수의 타입은?

    타입 obj = ( a, b ) -> a > b ? a : b ; //에러, 어떤타입을 넣어야 할까...?
    : 함수형 인터페이스로 해결이 가능하다...

profile
어제 보다는 내일을, 내일 보다는 오늘을 🚀

0개의 댓글