Interface 사용 이유

클래스의 구현체가 몇 개가 될지 알 수 없을 경우 interface를 사용한다.

interface Predator {
    String getFood();
}

class Animal {
    String name;

    void setName(String name) {
        this.name = name;
    }
}

class Tiger extends Animal implements Predator{
    public String getFood() {
        return "apple";
    }
}

class Lion extends Animal implements Predator{
    public String getFood() {
        return "banana";
    }
}

class ZooKeeper {
    void feed(Predator predator) {  // 호랑이가 오면 사과를 던져 준다.
        System.out.println("feed"+predator.getFood());
    }
}

public class Sample {
    public static void main(String[] args) {
        ZooKeeper zooKeeper = new ZooKeeper();
        Tiger tiger = new Tiger();
        Lion lion = new Lion();
        zooKeeper.feed(tiger);  // feed apple 출력
        zooKeeper.feed(lion);  // feed banana 출력
    }
}

Predator interface에는 Tiger, lion 구현체들이 있다. “implements”라는 단어를 이용해 구현체임을 표시한다. 이렇게 하면 구현체를 통합한 predator 따른 feed만 구현하면 된다.