관리 메뉴

SIMPLE & UNIQUE

인터페이스 java 본문

Java & Spring/Guide

인터페이스 java

착한코딩 2017. 8. 30. 17:24

인터페이스

  • 난 동물원의 사육사이다.
    육식동물이 들어오면 난 먹이를 던져준다.
    호랑이가 오면 사과를 던져준다.
    사자가 오면 바나나를 던져준다.

    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
    


    인터페이스를 작성

    Predator.java

    public interface Predator {
    
    }
    

    Tiger.java

    public class Tiger extends Animal implements Predator {
    
    }
    

    Lion.java

    public class Lion extends Animal implements Predator {
    
    }
    


    변경전

    public void feed(Tiger tiger) {
        System.out.println("feed apple");
    }
    
    public void feed(Lion lion) {
        System.out.println("feed banana");
    }
    

    변경후

    public void feed(Predator predator) {
        System.out.println("feed apple");
    }
    
    • tiger - Tiger 클래스의 객체, Predator 인터페이스의 객체
    • lion - Lion 클래스의 객체, Predator 인터페이스의 객체

    이제 어떤 육식동물이 추가되더라도 ZooKeeper는 feed 메소드를 추가할 필요가 없다. 다만 육식동물이 추가 될 때마다 다음과 같이 Predator 인터페이스를 구현한 클래스를 작성하기만 하면 되는 것이다.

    Crocodile.java

    public class Crocodile extends Animal implements Predator {
    }
    

    구현체(Tiger, Lion, Crocodile,...)는 늘어가지만 인터페이스(Predator)는 하나이다.

    동물별로 다른 과일를 출력

    Predator.java

    public interface Predator {
        public String getFood();
    }
    

    getFood 메소드 구현.

    Tiger.java

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

    Lion.java

    public class Lion extends Animal implements Predator {
        public String getFood() {
            return "banana";
        }
    }
    
    public class ZooKeeper {    
        public void feed(Predator predator) {
            System.out.println("feed "+predator.getFood());
        }
    }
    

    feed 메소드가 "feed apple" 을 출력하던 것에서 "feed "+predator.getFood()를 출력하도록 변경되었다. predator.getFood()를 호출하면 Predator 인터페이스를 구현한 구현체(Tiger, Lion)의 getFood() 메소드가 호출된다.

    feed apple
    feed banana

출처 : https://wikidocs.net/217

'Java & Spring > Guide' 카테고리의 다른 글

ServletResponse  (0) 2017.10.21
HttpServletRequest  (0) 2017.10.21
SSL 인증서  (0) 2017.08.29
static 개념  (0) 2017.08.23
public static void main(String[] args)  (0) 2017.08.23
Comments