[Java] 람다식 이해하기
- [ Languages ]/Java
- 2023. 2. 7.
람다란 익명 함수(이름이 없는 함수)를 말하는데, 자바에서의 람다식 표현법과 활용되는 예를 정리했다.
람다식
람다식은 이름이 없는 함수를 의미하는데, 즉 함수를 하나의 식으로 표현하는 방법이다. 가장 간단한 람다식은 다음과 같이 표현할 수 있다.
이때 expression은 바로 return값이 나와야 한다. 예를 들면
public String getName() {
return "name";
}
() -> "name"
과 같이 바로 리턴값이 나와야 한다.
만약 다양한 변수나 선언문, 배정문등을 쓰기 위해서는 중괄호를 사용해주면 된다.
이러한 람다식은 불필요한 코드를 줄이고, 가독성을 높이기 위해서 사용될 수 있다.
함수형 인터페이스
배열을 정렬하는 Arrays.sort() 함수에서 사용되는 예를 보자.
Integer[] arr = {1,2,3,4};
//without Lambda
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
return i2 - i1;
}
});
//람다를 사용해서 표현하기
Arrays.sort(arr, (i1, i2) -> i2-i1);
배열을 내림차순으로 정렬하는 코드이다. Arrays.sort함수의 두 번째 인자로는 Comparator<? super T> 타입 변수가 들어가는데, 여기서 어떻게 Comparator<>타입 객체 대신 익명함수가 왔을까?
이 java.util.Comparator는 내부의 compare함수가 아직 구현되지 않은 함수형 인터페이스이다. 함수형 인터페이스란 내부에 1개의 추상메소드가 선언되고, @FunctionalInterface 어노테이션이 붙은 인터페이스를 말한다.
이러한 함수형 인터페이스는 람다를 이용하여 표현할 수 있는데, 함수형 인터페이스 내의 구현되지 않은 1개의 추상 메소드를 람다로 표현해서 넘겨주면 된다.
자바에는 이러한 Comparator 외에도 여러가지 함수형 인터페이스들이 있는데(직접 정의해서 사용하는 경우는 거의 없다고 한다), 다른것들은 사용하게 되면 추가해놔야겠다.
'[ Languages ] > Java' 카테고리의 다른 글
[Java] Thread-safe하게 변수 관리하는 방법들 (0) | 2023.11.03 |
---|---|
[Java] 자바의 예외(Exception) 처리 (0) | 2023.02.12 |
[Java] stream (0) | 2022.08.07 |
[Java] 자바의 동작 원리와 특징 (0) | 2022.07.08 |
[Java] 자바의 싱글톤 패턴 (0) | 2022.07.02 |