2014년 7월 30일 수요일

함수형 인터페이스(Functional Interface,@FunctionalInterface),마커인터페이스(Marker Interface)

함수형 인터페이스(Functional Interface,@FunctionalInterface),마커인터페이스(Marker Interface)

자바에서 마커인터페이스(marker interface)는 구현해야 되는 추상메소드가 없는 인터페이스를 의미한다. 단지 그 인터페이스를 구현했다고 기술한 클래스에 어떤 의미를 부여하기 위한것이다.
그리고 추상메소드가 하나뿐인 인터페이스를 Functional Interface라고 한다.

- java.lang.Runnable 함수형 인터페이스 이다.(void run() 추상메소드 하나 있다.)
- ActionListener interface역시 함수형 인터페이스이다.(actionPerformed() 추상메소드 하나  있다.)
- 이러한 함수형 인터페이스의 인스턴스를 생성하기 위해 익명 클래스등을 주로 사용했지만 람다식을 이용하면 아주 편하다.
- @FunctionalInterface 어노테이션은 JAVA8에서 추가되었으며 함수형 인터페이스 임을 나타낸다.

Runnable 인터페이스의 인스턴스를 람다식을 이용하여 아래처럼 얻을 수 있다.

Runnable r = () -> System.out.println("oraclejava community");

쓰레드를 생성할 때 아래처럼 람다식을 이용할 수도 있다.

new Thread(
    () -> System.out.println("oraclejava community")
).start();


[예제]

package onj;

//@FunctionalInterface
interface OnjInterface2 { 
    public void work(); 
}

public class FInterfaceTest {
static void execute(OnjInterface2 worker) {
worker.work(); 
}
public static void main(String[] args) {
execute(new OnjInterface2() {
@Override
public void work() {
System.out.println("Woking... oraclejava community");
}
});
execute( ()->System.out.println("Woking... oraclejava community"));
}
}



[결과]

Woking... oraclejava community
Woking... oraclejava community



댓글 없음:

댓글 쓰기