개발/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에 인트값을 넣는데, 람다식이 아닌 방법으로 넣는 부분은 알아보고 다루기로 하겠다.