Engineering Note

[Java] Lambda expression 본문

Programming Language/Java

[Java] Lambda expression

Software Engineer Kim 2025. 8. 27. 15:43

1. 람다식이란?

Lambda expression(람다 표현식, 람다식)

- 메서드를 하나의 식(expression)으로 표현한 것.

- 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 '익명함수(anonymous fuction)'라고도 한다.

 

예시

//메서드
int method() {
	return (int) (Math.random()*5) + 1;
}

//람다식
int[] arr = new int[5];
Arrays.setAll(arr, (i) -> (int)(Math.random()*5) + 1;

 

 

람다식의 장점

- 모든 메서드가 클래스에 포함되어야 한것과 달리, 람다식은 오직 람다식 자체만으로 메서드의 역할을 대신할 수 있다.

 

 

2.람다식 작성하기

람다식은 '익명 함수'답게 메서드에서 메서드이름과 반환타입을 제거하고 매개변수 선언부와 몸통{} 사이에 '->'를 추가한다. 반환 값이 있는경우 return문 대신 '식(expression)'으로 대신할 수 있다. 이때는 '문장(statement)'이 아닌 '식'이므로 끝에 ';'을 붙이지 않는다.

 

 

 

3. 람다 메서드 참조

메서드 참조

- 람다식이 하나의 메서드만 호출하는 경우 람다식을 간략히 표현하는 방법

 

메서드 참조 방식으로 람다식을 작성하며, 매개변수를 생략할 수 있다.

Function<String, Integer> f = (String s) -> Integer.parseInt(s);

Function<String, Integer> f= Integer::parseInt;

 

첫 벗째 라인에 람다식을 메서드 참조 방식으로 작성하면서 파라미터 값과 타입을 생략해주었다. 이는 좌변의 f의 반환 타입만 봐도 컴파일러가 String 타입을 반환한다는걸 알 수 때문에 생략할 수 있다.

 

또 다른 예시로, 아래와 같은 상황도 생각해 볼 수 있다. 매개변수 s1과 s2를 생략하고 같단하게 메서드 참조 방식으로 표현할 수 있는데, 두 개의 String을 받아서 Boolean을 반환하는 경우다. 그런데 이러한 equals라는 이름의 메서드는 다른 클래스에도 존재할 수 있기 때문에 equals앞에 클래스 이름은 생략할 수 없다.

BiFunction<String, String, Boolean> f = (s1, s2) -> s1.equals(s2);

BiFunction<String, String, Boolean> f = String::equals;

 

만약 사용하는 메서드가 이미 생성된 객체라면 클래스 이름 대신 그 객체의 참조변수를 적어주면 된다.

MyClass obj = new MyClass();
Function<String, Boolean> f = (x) -> obj.equls(x);
Function<String, Boolean> f2 = obj::equlas;

 

 

참고 자료 : 자바의 정석(남궁성)

Comments