책장을 만들려고 한다. 책장은 책을 넣는 순서대로 꺼낼 수 있다.
실제로 책을 넣고 뺄 수 있는 BookShelf와 물건을 넣고 빼는 Shelf 클래스, 넣고 빼는 동작을 구현하게 할 Queue(인터페이스) 를 이용하여 책장을 만들어라
객체
가. BookShelf
나. Shelf
다. Queue
필드
가. 책 제목
메서드
가. 책을 넣기
나. 책을 빼기(넣은 순서대로)
다. 남은 책 갯수 세어주기
package ch08.sec02;
import java.util.ArrayList;
public class Shelf {
protected ArrayList<String> shelf; // 배열타입임
public Shelf() {
shelf = new ArrayList<String>();
}
public ArrayList<String> getShelf() {
return shelf;
}
public int getCount() {
return shelf.size();
}
}
먼저 Shelf 클래스를 만들어주었다.
눈여겨봐야할 것은 자료구조인데, 자료구조를 ArrayList로 하고 그 안에 들어갈 자료형을 String으로 하였다.
그리고 생성자를 통해서 필드에 ArrayList 객체를 을 대입해주었다.
getCount()를 통해서 shelf ArrayList에 남아있는 자료도 확인 할 수 있다.
package ch08.sec02;
public interface Queue {
void enQueue(String title); // 큐에 집어넣기
String deQueue(); // 큐에서 빼기
int getSize(); // 큐에 남은 갯수
}
Queue 인터페이스는 1. 집어넣는 메서드 2. 빼는 메서드 3. 남은갯수 메서드 구현을 요청하는 추상클래스를 선언해주었다.
package ch08.sec02;
public class BookShelf extends Shelf implements Queue{
@Override
public void enQueue(String title) {
shelf.add(title);
}
@Override
public String deQueue() {
return shelf.remove(0); // 처음에 추가한 것 FIFO
}
@Override
public int getSize() {
return getCount();
}
}
그리고 위의 두가지 클래스와 인터페이스를 상속 및 구현해준 BookShelf 클래스를 생성해주었다. 상속과 구현을 모두 적용한 클래스라는 점을 보자
상속 받은 shelf (ArrayList 타입) 을 통해서 Queue의 메서드 오버라이딩하였다.
package ch08.sec02;
public class BookShelfExample {
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()); // 5
System.out.println(bookQueue.deQueue()); // 토지 1
System.out.println(bookQueue.deQueue()); // 토지 2
System.out.println(bookQueue.deQueue()); // 토지 3
System.out.println(bookQueue.deQueue()); // 토지 4
System.out.println(bookQueue.deQueue()); // 토지 5
}
}
위 처럼 구현클래스를 작성해주었다.
먼저 BookShelf 객체를 Quere 인터페이스 타입으로 형변환 해주었다.
enQueue 에서 원하는 자료형인 String 자료형을 넣어서 add() 를 통해서 ArrayList 에 순서대로 쌓고, deQueue 를 통해서 remove(0) 을 해주었다. (들어간 순서대로 빼주는 것) 그리고 deQueue 로 반환된 값을 프린트 해주면 위와 같다.
ArrayList 의 활용방법에 대해 유의하자.