메소드 시그니처와 상수만 정의하는 설계도 역할을 합니다.
오류는 있을지언정 동일한 이름과 동일한 형식으로 개발하도록 강제할 수 있습니다.
자바는 한 개의 부모 클래스만 상속받을 수 있지만 인터페이스는 여러개 가능합니다. e.g) implements car, vehicle
// car.java
public interface Car {
public int getSpeed();
public boolean accelerate();
}
// matiz.java
public class Matiz implements Car {
int speed;
@Override
public int getSpeed() {
return speed;
}
@Override
public boolean accelerate() {
speed += 20;
return false;
}
}
// Drive.java
public class Drive {
public static void main(String[] args) {
Car matiz = new Matiz();
drive(matiz, "Matiz");
}
private static void drive(Car car, String name) {
System.out.println(name);
for (int i = 0; i < 10; i++) {
car.accelerate();
System.out.println(i + ":" + car.getSpeed());
}
}
}
메소드를 설계할 때는 파라미터와 리턴형식만 설계하고 구현내용은 적지 않습니다.
변수를 설계할 때는 내용까지 적어줍니다.
interface Calculable {
double PI = 3.14;
int sum(int v1, int v2);
}
다양한 기능을 가지고 있는 클래스로 생성했지만 인스턴스의 형을 인터페이스로 한정함으로써,
필요한 기능만 사용하고 집중이 가능해집니다.
interface Calculable {
double PI = 3.14;
int sum(int v1, int v2);
}
interface Printable {
void print();
}
class DummyCal implements Calculable {
public int sum(int v1, int v2) {
return 3;
}
}
class RealCal implements Calculable, Printable {
@Override
public int sum(int v1, int v2) {
return v1 + v2;
}
@Override
public void print() {
System.out.println("This is RealCal!!");
}
}
public class InterfaceApp {
public static void main(String[] args) {
Calculable c = new RealCal();
System.out.println(c.sum(2, 1));
// c.print();
System.out.println(c.PI);
}
}