티스토리 뷰

//MyConsumer.java
@FunctionalInterface
public interface MyConsumer {
    void consume(int i);
}
//Main.java
public class Main {
    public static void main(String[] args) {
        MySupplier s = new MySupplier() {
            @Override public String supply() { return "Hello World";}
        };
    }
}

위의 Main 클래스를 익명 메소드를 활용하여 간결하게 표현할 수 있다.

//Main.java
public class Main {
    public static void main(String[] args) {
        MySupplier s = () -> return "Hello World";
    }
}

MyMapper 인터페이스를 정의한다.

//MyMapper.java
@FunctionalInterface
public interface MyMapper {
    int map(String s);
}
//Main.java
public class Main {
    public static void main(String[] args) {
        MySupplier s = () -> "Hello World";
        MyMapper m = (str) -> str.length();
        //MyConsumer c = i -> System.out.println(i);
        MyConsumer c = i -> System.out::println; //메소드 레퍼런스를 사용
        MyRunnable r = () -> c.consume(m.map(s.supply()));
        r.run();
    }
}

메소드 레퍼런스를 사용하는 경우

  • 최종적으로 적용될 메소드의 레퍼런스를 지정해주는 표현방식이다.
  • 람다 표현식에서 입력되는 값을 변경 없이 바로 사용할 때 사용할 수 있다. 즉 매개변수의 변경이 불가하다.
    즉, 입력값을 변경하지 말라는 표현방식이기도 하다.
  • 개발자의 개입을 차단함으로써 안전성을 얻을 수 있다.
728x90
반응형
댓글
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함