[자바] 람다식과 메소드 참조

박지운·2023년 7월 10일
0

자바 꽉 자바

목록 보기
1/12
post-thumbnail

처음 자바 코드를 보고 화살표는 뭔가 했었다. 스프링 프로젝트를 하며, 교재를 보면서도, 따라만 쳤기에 "자바의 정석"을 보고 일부분만 정리했다.

람다식이란

람다식은 메소드를 하나의 '식'으로 표현한 것이다.
메소드를 람다식으로 표현하면 이름과 반환값이 없어지므로 익명함수라고도 한다.
라다식은 메소드의 매개변수로 전달되어지는 것과 메소드의 결과로 반환될 수도 있다.
변수처럼 쓸 수 있는 것이다.

작성하기

반환타입 메소드이름(매개변수 선언) {
	문장들
}

람다식은 이름과 반환타입을 제거하고 선언부와 몸통{} 사이에 ->를 추가한다.

반환타입 메소드이름 (매개변수 선언) -> {
}

(매개변수 선언) -> {
}

예시로

int max(int a, int b) {
	return a > b ? a : b;
}

위 코드에서 아래처럼 바꿀 수 있다.

(int a, int b) -> { a > b ? a : b} //식으로 반환시 ; 붙이지 않는다.
  • 람다식에 선언된 매개변수의 타입은 추론이 가능한 경우 생략 가능하다.
  • 매개변수와 타입이 있으면 괄호를 생략할 수 없다.
  • 괄호 { } 안의 문장이 하나일 때는 괄호 생략이 가능하다.
  • 안의 문장이 return문일 경우에는 괄호 생략이 불가능하다.

메소드 참조

람다식이 하나의 메소드만 호출하는 경우에는 '메소드 참조'를 통해 간략히 할 수 있다.

//f의 타입만 봐도 두 개의 String 매개변수를 받는 다는 것을 알 수 있다.
function<String, String, Boolean> f = (s1, s2) -> s1.equals(s2);
//추론 가능 매개변수 제거
function<String, String, Boolean> f = String::equals;

생성자의 메소드 참조

Supplier<MyClass> s = () -> new MyClass(); // 람다식
Supplier<MyClass> s = MyClass::new;		   // 메소드 참조

매개변수가 있는 생성자라면 매개변수의 개수에 따라 알맞은 함수형 인터페이스를 사용하면 된다.

Function<Integer, MyClass> f = (i) -> new MyClass(i); // 람다식
Function<Integer, MyClass> f2 = MyClass::new 		  // 메소드 참조
profile
앞길막막 전과생

0개의 댓글