public interface MyInterface {
void doIt(); // 추상메소드 하나만 존재해야 함수형 인터페이스로 인정!
// 아래 메소드와는 관계x
static void printName() {
System.out.println("devjones");
}
default void printAge() {
System.out.println("11");
}
}
@FunctionalInterface
public interface MyInterface {
void doIt();
}
이걸 어떻게 쓰는지?
package main03;
public class Main {
public static void main(String[] args) {
// 익명 내부 클래스.
MyInterface mi = new MyInterface() {
@Override
public void doIt() {
System.out.println("hello");
}
};
}
}
위 코드를 다음과 같은 람다표현식을 바꿀 수 있다.
package main03;
public class Main {
public static void main(String[] args) {
MyInterface mi = () -> System.out.println("hello");
}
}
package main03;
public class Main {
public static void main(String[] args) {
MyInterface mi = new MyInterface() {
@Override
public void doIt() {
System.out.println("hello");
System.out.println("lambda");
}
};
}
}
두줄 이상일경우 아래와 같이...
package main03;
public class Main {
public static void main(String[] args) {
MyInterface mi = () -> {
System.out.println("hello");
System.out.println("lambda");
};
}
}
코드가 훨씬 깔끔해진 것을 확인할 수 있다.
다음은 메소드 호출이다.
package main03;
public class Main {
public static void main(String[] args) {
MyInterface mi = () -> System.out.println("hello");
// 실행
mi.doIt();
}
}
순수함수 (Pure Function)
* 사이드 이펙트가 없다. (함수 밖에 있는 값을 변경하지 않는다)
* 상태가 없다. (함수 밖에 있는 값을 사용하지 않는다)
package main03;
@FunctionalInterface
public interface MyInterface {
// void doIt();
int doIt(int number);
}
package main03;
public class Main {
public static void main(String[] args) {
MyInterface mi = (number) -> {
return number + 10;
};
System.out.println(mi.doIt(3));
}
}
아래는 함수형 인터페이스가 아니다.
package main03;
public class Main {
public static void main(String[] args) {
int baseNumber = 10;
MyInterface mi = new MyInterface() {
// int baseNumber = 10; 또는 여기
@Override
public int doIt(int number) {
return number;
}
};
}
}
'자바' 카테고리의 다른 글
람다 (0) | 2021.04.05 |
---|---|
자바에서 제공하는 함수형 인터페이스 (0) | 2021.04.05 |
빅오 표기법 (0) | 2021.04.03 |
[자바] 추상 클래스 예제 (0) | 2021.02.11 |
Factory Method 패턴 (0) | 2021.02.07 |