반응형
[JAVA] 람다식(Lambda Expression) (tistory.com)
람다식(Lambda Expression)
JDK 8부터 추가된 람다 함수는 익명함수(Anonymous functions)를 지칭하는 용어이다.
즉, '식별자 없이 실행가능한 함수, 메소드의 이름이 필요없는 함수'라고 말할 수 있다.
📌함수형 인터페이스
함수를 단 하나만 가지고 있는 인터페이스
함수를 1급 객체처럼 다룰 수 있게 해주는 어노테이션으로, 인터페이스에 선언하여 단 하나의 추상메소드만을 갖도록 제한하는 역할을 한다.
[Java] 람다식(Lambda Expression)과 함수형 인터페이스(Functional Interface) (2/5) - MangKyu's Diary (tistory.com)
람다식의 장단점
- 장점
- 식에 개발자의 의도가 명확히 드러나 가독성이 높아진다.
- 병렬프로그래밍이 용이하다.
- 함수를 만드는 과정없이 한번에 처리할 수 있어 생산성이 높아진다.
- 코드를 간결하게 만들 수 있다.
- 단점
- 디버깅이 어렵다.
- 재귀로 만들 경우에 부적합하다.
- 람다를 남발하면 비슷한 함수가 중복 생성되어 코드가 지저분해질 수 있다.
- 람다를 사용하면서 마든 무명함수는 재사용이 불가능하다.
람다식 기본문법
람다는 객체를 생성할 필요가 없다.
(매개변수) -> { 실행문 }
람다식 사용 예제
※프로그래머스 프로그래밍강의 > 자바 중급 > 람다, 내부클래스, 익명클래스
람다식 사용 전
내부클래스를 이용해서 CheckCar라는 인터페이스를 만들고, 그걸 구현하는 CheckCarForBigAndNotExpensive클래스를 만들어서 4명 이상이 탈 수 있고, 가격이 2500이하인 차를 검색한다
import java.util.*;
public class CarExam{
public static void main(String[] args){
List<Car> cars = new ArrayList<>();
cars.add( new Car("작은차",2,800,3) );
cars.add( new Car("봉고차",12,1500,8) );
cars.add( new Car("중간차",5,2200,0) );
cars.add( new Car("비싼차",5,3500,1) );
printCar(cars, new CheckCarForBigAndNotExpensive());
}
public static void printCar(List<Car> cars, CheckCar tester){
for(Car car : cars){
if (tester.test(car)) {
System.out.println(car);
}
}
}
interface CheckCar{
boolean test(Car car);
}
//내부클래스를 만들어서 사용합니다.
static class CheckCarForBigAndNotExpensive implements CheckCar{
public boolean test(Car car){
return car.capacity >= 4 && car.price < 2500;
}
}
}
익명클래스를 사용한 후
import java.util.*;
public class CarExam{
public static void main(String[] args){
List<Car> cars = new ArrayList<>();
cars.add( new Car("작은차",2,800,3) );
cars.add( new Car("봉고차",12,1500,8) );
cars.add( new Car("중간차",5,2200,0) );
cars.add( new Car("비싼차",5,3500,1) );
printCar(cars,
//인터페이스 CheckCar를 구현하는 익명클래스를 만듭니다.
new CheckCar(){
public boolean test(Car car){
return car.capacity >= 4 && car.price < 2500;
}
});
}
public static void printCar(List<Car> cars, CheckCar tester){
for(Car car : cars){
if (tester.test(car)) {
System.out.println(car);
}
}
}
interface CheckCar{
boolean test(Car car);
}
}
람다식 사용 후
import java.util.*;
public class CarExam{
public static void main(String[] args){
//Car객체를 만들어서 cars에 넣습니다.
List<Car> cars = new ArrayList<>();
cars.add( new Car("작은차",2,800,3) );
cars.add( new Car("봉고차",12,1500,8) );
cars.add( new Car("중간차",5,2200,0) );
cars.add( new Car("비싼차",5,3500,1) );
CarExam carExam = new CarExam();
carExam.printCar(cars,
//인터페이스 CheckCar의 test메소드에 대응하는 람다를 만듭니다.
(Car car) -> { return car.capacity >= 4 && car.price < 2500; }
);
}
public void printCar(List<Car> cars, CheckCar tester){
for(Car car : cars){
if (tester.test(car)) {
System.out.println(car);
}
}
}
interface CheckCar{
boolean test(Car car);
}
}
++ 추가 중입니다.
반응형
'Study > JAVA' 카테고리의 다른 글
[Java] 디자인패턴 - 싱글톤 패턴 (singleton pattern) (0) | 2021.12.01 |
---|---|
[JAVA] String, StringBuffer, StringBuilder 차이 및 장단점 (0) | 2021.11.27 |
[Java] Stream API (0) | 2021.11.24 |
[Java] 컬렉션 (Collection) - Map (0) | 2021.11.23 |
[JAVA] 컬렉션(Collection) - Set (0) | 2021.11.23 |