반응형
본 내용은 라울-게이브리얼 우르마, 마리오 푸스코, 앨런 마이크로프트의 "모던 자바 인 액션" 책을 보고 정리한 내용입니다. 저작권 보호를 위해 책의 내용은 요약되었습니다.
메서드 참조
- 메서드 참조는 람다 표현식을 간결하게 표현하는 방법으로, 메서드의 참조를 전달하거나 사용하여 람다 표현식을 대체할 수 있으며, 코드를 더 읽기 쉽고 유지보수하기 쉽게 만들어준다.
- 주로 함수형 인터페이스를 사용하는 컨텍스트에서 사용된다.
메서드 참조 방법
1. 정적 메서드 참조
정적 메서드를 참조할 때 사용한다.
예시) Integer 클래스의 parseInt 메서드 참조
// 람다표현식
ToIntFunction<String> stringToInt1 = (String s) -> Integer.parseInt(s);
System.out.println(stringToInt1.applyAsInt("10")); // 출력 : 10
// 메서드 참조
ToIntFunction<String> stringToInt2 = Integer::parseInt;
System.out.println(stringToInt2.applyAsInt("20")); // 출력 : 20
2. 다양한 형식의 인스턴스 메서드 참조 (매개변수의 메서드 참조)
메서드 참조를 이용하여 람다 표현식의 파라미터로 전달할 수 있다.
예시) 영어를 대문자로 변환
// 람다표현식
Function<String, String> toUpper1 = (String s) -> s.toUpperCase();
System.out.println(toUpper1.apply("hi")); // 출력 : HI
// 메서드 참조
Function<String, String> toUpper2 = String::toUpperCase;
System.out.println(toUpper2.apply("hello")); // 출력 : HELLO
3. 기존 객체의 인스턴스 메서드 참조(인스턴스 메서드 참조)
람다 표현식에서 현존하는 외부 객체의 메서드를 호출할 때 사용한다. 비공개 헬퍼 메서드를 정의한 상황에서 유용하게 활용할 수 있다.
예시) 문자열의 시작 문자를 찾음
String str = "Start";
// 람다표현식
Predicate<String> start1 = (String s) -> str.startsWith(s);
System.out.println(start1.test("S")); // 출력 : true
// 메서드 참조
Predicate<String> start2 = str::startsWith;
System.out.println(start2.test("H")); // 출력 : false
생성자 참조
클래스명과 new 키워드를 이용하여 기존 생성자의 참조를 만들 수 있다.
예시) 10, 20 좌표의 Point 객체 생성
class Point {
private int x, y;
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
BiFunction<Integer, Integer, Point> pointConstructor = Point::new; // new 키워드를 사용하여 객체 생성
Point newPoint = pointConstructor.apply(10, 20); // (10, 20) 좌표의 Point 객체 생성
반응형
'Java' 카테고리의 다른 글
[자바8] 스트림 활용 (2) | 2024.01.22 |
---|---|
[자바8] 스트림 (0) | 2023.12.30 |
[자바 8] 함수형 인터페이스 (0) | 2023.09.24 |
[자바 8] 람다 표현식 (0) | 2023.09.18 |
[자바 8] 동작 파라미터화 (0) | 2023.09.06 |