언어/JAVA
[JAVA] JAVA 8 interface의 변경사항
steadyMan
2022. 6. 10. 00:54
자바 8 버전이 나온 지 오래됐지만 8 버전에서 생긴 interface의 변경사항에 대해 학습한 내용을 정리합니다.
default method
인터페이스의 메소드는 선언만 가능하고 구현은 불가능했지만 default 키워드를 추가하면
인터페이스 내부에서도 구현된 메소드를 선언할 수 있습니다.
public interface Calculator {
public int sum(int x, int y);
public int min(int x, int y);
// default method
public default int fac(int x, int y) {
return x * y;
}
}
default method는 상속하는 클래스에서 재정의가 가능하지만 하지 않아도 사용할 수 있으며 override가 강제되지 않습니다.
public class Cal implements Calculator{
@Override
public int sum(int x, int y) {
return x+y;
}
@Override
public int min(int x, int y) {
return x-y;
}
@Override
public int fac(int x, int y) {
return Calculator.super.fac(x, y);
}
}
default method의 이점
우연히 해당 내용을 학습할 때 경험한 이점이 있는데 spring 인터셉터를 추가하기 위해 WebMvcConfigurer를 상속받아
작업 중에 WebMvcConfigurer의 모든 메소드가 default method로 되어있었기 때문에 불필요한 override를 하지 않아도 되었던
경험이 있습니다.
하위 호환성에도 이점이 있을걸로 보입니다. 만약 interface에 메소드를 추가해야 하는 상황에 직면했고 해당 interface를 상속받은
클래스가 많다고 하면 문제가 발생할 수 있지만 default method로 처리하면 수정해야 하는 상황을 피할 수 있습니다.
static method
static method 는 구현체를 통하여 호출되지 않고 interface를 통해 직접 호출해야 하며 재정의가 불가능합니다.
public interface Calculator {
public static int div(int x, int y) {
return x / y;
}
}
public static void main(String[] args) {
Calculator.div(4, 2);
}
정리
default method
- interface에서 구현이 가능하다.
- 상속한 클래스에서 재정의가 가능하지만 강제되지 않는다.
static method
- interface에서 구현이 가능하다.
- 상속한 클래스에서 재정의가 불가능하며 interface를 통해 직접 호출해야한다.