그러나 Java8부터는 default 키워드를 사용해서 인터페이스에 메소드를 선언할 수 있게 되었습니다.
즉, default 키워드를 사용해 선언함으로써 인터페이스에 메소드의 구현부를 작성할 수 있게 되었습니다.
또한 Java8부터 인터페이스에 static 메소드를 선언할 수 있게 되었습니다.
2. default 키워드
2-1. 샘플 코드
인터페이스
publicinterfaceCalculator{
intadd(int x, int y);
intsub(int x, int y);
defaultintmultiple(int x, int y){
return x * y;
}
}
구현체
CalculatorImpl 구현체에서 multiple 메서드를 구현하지 않았지만, 인터페이스에 default 키워드로 구현이 되어있기 때문에 컴파일 오류가 나지 않고, 호출해서 사용할 수 있습니다.
주의할 점은 다중상속을 받을 경우 인터페이스 default 메소드 간에 Method 시그니처가 겹친다면 컴파일 에러가 납니다.
해결 방법은 인터페이스 간 겹치는 default Method를 구현체에서 오버라이딩하면 됩니다.
publicclassCalculatorImplimplementsCalculator{
@Overridepublicintadd(int x, int y){
return x + y;
}
@Overridepublicintsub(int x, int y){
return x - y;
}
}
publicclassMain {
publicstaticvoidmain(String[] args) {
Calculator calc = new CalculatorImpl();
int x = 5;
int y = 3;
int resultOfAdd = calc.add(x, y);
int resultOfSub = calc.sub(x, y);
int resultOfMultiple = calc.multiple(x, y);
System.out.println(resultOfAdd);
System.out.println(resultOfSub);
System.out.println(resultOfMultiple);
}
}
//실행 결과//8//2//15
3. static 메소드
Java8부터 인터페이스에 static 메소드를 선언할 수 있습니다.
단, static 메소드는 구현체에서 오버라이딩 할 수 없습니다.
publicinterfaceCalculator {
intadd(int x, int y);
intsub(int x, int y);
defaultintmultiple(int x, int y) {
return x * y;
}
staticvoidprint(intvalue) {
System.out.println(value);
}
}
3-1. 샘플 코드
static 메소드 사용시 주의할 점은, 아래 코드처럼 '인터페이스이름.메소드' 형태로 호출해야 합니다.
publicclassMain{
publicstaticvoid main(String[] args) {
Calculator calc = new CalculatorImpl();
int x = 5;
int y = 3;
int resultOfAdd = calc.add(x, y);
int resultOfSub = calc.sub(x, y);
int resultOfMultiple = calc.multiple(x, y);
Calculator.print(resultOfAdd);
Calculator.print(resultOfSub);
Calculator.print(resultOfMultiple);
}
}
//실행 결과//8//2//15