이 글은 개발 공부하는 "학생"의 글입니다. 참고용으로만 활용해주시길 바랍니다. 혹시 오류를 찾으셨다면 답글달아주시면 정말 감사드리겠습니다:)
공부 한 곳 : 자바 프로그래밍 입문(박은종 저)
정의 : 자바 프로그래밍 언어에서 클래스들이 구현해야 하는 동작을 지정하는데 사용되는 추상 자료형
package interfaceex;
public interface Calc {
// 변수이지만 컴파일 과정에서 상수로 인식됨
// public static final이 자동으로 붙게됨
double PI = 3.14;
int ERROR = -9999999;
// 추상 메서드
// public abstract가 자동으로 붙게됨
int add(int num1, int num2);
int substract(int num1, int num2);
int times(int num1, int num2);
int divide(int num1, int num2);
}
인터페이스를 클래스에서 사용하는 것
= 클래스에서 인터페이스를 구현(implements)하다.
인터페이스를 구현한 클래스는 2가지를 선택할 수 있다.
package interfaceex;
public abstract class Calculator implements Calc {
@Override // 상속받아서 구현
public int add(int num1, int num2) {
return num1 + num2;
}
@Override
public int substract(int num1, int num2) {
return num1 - num2;
}
}
위에서 인터페이스를 구현하여 추상클래스를 만들었다.
이제, 추상클래스를 상속(extends)받아 구체적인 클래스를 만들어본다.
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;
}
// CompleteCalc에서 추가로 구현한 메서드
public void showInfo() {
System.out.println("Calc 인터페이스를 구현하였습니다.");
}
}
이제, 위에서 구현해 놓은 CompleteCalc를 실행해보자
package interfaceex;
public class CalaulatorTest {
public static void main(String[] args) {
int num1 = 10;
int num2 = 5;
CompleteCalc calc = new CompleteCalc();
System.out.println(calc.add(num1, num2)); // 15
System.out.println(calc.substract(num1, num2)); // 5
System.out.println(calc.times(num1, num2)); // 50
System.out.println(calc.divide(num1, num2)); // 2
calc.showInfo(); // Calc 인터페이스를 구현하였습니다.
}
}
new CompleteCalc()
를 보면 알 수 있듯이, 구체적인 클래스인 CompleteCalc 클래스만 인스턴스를 생성할 수 있음
// 위의 코드에 이어서
// CompleteCalc calc = new CompleteCalc(); 위의 구현체
Calc newCalc = calc;
=> 인터페이스를 구현한 클래스가 있을 때, 그 클래스는 해당 인터페이스형으로 묵시적 형 변환이 이루어지며, 형 변환되었을 때 사용할 수 있는 메서드는 인터페이스에서 선언한 메서드 뿐이다!
=> Calc에는 showInfo()
는 없음을 확인할 수 있다.
public static final
, public abstract
를 안써도 자동으로)implements
로 수행한다.