람다식(Lambda expression) -> 메서드 참조(Method reference)
목차
람다식(Lambda expression) -> 메서드 참조(Method reference)로 변환하는 방법
Java 8부터 도입된 람다식과 메서드 참조는 함수형 프로그래밍을 지원하는 중요한 기능입니다. 람다식을 사용하면 코드가 간결해지고, 메서드 참조를 통해 이를 더 간단하고 읽기 쉽게 만들 수 있습니다.
1. 람다식과 메서드 참조란?
- 람다식: 익명 함수 형태로, 코드 내에서 한 번만 사용될 수 있는 짧은 함수 정의를 제공합니다.
List<String> list = Arrays.asList("apple", "banana", "cherry"); list.forEach(str -> System.out.println(str));
- 메서드 참조: 이미 정의된 메서드를 람다식처럼 사용할 수 있도록 하는 방식입니다. :: 기호를 사용하여 메서드를 참조합니다.
List<String> list = Arrays.asList("apple", "banana", "cherry"); list.forEach(System.out::println);
2. 람다식을 메서드 참조로 변환하기
람다식을 메서드 참조로 변환할 수 있는 경우는 크게 4가지 유형으로 나눌 수 있습니다.
2.1. 인스턴스 메서드 참조
람다식에서 객체의 메서드를 호출하는 경우, 해당 메서드를 메서드 참조로 변환할 수 있습니다.
예시 1: 인스턴스 메서드 참조
람다식
List<String> list = Arrays.asList("apple", "banana", "cherry");
list.forEach(str -> System.out.println(str));
메서드 참조
list.forEach(System.out::println);
System.out.println 메서드를 참조하는 형태로, 람다식이 메서드 참조로 변환되었습니다.
인스턴스 메서드 참조 간단 요약
// 람다식
(obj , x) -> obj.method(x)
// 메서드 참조
ClassName::method
2.2. 정적(static) 메서드 참조
정적 메서드에 대해서도 람다식을 메서드 참조로 바꿀 수 있습니다. 정적 메서드의 경우, 클래스 이름을 사용하여 메서드를 참조합니다.
예시 2: 정적 메서드 참조
람다식
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.forEach(num -> System.out.println(Math.pow(num, 2)));
메서드 참조
numbers.forEach(num -> System.out.println(Math::pow, num, 2));
Math.pow 메서드를 참조하는 형태로 람다식을 메서드 참조로 변환할 수 있습니다.
정적 메서드 참조 간단 요약
//람다식
(x) -> ClassName.method(x)
//메서드 참조
ClassName::method
2.3. 생성자 참조
람다식이 객체를 생성하는 경우, 이를 생성자 참조로 바꿀 수 있습니다. 객체 생성 시 호출할 생성자를 참조합니다.
예시 3: 생성자 참조
람다식
List<String> names = Arrays.asList("John", "Jane", "Tom");
names.forEach(name -> new Person(name));
메서드 참조
names.forEach(Person::new);
Person 클래스의 생성자를 참조하는 방식으로 람다식을 메서드 참조로 변환할 수 있습니다.
2.4. 인스턴스 메서드 참조 (특정 객체에 대해)
특정 객체에 대해 인스턴스 메서드를 참조하는 경우도 메서드 참조로 변환 가능합니다.
예시 4: 특정 객체의 인스턴스 메서드 참조
람다식
List<String> list = Arrays.asList("apple", "banana", "cherry");
list.sort((str1, str2) -> str1.compareTo(str2));
메서드 참조
list.sort(String::compareTo);
String 객체의 compareTo 메서드를 참조하는 형태로 람다식을 메서드 참조로 변환할 수 있습니다.
특정 객체에 대한 인스턴스 메서드 참조 간단 요약
// 람다식
(x) -> obj.method(x)
// 메서드 참조
obj::method
3. 결론
람다식을 메서드 참조로 변환하면 코드가 더 간결하고 가독성이 높아집니다. 이를 통해 Java의 함수형 프로그래밍을 더 쉽게 활용할 수 있습니다. 메서드 참조는 람다식을 사용하여 함수형 인터페이스의 메서드를 구현할 때, 이미 정의된 메서드를 호출하는 방식으로 코드를 간단하게 바꿀 수 있게 해줍니다.
이와 같은 방식으로 람다식을 메서드 참조로 변환할 수 있으며, 코드의 가독성과 유지보수성을 높이는 데 도움이 됩니다.