KoreaIt Academy/JAVA

17. JAVA의 람다식(Lambda Expression) , 메소드 참조

hongeeii 2021. 7. 22.
728x90
반응형

람다식(Lambda Expression)

이름이 없는 메소드로서 변수처럼 사용이 가능하며, 매개변수로도 전달이 가능합니다.
함수형 인터페이스는 추상 메소드가 한 개만 선언되기 때문에 메소드 이름이 필요 없습니다.
따라서 람다식을 익명 메소드(Anonymous Method)라고도 부릅니다.

 

함수형 인터페이스가 뭘까요??

함수형 인터페이스일때만 람다식을 사용할 수있습니다.

인터페이스 중 추상 메소드를 하나만 가지고 있는 인터페이스를 함수형 인터페이스라고 합니다.
이 때 @FunctionalInterface를 인터페이스 위에 작성하여 단 하나의 추상메소드만
선언할 수 있도록 제한해야 합니다.

 

람다의 장단점

장점

1. 코드의 간결성 - 람다를 사용하면 불필요한 반복문의 삭제가 가능하며 복잡한 식을 단순하게 표현할 수 있습니다.

2. 지연연산 수행 - 람다는 지연연산을 수행 함으로써 불필요한 연산을 최소화 할 수 있습니다.

3. 병렬처리 가능 - 멀티쓰레드를 활용하여 병렬처리를 사용 할 수 있습니다.

 

단점

1. 람다식의 호출이 까다롭습니다

2. 람다 stream 사용 시 단순 for문 혹은 while문 사용 시 성능이 떨어집니다.

3. 불필요하게 너무 사용하게 되면 오히려 가독성을 떨어 뜨릴 수 있습니다.

 

람다식 문법

1. (매개변수 형식 나열,...) -> 리턴값;  

         ※ 중괄호에 리턴문만 있다면 생략할 수 있습니다.

           ex) (a, b)-> a + b;
2. (매개변수 형식 나열,...) -> {2개 이상의 문장 작성, return 리턴값;}

 

 

람다식 사용 예제

위와 같이 함수형 인터페이스가 있습니다.

함수형 인터페이스라는 뜻으로 @FunctionalInterface 어노테이션을 사용했습니다.

만약 메소드를 두개 이상 선언한다면 오류가 나게 됩니다.

 

 

1. 람다식을 쓰지않은 코드

 

 

2. 람다식을 사용한 코드

코드가 매우 간결해진것을 볼 수 있습니다.

 

 

메소드 참조

메소드 참조는 말 그대로 메소드를 참조해서 매개 변수의 정보 및 리턴 타입을 알아내어, 람다식에서 불필요한 매개 변수를 제거하는 것이 목적입니다.

람다식은 종종 기존 메소드를 단순히 호출만 하는 경우가 많습니다.

예를 들면 Math클래스의 max()정적 메소드를 호출하는 람다식은 다음과 같습니다.

(left , right) -> Math.max(left, right);

Math :: max;      /////////메소드 참조

 

정적 메소드 참조

정적(static)메소드를 참조할 경우에는 클래스 이름 뒤에 :: 기호를 붙이고 정적 메소드 이름을 기술 하면 됩니다.

클래스 :: 메소드

 

인스턴스 메소드 참조

인스턴스 메소드일 경우에는 먼저 객체를 생성한 다음 참조 변수 뒤에 :: 기호를 붙이면 됩니다.

참조변수 :: 메소드

 

매개 변수의 메소드 참조

람다식에서 제공되는 a 매개 변수의 메소드를 호출해서 b매개 변수를 매개값으로 사용하는 경우도 있습니다.

 (a, b) -> {a.instanceMethod(b) ; }

클래스 :: instanceMethod

 

생성자 참조

생성자 참조는 객체 생성을 의미합니다.

단순히 객체를 생성하고 리턴하도록 구성된 람다식은 생성자 참조로 대치할 수 있습니다.

(a, b) -> {return new 클래스(a,b); }

클래스 :: new

이 때, 생성자가 오버로딩되어 여러 개가 있을 경우, 컴파일러는 함수적 인터페이스의 추상메소드와 동일한 매개 변수 타입과 개수를 가지고 있는 생성자를 찾아서 실행합니다.

 


이상으로 람다식에 대해 알아보았습니다.

 

728x90
반응형

추천 글