728x90
반응형
SMALL
여러 인터페이스 구현
- 자바의 인터페이스는 구현 코드가 없으므로 하나의 클래스가 여러 인터페이스를 구현할 수 있습니다. (자바에서 클래스는 다중 상속이 가능하지 않습니다. - Diamond Problem)
- 디폴트 메서드가 중복되는 경우는 구현하는 클래스에서 재정의 하여야 합니다.
- 여러 인터페이스를 구현한 클래스는 인터페이스 타입으로 형 변환되는 경우 해당 인터페이스에 선언된 메서드만 사용 가능합니다.
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("hello");
}
}
CustomerTest.java
public class CustomerTest {
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 seller = customer;
seller.sell();
seller.order();
}
}
출력 결과
customer buy
customer sell
customer order
hello
customer buy
customer order
customer sell
customer order
인터페이스의 상속
- 인터페이스 사이에도 상속을 사용할 수 있습니다.
- extends 키워드를 사용합니다.
- 인터페이스는 다중 상속이 가능하고 구현 코드의 상속이 아니므로 타입 상속이라고 합니다.
X.java
public interface X {
void x();
}
Y.java
public interface Y {
void y();
}
MyInterface.java
public interface MyInterface extends X, Y { // void x()와 void y()를 모두 선언하겠다는 의미
void myMethod();
}
MyClass.java
public class MyClass implements MyInterface {
@Override
public void x() {
System.out.println("x()");
}
@Override
public void y() {
System.out.println("y()");
}
@Override
public void myMethod() {
System.out.println("myMethod()");
}
}
MyClassTest.java
public class MyClassTest {
public static void main(String[] args) {
MyClass mClass = new MyClass();
X xClass = mClass;
xClass.x();
Y yClass = mClass;
yClass.y();
MyClass iClass = mClass;
iClass.x();
iClass.y();
iClass.myMethod();
}
}
클래스 상속과 인터페이스 구현 함께 쓰기
- 실무에서 프레임워크나 오픈소스와 함께 연동되는 구현을 하게 되면 클래스 상속과 인터페이스의 구현을 같이 사용하는 경우가 많습니다.
- 책이 순서대로 대여가 되는 도서관 구현
- 책을 보관하는 자료 구조가 Shelf에 구현됩니다. (ArrayList)
- Queue 인터페이스를 구현합니다. (FIFO)
- Shelf 클래스를 상속받고 Queue를 구현합니다.
Shelf.java
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();
}
}
Queue.java
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();
}
}
BookShelfTest.java
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());
}
}
출력 결과
5
책 1
책 2
책 3
책 4
책 5
728x90
반응형
LIST
'Java' 카테고리의 다른 글
[JAVA] 자바 - Object 클래스의 메서드 활용 (0) | 2021.12.14 |
---|---|
[JAVA] 자바 - Object 클래스 - 모든 클래스의 최상위 클래스 (0) | 2021.12.14 |
[JAVA] 자바 - 인터페이스의 여러가지 요소 (0) | 2021.12.03 |
[JAVA] 자바 - 인터페이스가하는 일과 다형성 구현 (0) | 2021.12.03 |
[JAVA] 자바 - 인터페이스(interface) (0) | 2021.12.01 |