함수형 인터페이스를 이용할 때 착각했던 점
정말 멍청했다. 모던 자바 인 액션 2번째 읽는건데 아무 생각없이 읽었었나 보다. 손너잘이 망각한 내 뇌를 리마인드 시켜줬다.
Predicate<Integer> p = (i) -> i % 2 == 0;
다음과 같고 이를 실행하기 위해서는 test
메서드를 사용한다. 나는 함수형 인터페이스를 특별 취급하여 생각했다. 이 또한 인터페이스인데 말이다. 내가 선언해준 식이 해당 test 추상 클래스 내부로 들어가는줄 알았다. 그런게 전혀 아닌데 말이다.
Comparator<Integer> c = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
};
위의 new Comparator는 익명 클래스다. 이게 왜 익명 클래스야? 그것은 @Override
를 보면 유추할 수가 있다. Predicate으로 설명해보겠다.
class Test implements Predicate<Boolean> {
@Override
public boolean test(Boolean a) {
return a;
}
}
Predicate<Boolean> p = new Predicate(); //인터페이스이므로 인스턴스 생성 불가능
Predicate<Boolean> p2 = new Test(); //가능
Predicate<Boolean> p3 = new Predicate<boolean>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
}; //이런식으로 익명 클래스를 사용!
위를 보면 왜 @Override
를 통해 유추할 수 있었는지 깨달을 수 있을 것이다. 이제 이런 익명 클래스로 익명 함수를 단순화 한 것이 람다 표현식이다. 이 정의는 3장 첫 문장이었는데 내가 제대로 이해를 못했던 것 같다.
Predicate<Boolean> p = (b) -> true;
이제 이런식으로 표현이 가능하게 된 것이다!!!! 참으로 멍청한 나...
함수형 인터페이스도 인터페이스인데 그것을 생각못하고 특별취급을 하고 있었다... 익명 클래스도 알고 있는 개념이고 Comparator를 통해 내내 사용해왔었는데 사실 알고있던게 아닌거였다. 속이 너무 시원하다. 이렇게 정확히 알고 갔으니 응용된 개념도 더 잘 이해할 수 있을 것 같다.
'공부 기록들 > 우테코' 카테고리의 다른 글
[모던 자바 인 액션 스터디] 4장 스트림 소개 (0) | 2021.03.14 |
---|---|
순차적 스트림, 병렬 스트림 그리고 findAny와 findFirst 에 대해 (0) | 2021.03.07 |
로또 구현 피드백 정리 (0) | 2021.03.01 |
[모던 자바 인 액션 스터디] 3장 람다 표현식 (0) | 2021.03.01 |
자동차 경주 1차 피드백 정리 (0) | 2021.02.11 |