ballqs 님의 블로그
[Java] 함수형 인터페이스 @FunctionalInterface 본문
오늘 정리할 내용은 함수형 인터페이스이다.
왜냐하면 람다식을 사용하려다 감이 안잡혀서 이래저래 알아본 결과
@FunctionalInterface 를 사용했더니 해결 가능해져서 이다.
우선 @FunctionalInterface 어노테이션 은 자바8에서 추가되었다.
함수형 인터페이스(Functional Interface) 는 추상 메서드가 딱 하나만 존재하는 인터페이스를 말한다.
※추상 메서드란? 구현이 안된 메서드이며 abstract 키워드를 앞에 붙이며 아래와 같이 사용
abstract void myMethod(String str);
그리고! 이러한 함수형 인터페이스에 작성된 추상 메서드를 람다식으로 접근하여 작성할수 있다.
간단한 예시로 살펴보자!
Interface Code
@FunctionalInterface
public interface OperatorInterface<T> {
double operate(T num1 , T num2);
}
사용하는 곳
// 제네릭부분을 클래스에 <T extends Number> 와 같이 선언했기에 아래와 같이 작성
public OperatorInterface<T> calculate(Character sign) {
switch (SignReplace(sign).name()) {
case "PLUS" :
return (num1, num2) -> num1.doubleValue() + num2.doubleValue();
case "MINUS" :
return (num1, num2) -> num1.doubleValue() - num2.doubleValue();
case "MULTI" :
return (num1, num2) -> num1.doubleValue() * num2.doubleValue();
case "DIVIDE" :
return (num1, num2) -> num1.doubleValue() / num2.doubleValue();
case "MOD" :
return (num1, num2) -> num1.doubleValue() % num2.doubleValue();
}
return null;
}
// enum 기능
public enum SignType {
PLUS , MINUS , MULTI , DIVIDE , MOD
}
OperatorInterface 반환데이터로 해놓고 람다를 적용해서 돌려보면 제대로 작동 되는 모습이 나온다.
★★단! 추상 메서드를 2개 이상 작성해두면 아래와 같이 에러가 발생한다.★★
어느 메서드를 호출해야 할지 몰라서 에러가 발생하는 것이다.
그럼에도 작성가능한 메서드가 있는데 default 과 static으로 작성하면 문제가 발생하지 않는다.
이렇게 @FunctionalInterface 에서만 알아보았다.
자바8이 대격변이긴 한가보다... 이런 기능까지 추가되어 있을줄이야...
'코딩 공부 > Java' 카테고리의 다른 글
[Java] 문제 풀다가 간접적 DFS 알고리즘 경험 (0) | 2024.07.30 |
---|---|
[Java] Stream이란? (0) | 2024.07.29 |
[Java] 람다식(Lambda)이란? (0) | 2024.07.25 |
[Java] 다형성(polymorphism) (0) | 2024.07.24 |
[Java] 파일 생성 시 기본 구조 분석 (0) | 2024.07.23 |