Java 8 버전부터 함수형 프로그래밍을 지원하기 위해
람다(lambda), 스트림(Steam)이 도입되었다.
람다와 스트림을 사용하면 함수형 프로그래밍 스타일로 자바 코드를 작성할 수 있다.
굳이 사용하지 않아도 자바 코드 작성 시 어려움은 없겠지만,
작성해야 하는 코드의 양이 줄어들고 읽기 쉬운 코드를 만들 수 있다는 장점이 있다.
람다(Lambda)
익명 함수(anonymous function)를 의미하며, 메서드를 하나의 식으로 표현한 것
모든 메서드는 클래스에 포함되어야 하므로 클래스도 새로 만들어야 하고
객체도 생성해야 메서드를 호출할 수 있지만,
람다식은 이 모든 과정없이 람다식 자체만으로 이 메서드의 역할을 대신 할 수 있다.
int calculator(int a, int b) {
return a+b;
}
(int a, int b) -> a + b
정수 두 개를 합해 반환하는 메서드인 calculator() 메서드를 람다식으로 바꾸면
조금 더 간결해지는 것을 볼 수 있다.
파라미터를 왼쪽에 두고 가운데 화살표를 놓은 뒤에 반환할 값을 오른쪽에 둔다.
(int a, int b) -> a * b // before
(a, b) -> a * b // after
매개변수 타입을 생략해도 컴파일러가 자동으로 추론해주기 때문에 생략 가능하다.
참고로 두 매개변수 중 어느 하나의 타입만 생략하는 것은 불가능하다.
ex) (int a, b) -> a > b ? a : b
(a) -> a * a // before
a -> a * a // after
(int a) -> a * a // 정상
int a -> a * a // 에러
파라미터의 괄호, 바디의 중괄호, 세미콜론까지 생략 가능하다.
그러나 선언된 매개변수가 하나뿐인 경우에는 괄호()를 생략 할 수 있지만,
매개변수 타입이 있으면 괄호()를 생략 할 수 없다.
(int a, int b) -> { return a > b ? a : b; } // before
(int a, int b) -> a > b ? a : b // after
반환값이 있는 메서드의 경우, return문 대신 '식(expression)'으로 대신 할 수 있다.
식의 연산결과가 자동적으로 반환값이 된다.
이때는 '문장(statement)'이 아닌 '식'이므로 끝에 ';'을 붙이지 않는다.
'공부 > Java' 카테고리의 다른 글
[Java] 서블릿에서 JSP 페이지로 이동하는 방법 (sendRedirect와 RequestDispatcher) (0) | 2023.09.20 |
---|---|
[Java] jsp와 servlet 차이점과 친절한 설명까지 요약 정리 (0) | 2023.09.20 |
[Java] 싱글톤(Singleton) 패턴은 단 한 개의 객체만 생성해 사용하고 싶을 때! (0) | 2023.09.12 |
[Java] HashMap과 HashSet 차이점 (2) | 2023.08.21 |
[Java] 정규표현식과 Pattern 클래스 (0) | 2023.04.24 |