티스토리 뷰

JAVA

4. 메소드 레퍼런스

박중수 2015. 3. 29. 19:16

다른 코드에 보내려는 기능을 수행하는 메소드가 이미 존재할 수도 있다.


예를 들면 버튼을 클릭했을 때 이벤트 객체를 출력하려 한다면


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 로 표현이 가능하다.



★ 사용하려는 메소드가 여러 형태로 오버로드 되있을 수가 있다. 

    이 때에는 함수형 인터페이스의 메소드 파라미터를 따라간다.


thissuper도 사용이 가능하다.

   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
«   2025/06   »
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
글 보관함