본문 바로가기
IT 정보/Java

[Java] 람다 (Lambda)

by 동그리가조아 2022. 5. 19.
반응형

함수형 인터페이스 (functional interface)

람다 표현식을 사용할 때에는 람다 표현식을 저장하기 위한 참조 변수의 타입을 결정해야 한다.


참조 변수의 타입  참조 변수의 이름  =  람다 표현식


위 문법 처럼 람다 표현식을 하나의 변수에 대입할 때 사용하는 참조 변수의 타입을 함수형 인터페이스라고 부른다. 이 함수형 인터페이스는 추상 클래스와 달리 단 하나의 추상 메소드만 가져야 하며, annotation을 사용하여 함수형 인터페이스를 명시할 수 있다. 


@FunctionalInterface


annotation을 인터페이스 선언 앞에 붙이면, 해당 인터페이스는 함수형 인터페이스로 인식하고 명시된 함수형 인터페이스에 두 개 이상의 메서드가 선언되면 오류를 발생시킨다. 

 

기본 문법 

Runnable runnable = new Runnable() {
	public void run() { ... }
};
              전
====================================
              후

Runnable runnable = () -> { ... };

 

0. 기본
(타입 매개변수) -> { ... }

1. 매개변수가 1개 일 때, 매개변수 () 생략가능
매개변수 -> { ... }
    
2. 실행문이 하나일 경우 중괄호 { }는 생략 가능
    (매개변수) -> System.out.println(num1)

3. 매개변수가 2개 이상, 리턴문만 존재할 때는 return과 {} 생략가능
(num1, num2) -> {return num1 + num2} // 전 --> 후 
(num1, num2) -> num1 + num2 // return 

4. 매개변수가 2개 이상, 실행문을 실행하고 결과값을 리턴할 경우
(매개변수1, 매개변수2) -> { ... };

 

메서드 레퍼런스

람다식에서 불필요한 매개변수를 제거하는것이 목적 
람다식은 종종 메서드를 단순히 호출만 하는 경우도 많음. 

IntBinaryOperator operato = Math :: max; //메서드 레퍼런스

 

인스턴스 메서드 레퍼런스 vs 정적 메서드 레퍼런스

클래스 :: 메서드 // 인스턴스 생성 없이 바로 사용할 수 있다. 

                 정적 메서드 레퍼런스
//================================================
               인스턴스 메서드 레퍼런스 
                        
참조 변수 :: 메서드 // 객체를 생성해서 참조 변수를 받아와야 한다.

 

반응형

'IT 정보 > Java' 카테고리의 다른 글

[Java] enum  (0) 2022.05.19
[Java] 애너테이션 ( Annotation )  (7) 2022.05.19
[Java] Collection Framwork (Map편)  (26) 2022.05.18
[Java] Collection Framwork (List편)  (8) 2022.05.18
[Java] 내부 클래스(Inner class)  (10) 2022.05.18