본문 바로가기
언어/JAVA

여러 인터페이스 구현, 인터페이스의 상속

by step 1 2021. 4. 19.
반응형
  • 자바의 인터페이스는 구현 코드가 없으므로 하나의 클래스가 여러 인터페이스는 구현 할 수 있음
  • 디폴트 메서드가 중복 되는 경우는 구현 하는 클래스에서 재정의 하여야 함
  • 여러 인터페이스를 구현한 클래스는 인터페이스 타입으로 형 변환 되는 경우 해당 인터페이스에 선언된 메서드만 사용 가능 함
package ch35;

public interface Buy {

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

public interface Sell {

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

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("hello");
	}
}
package ch35;

public class CustomerTest {

	public static void main(String[] args) {
		
		Customer customer = new Customer();
		customer.buy();
		customer.sell();
		customer.order();
		customer.hello();
		
		Buy buy = customer;
		buy.buy();
		buy.order();
		
		Sell seller = customer;
		seller.sell();
		seller.order();
	}
}

결과

 

인터페이스의 상속

  • 인터페이스 사이에도 상속을 사용할 수 있음
  • extends 키워드를 사용
  • 인터페이스는 다중 상속이 가능하고 구현 코드의 상속이 아니므로 타입 상속이라고 함

 

클래스 상속과 인터페이스 구현 함께 사용

  • 실무에서 프레임워크나 오픈소스와 함께 연동되는 구현을 하게 되면 클래스 상속과 인터페이스의 구현을 같이 사용하는 경우가 많음
  • 책이 순서대로 대여가 되는 도서관 구현
  • 책을 보관하는 자료 구조가 Shelf에 구현됨(ArrayList)
  • Queue 인터페이스를 구현함
  • Shelf 클래스를 상속 받고 Queue를 구현한다.
package ch35;

import java.util.ArrayList;


public class Shelf {

	protected ArrayList<String> shelf;
	
	public Shelf() {
		// 생성자 호출할때 멤버변수를 초기화 하는게 좋음
		shelf = new ArrayList<>();
	}
	
	public ArrayList<String> getShelf() {
		return shelf;
	}
	
	public int getCount() {
		return shelf.size();
	}
}

 

package ch35;

public interface Queue {

	void enQueue(String title);
	String deQueue();
	
	int getSize();
}

 

package ch35;

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() {
		// TODO Auto-generated method stub
		return getCount();
	}

}

 

package ch35;

public class BookShelfTest {

	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());
	}
}

 

결과

반응형