자바 객체지향 - 인터페이스
Written by 태인 on
호랑이가 오면 사과를 준다. 사자가 오면 바나나를 준다.
위 상황을 코드로 나타내보자.
Animal.java
public class Animal {
String name;
public void setName(String name) {
this.name = name;
}
}
Tiger.java
public class Tiger extends Animal {
}
Lion.java
public class Lion extends Animal {
}
ZooKeeper.java
public class ZooKeeper {
public void feed(Tiger tiger) {
System.out.println("feed apple");
}
public void feed(Lion lion) {
System.out.println("feed banana");
}
public static void main(String[] args) {
ZooKeeper zooKeeper = new ZooKeeper();
Tiger tiger = new Tiger();
Lion lion = new Lion();
zooKeeper.feed(tiger);
zooKeeper.feed(lion);
}
}
실행하면 feed apple과 feed banana가 나올 것이다. 그런데 지금은 호랑이와 사자밖에 없지만 동물들이 더 많아진다면 매번 feed 메소드를 추가해야 한다.
이를 해결하기 위해 인터페이스를 사용한다.
인터페이스 생성
기본적으로 인터페이스는 class가 아닌 interface로 만들어준다. Predator라는 인터페이스를 작성해보자.
public interface Predator {
}
predator 인터페이스에 다음과 같은 메소드를 추가해보자.
public interface Predator {
public String getFood();
}
그리고 Lion과 Tiger는 작성한 인터페이스를 구현하도록 해준다.
public class Tiger extends Animal implements Predator {
public String getFood() {
return "apple";
}
}
사자도
public class Lion extends Animal implements Predator {
public String getFood() {
return "banana";
}
}
인터페이스 구현은 implements를 사용한다.
그런다음 feed 메소드를 변경해준다.
public void feed(Predator predator) {
System.out.println("feed "+predator.getFood());
}
이렇게 하면 정상적으로 원하는 결과가 출력된다.
feed apple
feed banana
인터페이스의 필요성
동물의 개수만큼 feed메소드가 필요했던 기존 방식에서 인터페이스를 사용하면, 단 한개의 메소드로 구현이 가능하다. 또 ZooKeeper 클래스가 동물들의 종류와 상관없는 독립적인 클래스가 되었다.
댓글