📍Aggregate: 집합체를 나타내는 인터페이스
📍Iterator : 하나씩 나열하면서 검색을 실행하는 인터페이스
📍Book : 책을 나타내는 클래스
📍BookShelf : 서가를 나타내는 클래스
📍BookShelfIterator : 서가를 검색하는 클래스
-> 결합을 약하게 해서 부품으로 재이용하기 쉽게 하기 위해서
iterator 메소드 : 집합체에 대응하는 Iterator를 1개 작성
집합체에 대응하는 Ierator를 1개 작성하기 위한 것
public interface Aggregate{
public abstract Iterator iterator();
}
요소를 하나씩 나열하면서 루프 변수와 같은 역할
public interface Iterator{
public abstract boolean hasNext(); // 다음 요소가 존재하는가
public abstract Object next(); //현재의 요소를 반환하면서 다음위치로 진행
}
책을 나타내는 클래스
1.책 이름을 생성자에서 인스턴스로 초기화
2.책 이름을 getName 메소드에서 얻는다.
public class Book{
private string name;
public Book(String name){
this.name=name;
}
public String getName(){
return name;
}
}
서가를 나타내는 클래스 -> 집합체 로 나타내기 위해서 Aggregate 인터페이스를 구현
BookShelfIterator가 검색할 서가.
public class BookShelf inplements Aggregate{
private Book[]books; //book들의 집합체
private int last=0;
public BookShelf(int maxsize){
this.books=new Book[maxsize]; //books라는 배열에 넣는다
}
public Book getBookAt(int index){ //index=현재 주목하고 있는 책
return books[index]; //books의 index번째 요소를 반환 한다.
}
public void appendBook(Book book){
this.books[last] = book; //마지막 인덱스에 책을 추가한다.
}
public int getLength(){
return last;
}
public Iterator iterator(){ //bookShelf의 iterator를 생성
return new BookShelfIterator(this); //bookShelf 클래스의 검색을 실행할 수 있도록 반환
}
}
BookShelf 클래스의 검색을 실행하는 Iterator 클래스
iterator 인터페이스 구현
public class BookShelfIterrator implements Iterator{
private BookShelf bookShelf; //객체 생성
private int index;
public BookShelfIterator(BookShelf bookShelf){
this.bookShelf=bookShelf; //초기화 작업
this.index=0;
}
//Iterator의 구체적 구현
public boolean hasNext(){
if(index < bookShelf.getLength()){ //다음책 있으면
return true;
} else {return false;} //없으면
}
public Object next(){ //현재 처리하고 있는 책을 반환하고 다음으로 진행
Book book= bookShelf.getBookAt(index); //index의 책을 book에 저장
index++; //다음 책을 가리킴
return book; //저장한 책을 반환함
}
}
public class Main{
public static void main(String[] args){
BookShelf bookShelf = new BookShelf(4);
//4사이즈의 Book 타입의 books[]배열이 만들어짐 = 책꽂이
bookShelf.appendBook(new Book("Around the world in 80 days")); //책꽂이에 책을 넣음 & 책을 넣을 수록 변수 last 증가
bookShelf.appendBook(new Book("Bible"));
bookShelf.appendBook(new Book("Cinderella"));
bookShelf.appendBook(new Book("Daddy-Long-Legs"));
//it를 가지고 책를 하나씩 꺼내옴 -> 메소드 hasNext(), next()사용.
Iterator it=bookShelf.iterator();//bookShelf의 요소를 가리킬 iterator()호출 //it는 만든 Iterator의 이름
while(it.hasNext()){ //다음 요소가 있으면
Book book=(Book)it.next(); //얻어온 책을 book에 넣고 다음 책을 가리킴
//형변환**next()= 리턴 값이 Book
System.out.println(book.getName()); //얻어온 book의 이름 출력
}
}