티스토리 뷰
다른 코드에 보내려는 기능을 수행하는 메소드가 이미 존재할 수도 있다.
예를 들면 버튼을 클릭했을 때 이벤트 객체를 출력하려 한다면
button.setOnAction(event->System.out.println(event));
이렇게 할 수도 있다.
하지만 메소드 레퍼런스를 이용해 더 간략히 명시할 수 있다.
button.setOnAction(System.out::println);
이렇게 표현할 수 있다.
메소드 레퍼런스에 대해 설명하자면 메소드 레퍼런스는 대표적으로 세가지로 나뉜다
1. 객체::인스턴스 메소드
2. 클래스::static 메소드명
3. 클래스::인스턴스 메소드명
1번의 객체::인스턴스 메소드의 예를 들자면
text -> System.out.println(text);
라는 람다 표현식이 있다. 이는
System.out::println 으로 표현가능하다
맨 위의 예제가 이와 같다.
2번의 클래스::static 메소드명 으로는
obj -> String.valueOf(obj);
를 메소드 레퍼런스로 표현한다면
String::valueOf 로 표현이 가능하다.
3번의 클래스::인스턴스 메소드명 은
(first, second)->first.equals(second);
를 메소드 레퍼런스로 표현하면
String::equals 로 표현이 가능하다.
★ 사용하려는 메소드가 여러 형태로 오버로드 되있을 수가 있다.
이 때에는 함수형 인터페이스의 메소드 파라미터를 따라간다.
★ this와 super도 사용이 가능하다.
this::equals 는 x->this.equals(x); 와 같다
★ 이너클래스에서는 바깥 클래스의 this와 super를 사용하려면
EnclosingClass.this::메소드명 으로 사용이 가능하다.
'JAVA' 카테고리의 다른 글
6. 변수 유효범위 (0) | 2015.03.29 |
---|---|
5. 생성자 레퍼런스 (0) | 2015.03.29 |
3. 함수형 인터페이스 (0) | 2015.03.29 |
2. 람다 표현식 (0) | 2015.03.29 |
1. 왜 람다 인가? (0) | 2015.03.29 |
- Total
- Today
- Yesterday
- 리액트
- 컴퓨터 시간
- 자바 성능
- 자료구조
- 성능
- 람다
- 프로세서
- Docker
- 날짜
- Swift 2.0
- Java8
- opensource
- Jackson
- Clojure
- 클로저
- Java
- gitlab
- 퍼포먼스
- RAMDA
- 시간
- 코어
- 성능개선
- javascript
- 자바
- 메모리
- Stream
- rambda
- react
- json
- 알람
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |