17. JAVA의 람다식(Lambda Expression) , 메소드 참조
람다식(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
이 때, 생성자가 오버로딩되어 여러 개가 있을 경우, 컴파일러는 함수적 인터페이스의 추상메소드와 동일한 매개 변수 타입과 개수를 가지고 있는 생성자를 찾아서 실행합니다.
이상으로 람다식에 대해 알아보았습니다.
'KoreaIt Academy > JAVA' 카테고리의 다른 글
19. JAVA의 Wrapper 클래스, 박싱(Boxing), 언박싱(UnBoxing) (0) | 2021.07.22 |
---|---|
18. JAVA의 예외(Exception), 에러(Error), try-catch문, throw, throws (0) | 2021.07.22 |
16. JAVA의 API, 외부 API를 이용하여 문자보내기 (2) | 2021.07.21 |
15. JAVA의 내부클래스, 익명클래스(Anonymous inner class) (0) | 2021.07.20 |
14. JAVA의 인터페이스(Interface), Adapter, 마커인터페이스, 모호성 (0) | 2021.07.19 |
댓글