같은 body, 다른 호출 계약

parameter 모양이 비슷해도 interface 의미와 method가 달라진다.

Predicate<String>

test

boolean

Function<String,Boolean>

apply

boxed Boolean

Callable<Boolean>

call

checked Exception 가능

Supplier<Boolean>

get

checked Exception 없음
선택값의 흐름과 실패 계약을 기준으로 고른다.

핵심: 람다를 받을 수 있다는 이유만으로 타입을 서로 바꾸지 않는다.