람다란 무엇인가? 람다 사용법

라헬·2022년 12월 24일
0

람다는 메서드로 전당할 수 있는 익명 함수를 단순화한 것으로
파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외리스트를 가질 수 있다.

Comparator byWeight = new Comprator() {
public int compare(Apple a1, Apple a2) {
return a1.getWeight().compareTo(a2.getWeight());
}
}
위의 코드를 람다식으로 사용하면 밑에처럼 간결해질 수 있다.

	Comparator<Apple> byWeight = (Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight());

(Apple a1, Apple a2)는 람다 파라미터
-> 화살표 이후는 람다 바디

그래서 람다는 어디에 어떻게 사용하는 것일까?
함수형 인터페이스에 람다 표현식으로 추상 메서드 구현을 전달할 수 있다.
변수에 할당할 수 있고 함수형 인터페이스를 인수로 받는 메서드로 전달할 수 있고 함수형 인터페이스의 추상 메서드와 같은 시그니처를 갖는다.

public String processFile() throws IOException{
try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))){
	return br.readLine();
	}
}

여기서 processFile을 동작 파라미터화 할 수 있다.

String result = processFile(BufferedReader br) -> 
				br.readLine() + br.readLine());

또한 특정 람다 표현식을 축약한 메서드 참조 기능도 있다.

inventory.sort(comparing(Apple::getWeight));
명시적으로 메서드를 참조하면서 사과의 무게별로 비교해서 정렬하는 것이라는 가독성을 높여준다.

메서드 참조에는
정적메서드 참조
Integer::parseInt
다양한 형식의 인스턴스 메서드 참조
String::length
기존 객체의 인스턴스 메서드 참조
Transaction 객체를 할당받은 expensiveTransaction 지역 변수가 있고 Transaction에는 getValue 메서드가 있다면
expensiveTransaction::getValue로 사용할 수 있다.
또한 생성자 참조도 가능하다
ClassName::new

Supplier c1 = Apple::new;
Apple a1 = c1.get();

profile
성장하고 싶은 풀스택 개발자

0개의 댓글