Hello

Java 함수형 인터페이스

by 볼빵빵오춘기

함수형 인터페이스

  • 단 하나의 추상 메서드만 선언된 인터페이스이다.
더보기

⇒ @FunctionalInterface 어노테이션을 붙여주는 것이 좋다.

⇒ why? 그러면 어노테이션이 붙음으로써 함수형인터페이스를 올바르게 작성했는지 컴파일러가 확인해준다.


⇒ 왼쪽 코드를 구현하면 오른쪽 클래스처럼 된다.

⇒ 왼쪽코드는 익명클래스를 구현했고 클래스를 선언한 것이고, 객체생성 이렇게를 동시에 한 것이다.


⇒ 따라서 그전에 obj.max(3,5) 를 사용하였을땐 에러였지만 변경후에는 사용가능하다.

  • 함수형 인터페이스 타입의 참조변수로 람다식을 참조할 수 있다.
    단, 함수형 인터페이스의 메서드와 람다식의 매개변수 개수와 반환타입이 일치해야 한다.
    즉, 함수형인터페이스는 람다식을 다루기위해 사용하는 것이다.

 

예제 코드

예제 코드

더보기
public class Try {
	
	public static void main(String[] args) {

		// 람다식 사용전 코드 start
		Myfunction f = new Myfunction() {
			public int max(int a, int b) {
				return a>b ? a: b;
			}
		};
		// 람다식 사용전 코드 end		

		int value = f.max(3,5);
		System.out.println(value);
		
	}

}

@FunctionalInterface 
// 이 어노테이션이 붙으면 단 하나의 추상 메서드만 가져야
interface Myfunction{
//	public abstract int max(int a, int b); // public abstract 생략가능 
	int max(int a, int b);
}

⇒ 람다식 사용전 코드start ~ end 코드를 람다식을 이용해 아래와 같이 변경가능하다.

// 람다식을 다루기 위한 참조변수의 타입은 함수형 인터페이스로 한다. 
Myfunction f = (a,b) -> a > b ? a : b; // 람다식(익명객체)

예제

더보기

 익명 객체를 람다식으로 대체하였다.

 

함수형 인터페이스 타입의 매개변수, 반환타입

함수형 인터페이스 타입의 매개변수

함수형 인터페이스 타입의 반환타입

 

예제 코드

더보기
public class Try {
	
	static void execute(MyFunction f) { // 매개변수의 타입이 MyFunction인 메서드
		f.run();
	}

	static MyFunction getMyFunction() { // 반환 타입이 MyFunction인 메서드 
		MyFunction f = () -> System.out.println("f3.run()");
		return f;
	}
	
	public static void main(String[] args) {
		// 람다식으로 MyFunction의 run()을 구현
		MyFunction f1 = ()-> System.out.println("f1.run()");

		MyFunction f2 = new MyFunction() {  // 익명클래스로 run()을 구현
			public void run() {   // public을 반드시 붙여야 함
				System.out.println("f2.run()");
			}
		};

		MyFunction f3 = getMyFunction();

		f1.run();
		f2.run();
		f3.run();

		execute(f1);
		execute( ()-> System.out.println("run()") );
		
	}

}

@FunctionalInterface
interface MyFunction {
	void run();  // public abstract void run();
}

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기