언어/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를 하지 않아도 되었던

경험이 있습니다. 

WebMvcConfigurer interface

하위 호환성에도 이점이 있을걸로 보입니다. 만약 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를 통해 직접 호출해야한다.