반응형

 내용은 라울-게이브리얼 우르마, 마리오 푸스코, 앨런 마이크로프트의 "모던 자바 인 액션" 책을 보고 정리한 내용입니다. 저작권 보호를 위해 책의 내용은 요약되었습니다.

 

메서드 참조

  • 메서드 참조는 람다 표현식을 간결하게 표현하는 방법으로, 메서드의 참조를 전달하거나 사용하여 람다 표현식을 대체할 수 있으며, 코드를 더 읽기 쉽고 유지보수하기 쉽게 만들어준다.
  • 주로 함수형 인터페이스를 사용하는 컨텍스트에서 사용된다.

메서드 참조 방법

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

+ Recent posts