개발/JAVA
@FunctionalInterface annotation
보리ing
2019. 8. 12. 01:08
junit을 이용한 단위테스트를 공부하면서 다음과 같은 예제가 있었다.
@FunctionalInterface
public interface Scoreable {
int getScore();
}
여기서
@FunctionalInterface
어노테이션이 생소해서 찾아보았다.
기존 인터페이스는 선언만 하여
이를 상속받아 구현하였다.
하지만 jdk8부터 구현뿐만아니라 상속까지 가질 수 있게 되었는데
단일메소드를 선언하고 구현하려고 할때 위의 펑셔널인터페이스를 붙이고 사용할 수 있다.
사용한 예제를 보면
public class ScoreCollection {
private List<Scoreable> scores = new ArrayList<>();
public void add(Scoreable scoreable){
scores.add(scoreable);
}
public int arithmeticMean(){
int total = scores.stream().mapToInt(Scoreable::getScore).sum();
return total / scores.size();
}
}
socreCollection 인스턴스가 있을때
add(() ->5);
와같이 scores에 인트값을 넣는데, 람다식이 아닌 방법으로 넣는 부분은 알아보고 다루기로 하겠다.