프로그래밍 언어/JAVA(자바) 응용

35.인터페이스 구현, 인터페이스 상속

lroot 2022. 5. 25. 14:19
728x90
반응형

여러 인터페이스 구현

- 자바의 인터페이스는 구현 코드가 없으므로 하나의 클래스가 여러 인터페이스는 구현할 수 있음

- 디폴트 메서드가 중복되는 경우 구현하는 클래스에서 재정의 하여야 함

- 여러 인터페이스를 구현한 클래스는 인터페이스 타입으로 형 변환되는 경우 해당 인터페이스에 선언된 메서드만 사용 가능함

 

예제

- Buy.java

public interface Buy {
void buy();

default void order() {
System.out.println("buy order");
}
}

- Sell.java

public interface Sell {

void sell();

default void order() {
System.out.println("sell order");
}

}

 

 

- Customer.java

public class Customer implements Buy,Sell{

@Override
public void sell() {

System.out.println("Customer sell");
}

@Override
public void buy() {

System.out.println("Customer buy");
}

@Override
public void order() {
System.out.println("customer order");
}

public void hello() {
System.out.println("customer hello");
}

}

 

- Test.java

public class Test {

public static void main(String[] args) {

Customer customer = new Customer();

customer.buy();
customer.sell();
customer.order();
customer.hello();

Buy buyer = customer;
buyer.buy();
buyer.order();

Sell sell = customer;
sell.sell();
sell.order();
}

}

 

인터페이스의 상속

- 인터페이스 사이에도 상속을 사용할 수 있음

- extends 키워드를 사용

- 인터페이스는 다중 상속이 가능하고 구현 코드의 상속이 아니므로 타입 상속이라고 함

 

클래스 상속과 인터페이스 구현 함께 쓰기

- 실무에서 프레임워크나 오픈소스와 함께 연동되는 구현을 하게 되면 클래스 상속과 인터페이스의 구현을 같이 사용하는 경우가 많음

- 예

1. 책이 순서대로 대여가 되는 도서관 구현

2. 책을 보관하는 자료 구조가 Sehlf에 구현됨 (ArrayList)

3. Queue 인터페이스를 구현함

4. Sehlf 클래스를 상속 받고 Queue를 구현한다.

 

예제

- Shelf.java

ublic class Shelf {

protected ArrayList<String> shelf;

public Shelf() {
shelf = new ArrayList<String>();
}

public ArrayList<String> getShelf(){
return shelf;
}

public int getCount() {
return shelf.size();
}

}

 

- Queue.java(interface)

public interface Queue {

void enQueue(String title);
String deQueue();

int getSize();

}

 

- BookShelf.java

public class BookShelf extends Shelf implements Queue{

@Override
public void enQueue(String title) {
shelf.add(title);

}

@Override
public String deQueue() {

return shelf.remove(0);
}

@Override
public int getSize() {

return getCount();
}

}

 

- Test.java

public class Test {

public static void main(String[] args) {

Queue bookQueue = new BookShelf();
bookQueue.enQueue("해리포터1");
bookQueue.enQueue("해리포터2");
bookQueue.enQueue("해리포터3");
bookQueue.enQueue("해리포터4");
bookQueue.enQueue("해리포터5");

System.out.println(bookQueue.getSize());
System.out.println(bookQueue.deQueue());
System.out.println(bookQueue.deQueue());
System.out.println(bookQueue.deQueue());
System.out.println(bookQueue.deQueue());
System.out.println(bookQueue.deQueue());

}

}