자바 공부 18 : 인터페이스

친환경 개발자
|2024. 2. 9. 16:10

인터페이스란?

interface Predator {
    void sleep();
    String getFood();
}​

 

클래스가 가져야 할 구조를 정의하는 추상 타입

클래스를 생성할 때마다 그 안에 공통적인 특성을 넣어야 할 때 효율적으로 사용할 수 있다.

 

 

인터페이스 쓰임새

 

- 여러 클래스가 같은 방식으로 동작하도록 강제하고 싶을 때

- 클래스를 사용하는 쪽과 구현하는 쪽을 구분하여 독립시키고 싶을 때

- 여러 클래스 사이에서 공통적인 특성을 추출하고 싶을 때

 

인터페이스 특징

 

- 인터페이스는 "규칙"이다!

- 메서드와 상수만 정의될 수 있고, 항상 public으로만 선언된다.

- 메서드도 메서드명과 반환타입 정도만 "규정" 할 수 있다.

 

 

 

 

디폴트 메서드

인터페이스를 구현하는 클래스들이 공통으로 사용할 수 있게 해준다.

인터페이스에 해당 메서드를 만들어두면, 각 클래스에서 구현하지 않아도 사용이 가능한 메서드.

 

스태틱 메서드

인터페이스 이름으로 직접 호출할 수 있는 메서드이다.

인터페이스명.스태틱메서드명  으로 호출 가능

 

 

 

 

 

 

 

따라 작성해보기

 

interface Predator {
    String getFood();     // 메서드 추가 (몸통이 없음)

    default void printFood() {      // 디폴트 메서드
        Systehttp://m.out.printf("my food is %s\n", getFood());
    }
    int LEG_COUNT = 4;  // 인터페이스 상수

    static int speed() {    // 스태틱 메서드
        return LEG_COUNT * 30;
    }
}



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 Day16 {
    public static void main(String[] args) {
        Zookeeper zookeeper = new Zookeeper();
        Tiger tiger = new Tiger();
        Lion lion = new Lion();

        tiger.printFood();
        zookeeper.feed(tiger);  //feed apple 출력

        lion.printFood();
        zookeeper.feed(lion);   // feed banana 출력

        Predator.speed();
        System.out.println(Predator.LEG_COUNT);
    }
}