반응형
오늘은 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
'Android 개발 > Java, Java8' 카테고리의 다른 글
Java에서 랜덤 함수를 이용해 난수 얻기 (0) | 2019.09.13 |
---|---|
Java, Android 에서 날짜 표현할 때 Calendar, Date 그리고 SimpleDateFormat (1) | 2018.12.11 |
Enum값에 대해서 알아보겠습니다 (0) | 2018.04.10 |
정규 표현식 (Regular Expression) 과 응용 사례를 정리해 보자 (1) | 2017.09.07 |
Math 클래스 의 반올림, 올림, 버림 등 자주 사용하는 메소드 정리 #Java (0) | 2017.04.09 |
Matcher 클래스와 Pattern Class로 정규 표현식을 활용해보자 (0) | 2017.03.22 |
Java 배열 및 ArrayList 를 Comparable과 Comparator 를 이용해 정렬하기 (0) | 2017.03.19 |
Bit 논리 연산과 시프트 연산 의 정리 (0) | 2017.03.16 |
Java Wrapper 클래스 를 정리해 보자 (0) | 2017.03.07 |
Java Map인 HashMap, TreeMap, LinkedHashMap 에 대해서 정리해 보자. (0) | 2017.02.12 |
댓글