커스텀한 String 클래스를 작성할 이유가 없는 것처럼, 기존의 표준 Functional Interface
를 다시 정의할 이유가 없습니다.
이름을 새로 지음으로서 약간의 추가적인 문맥을 더 넣어 줄 수 있기 때문에, 그렇게 하는 것이 매력적이게 보일 수 있습니다.
하지만 장기적으로 유지 보수를 하는 프로그래머들이 재정의 된 Functional Interface
와 표준 Functional Interface
가 뭐가 다른지 궁금해 할 수 있고, 혼란의 원인이 될 수 있습니다.
규칙을 어긴 코드
@FunctionalInterface
public interface MyInterface { // 규칙을 어긴 코드
double toDouble(int a);
}
@FunctionalInterface
public interface ExtendedBooleanSupplier { // 규칙을 어긴 코드
boolean get();
default boolean isFalse() {
return !get();
}
}
public class MyClass {
private int a;
public double myMethod(MyInterface instance){
return instance.toDouble(a);
}
}
규칙을 준수한 해결책
@FunctionalInterface
public interface ExtendedBooleanSupplier extends BooleanSupplier { // 규칙을 준수한 코드, java.util.function.BooleanSupplier을 상속하고 있습니다.
default boolean isFalse() {
return !getAsBoolean();
}
}
public class MyClass {
private int a;
public double myMethod(IntToDoubleFunction instance){
return instance.applyAsDouble(a);
}
}
If you like SONARKUBE, don’t forget to give me a star.