- 클래스 혹은 프로그램이 제공하는 기능을 명시적으로 선언하는 역할
- 추상 메소드와 상수로만 이루어져 있다.(~ Java 7 까지만 유효) → 껍데기
- Java 8 부터는 디폴트 메소드와 정적 메소드가 포함된다.
- 구현된 코드가 없기 때문에 인터페이스로 인스턴스 생성할 수 없다.
Sample 1.
package interfaceex;
public interface Calc {
double PI = 3.14;
int ERROR = -99999999;
int add(int num1, int num2);
int substract(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
int square(int num);
}
- interface 에서는 public abstract 예약어를 명시적으로 쓰지 않아도 컴파일 과정에서 모든 메소드는 자동으로 추상 메소드로 변환된다.
- 변수도 마찬가지로 public static final 예약어를 쓰지 않아도 자동으로 상수로 변환된다.
package interfaceex;
public abstract class Calculator implements Calc {
@Override
public int add(int num1, int num2) {
// TODO Auto-generated method stub
return num1 + num2;
}
@Override
public int substract(int num1, int num2) {
// TODO Auto-generated method stub
return num1 - num2;
}
}
- 선언한 인터페이스를 클래스가 사용하는 것을 **'클래스에서 인터페이스를 구현한다(implements)'**라고 표현한다.
- 추상 메소드 times(), divide() 구현하지 않았기 때문에 Calculator 클래스는 추상 클래스가 된다.
package interfaceex;
public class CompleteCalc extends Calculator {
@Override
public int times(int num1, int num2) {
return num1 * num2;
}
@Override
public int divide(int num1, int num2) {
if(num2 != 0)
return num1 / num2;
else
return Calc.ERROR; // num2 가 0일 경우에 대한 오류 반환
}
// 해당 클래스에서 추가 구현한 메소드
public void showInfo() {
System.out.println("Calc 인터페이스를 구현하였음.");
}
@Override
public int square(int num) {
return num * num;
}
}