Android 개발/Java, Java8

Java 8의 메서드 참조(Method Reference) 문법 이해하기

Developer88 2024. 11. 2. 16:36
반응형

오늘은 Java8의 메소드 참조 문법에 대해서 알아보겠습니다.

이 문법은 RxJava에서도 사용가능한데,

이를 사용하면 아주 간결한 표현이 가능해집니다.

 

1. 메소드 참조

이미 이름이 있는 메서드를 람다 표현식으로 사용할 수 있게 해주는 문법입니다.

메소드 참조 문법은 '클래스::메소드' 순서로 적어서 사용하는데요.

예를 들어, String 클래스의 정적 메소드인 toUpperClass는 아래와 같이 사용할 수 있습니다.

 

String::toUpperCase

 

 

그런데 잘 보면, 클래스와 메소드만 있고,

인자로 사용되는 변수명 자체가 사라진 것을 볼 수 있습니다.

 


보통 람다식에서라면 아래와 같이 변수명이 하나 필요한데요.

s -> s.toUpperCase()

 

메소드 참조를 이용하면,

컴파일러가 컨텍스트를 통해,

필요한 매개변수의 수와 타입을 추론해 줍니다.

따라서 매개변수의 수에 상관없이 메소드 참조를 사용할 수 있게 되는 것 이지요.

 

2. 람다식과의 비교를 통한 이해

메소드 참조가 아닌,

람다식을 이용한 사례와 비교해 보며 이해해 보겠습니다.

 

RxJava에서 람다식을 사용하면 아래와 같습니다.

 

Observable
    .just("김군", "박군", "이군")
    .map(name -> name.toUpperCase())
    .subscribe(name -> System.out.println(name));

 

이를 메소드 참조를 이용해, '클래스::메소드' 형식으로 바꾸면 아래와 같습니다.

아래와 같습니다.

 

Observable.just("김군", "박군", "이군")
    .map(String::toUpperCase)
    .subscribe(System.out::println);

 

 

메소드 참조는 문법자체가 복잡하지 않아 이해하기 쉽고요.

간결하면서도 이해하기 쉽게 해주므로 유지보수에도 도움이 됩니다.

 

RxJava 처럼 체이닝 해서 사용해야 해서,

스트림이 복잡하게 구성된 코드일수록,

더욱 그 가치가 빛나게 됩니다.

728x90