Java 는 람다식의 도입으로 인해, 객체지향형인 동시에 함수형 언어가 되었다.
람다식의 정의
람다식은 메서드를 하나의 식(expression) 으로 표현한것을 말한다.
메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 익명함수(anonymous function) 이라고도 한다.
int[] arr = new int[10];
Arrays.setAll(arr, (i) -> (int)(Math.random()*10)+1);
위 람다식을 메소드로 나타낸다면 아래와 같다.
int methodExam() {
return (int)(Math.random()*10) + 1;
}
Java 에서 모든 메서드는 클래스에 포함 되어야하고 클래스도 새로 만들어야하며, 객체도 생성해야 비롯소 methodExam() 함수를 호출할 수 있는 구조인데...
반면에 람다식은 해당 과정없이 오직 람다식 자체만으로도 해당 메서드 역할을 할 수 있어서 간결하고 이해가 쉬운것이 장점이다.
또한 람다식은 메서드의 매개변수로 전달되어지는 것이 가능하고, 메서드의 결과로 반환될 수 도 있다.
결과적으로 람다식으로 인해서 메서드를 변수처럼 다루는 것이 가능해진것으로 보면된다.
람다식 작성방법
그럼, 람다식은 어떻게 작성할까?
아래와 같이 메서드에서 이름과 반환타입을 삭제하고 매개변수 선언부와 몸통{} 사이에 "->"(화살표) 를 추가하면된다.
아래는 정의이다.
반환타입 메서드이름(매개변수 선언) {
문장들...
}
람다식으로 변환하면..
(매개변수선언) -> {
문장들...
}
예를들면, 아래와 같다. 만약 메소드가 아래와 같다면..
int max(int a, int b) {
return a > b ? a : b;
}
람다식으로 변환하면 아래와 같다.
참고로, 반환값이 있는 메서드의 경우, return 문 대신 식(expression) 으로 대신 할 수 있고, 식의 연산결과가 자동으로 반환값이 된다.
이때 문장(statement) 이 아닌 "식" 이므로 끝에 ";"(세미콜론) 를 붙이지 않는다.
그리고, 람다식에 선언된 매개변수의 타입은 추론이 가능한 경우 생략 가능하며, 대부분의 경우 생략가능하다고 보면된다.
참고로 람다식에 반환타입이 없는 이유도 항상 추론이 가능하기 때문이다.
(a, b) -> a > b ? a : b
여기까지 람다식의 정의와 변환방법을 알아보았다.
오늘의 티스토리는 여기까지고요.
항상 믿고 봐주셔서 감사합니다.
블로그 요약!
- Java는 람다식을 도입하여 객체지향형과 함수형 언어의 특성을 모두 가짐
- 람다식은 메서드를 하나의 식으로 표현한 것으로, 반환값과 이름이 없음
- 람다식은 익명함수라고도 불리며, 간결하고 이해하기 쉬운 것이 장점
- 람다식은 메서드의 매개변수로 전달되거나 반환값으로 사용될 수 있음
- 람다식을 작성하려면, 메서드에서 이름과 반환타입을 삭제하고 "->"를 추가해야 함
- 반환값이 있는 메서드의 경우, return 대신 식으로 대체 가능
- 람다식에 선언된 매개변수의 타입은 추론 가능한 경우 생략 가능
'좋아하는 것_매직IT > 26.Java' 카테고리의 다른 글
Java 스트림(Stream) 깔끔하게 정리하기 (0) | 2023.12.27 |
---|---|
openjdk 최신버전 다운로드 받기 (0) | 2023.04.05 |
ChatGPT 연동 JAVA로 구현해보기 (ft.python, nodejs) (3) | 2023.02.14 |
HttpServer를 활용한 간단한 Mock 서버 구축하기 (0) | 2022.09.13 |
면접때 꼭 물어보는 JAVA(JVM) 주요 메모리 영역 깔끔하게 정리하기 (0) | 2022.06.05 |