본문 바로가기
Hello World/JAVA

JAVA - Lambda Expression 람다식 [개발스터디 기몬]

by 기몬 2023. 4. 18.
728x90
반응형

람다식 Lambda

람다식 
- 함수형 프로그래밍 : 함수를 정의하고 이 함수를 데이터 처리부로 보내 데이터를 처리하는 기법
- 데이터 처리부는 제동괸 함수의 입력값으로 데이터를 넣고 함수에 정의된 처리 내용을 실행
- 람다식: 데이터 처리부에 제동되는 함수 역할을 하는 매개변수를 가진 중괄호 블록이다.
- 자바는 람다식을 익명 구현 객체로 변환

함수형 인터페이스 
- 인터페이스가 단하나의 추상 메소드를 가지는 것 
람다식 
  (  ) -> {   }

- 인터페이스가 함수형 인터페이스임을 보장하기 위해서는 @FunctionalInterface 어노테이션을 붙임
- @FunctionalInterface : 컴파일 과정에서 추상 메소드가 하나인지 검사해 
정확한 함수형 인터페이스를 작성할 수 있게 도와주는 역할

매개변수가 없는 람다식 
- 함수형 인터페이스의 추상 메소드에 매개변수가 없을 경우 람다식 작성하기 
- 실행문이 두개 이상일 경우에는 중괄호를 생략할 수 없고, 
하나일 경우에만 생략할 수 있음

매개변수가 있는 람다식 
- 함수형 인터페이스의 추상 메소드에 매개변수가 있을 경우 람다식 작성하기
- 매개변수를 선언할 때 타입은 생략할 수 있고, 구체적인 타입 대신에 var를 사용할 수 있음
- 매개변수가 하나일 경우에는 괄호를 생략 가능, 이때는 타입 또는 var를 붙일 수 없음

리턴값이 있는 람다식 
- 함수형 인터페이스의 추상 메소드에 리턴값이 있을 경우 람다식 작성하기 
- return 문 하나만 있을 경우에는 중괄호와 함께 return 키워드를 생략 가능
- 리턴값은 연산식 또는 리턴값 있는 메소드 호출로 대체 가능

메소드 참고 
- 메소드를 참조해 매개변수의 정보 맟 리턴 타입을 알아내 암다식에서 불필요한 매개변수를 제거
         (left, right) -> Math.max(left, right);

정적 메소드와 인스턴스 메소드 참조 
- 정적 메소드를 참조 시 클래스 이름 뒤에 :: 기호를 붙이고 정적 메소드 이름을 기술

         클래스 :: 메소드 
- 인스턴스 메소드일 경우에는 객체를 생성한 다음 참조 변수 뒤에 :: 기호를 붙이고 
인스턴스 메소드 이름을 기술
         참조변수  :: 메소드 

 

매개변수의 메소드 참조 
- 람다식에서 제공되는 a 매개변수의 메소드를 호출해서 b 매개변수를 매개값으로 사용 
(a, b) -> {a.instanceMethod(b);}
- a의 클래스 이름 뒤에 :: 기호를 붙이고 메소드 이름을 기술
클래스 :: instanceMethod

생성자 참조 
- 객체를 생성하는 것. 람다식이 단순히 객체를 생성하고 리턴하도록 구성되면 
람다식을 생성자 참조로 대치 가능
(a, b) -> {return new 클래스(a, b); }
- 클래스 이름 뒤에 :: 기호를 붙이고 new 연산자를 기술
클래스 :: new
- 생성자가 오버로팅되어 여러 개가 있을 경우, 컴파일러는 
함수형 인터페이스의 추상 메소드와 동일한 매개변수 타입과 개수를 가지고 있는 생성자를 찾아 실행
- 해당 생성자가 존재하지 않으면 컴파일 오류 발생






*** 함수형 인터페이스만 람다식으로 표현 할 수 있다. 

** 람다식  (    )  -> {       }
        (CALL 매개변수 ) -> { 추상메소드의 body }
화살표는 생략 절대 불가 
()와 {}는 때에 따라서는 생략가능 ..

함수형 인터페이스 추상메소드의 시그니처 타입 또는 
갯수를 보고 람다식을 기술한다. 

람다식이 실제 구현하는 것 
: 익명 구현 객체인 함수형 인터페이스를 구현한다.

Lamba Expression 
- 함수(메서드)를 간단한 '식(expression' 으로 표현하는 방법 
int max (int a, int b) {
return a > b ? a : b ;
}

==

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

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

728x90
반응형

댓글