Java
인터페이스의 default, static 키워드(Java8)
by BAYABA
2021. 10. 5.
- 개인공부 목적으로 작성한 글입니다.
- 아래 출처를 참고하여 작성하였습니다.
목차
- Intro
- default 키워드
2-1. 샘플 코드
- static 메소드
3-1. 샘플 코드
1. Intro
- Java에서 기존의 인터페이스는 상수와 추상 메소드만을 멤버로 가질 수 있었습니다.
- 그러나 Java8부터는 default 키워드를 사용해서 인터페이스에 메소드를 선언할 수 있게 되었습니다.
- 즉, default 키워드를 사용해 선언함으로써 인터페이스에 메소드의 구현부를 작성할 수 있게 되었습니다.
- 또한 Java8부터 인터페이스에 static 메소드를 선언할 수 있게 되었습니다.
2. default 키워드
2-1. 샘플 코드
인터페이스
public interface Calculator {
int add(int x, int y);
int sub(int x, int y);
default int multiple(int x, int y) {
return x * y;
}
}
구현체
- CalculatorImpl 구현체에서 multiple 메서드를 구현하지 않았지만, 인터페이스에 default 키워드로 구현이 되어있기 때문에 컴파일 오류가 나지 않고, 호출해서 사용할 수 있습니다.
- 주의할 점은 다중상속을 받을 경우 인터페이스 default 메소드 간에 Method 시그니처가 겹친다면 컴파일 에러가 납니다.
- 해결 방법은 인터페이스 간 겹치는 default Method를 구현체에서 오버라이딩하면 됩니다.
public class CalculatorImpl implements Calculator {
@Override
public int add(int x, int y) {
return x + y;
}
@Override
public int sub(int x, int y) {
return x - y;
}
}
public class Main {
public static void 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);
System.out.println(resultOfAdd);
System.out.println(resultOfSub);
System.out.println(resultOfMultiple);
}
}
//실행 결과
//8
//2
//15
3. static 메소드
- Java8부터 인터페이스에 static 메소드를 선언할 수 있습니다.
- 단, static 메소드는 구현체에서 오버라이딩 할 수 없습니다.
public interface Calculator {
int add(int x, int y);
int sub(int x, int y);
default int multiple(int x, int y) {
return x * y;
}
static void print(int value) {
System.out.println(value);
}
}
3-1. 샘플 코드
- static 메소드 사용시 주의할 점은, 아래 코드처럼 '인터페이스이름.메소드' 형태로 호출해야 합니다.
public class Main {
public static void 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
출처
- JAVA 8 변경 사항 - interface의 default 키워드와 static 메소드