FunctionalInterface는 반드시 추상메서드를 한개만 가지고 있어야 한다. 그래야 람다식으로 표현할 때, 1대1로 메서드가 연결될 수 있기 때문이다.
하지만, Sorting하는 Comparator 함수형 인터페이스는 추상 메서드가 두개이다.
compare
equals
두가지 이고, 나머지는 다 default로, 인터페이스 자체적으로 메서드를 구현했다.
이 때, equals
메서드는 엄연히, 추상메서드이지 않나? 우리가 사용하는 람다식은 모두 compare
메서드이고, 이 equals
메서드는 엄연히 추상메서드인데 왜 문제가 일어나지 않을까 궁금했다.
이유는 아래의 공식 문서에서 찾을 수 있었다. https://docs.oracle.com/javase/8/docs/api/index.html?java/lang/FunctionalInterface.html
If an interface declares an abstract method overriding one of the public methods of java.lang.Object, that also does not count toward the interface's abstract method count since any implementation of the interface will have an implementation from java.lang.Object or elsewhere.
즉, equals 메서드는 Object에서 구현된 것이니, Functional Interface의 추상 메서드의 개수의 카운팅에 포함하지 않는다는 내용이었다.