구현과 분리->재이용화

클래스 종류

📍Aggregate: 집합체를 나타내는 인터페이스
📍Iterator : 하나씩 나열하면서 검색을 실행하는 인터페이스
📍Book : 책을 나타내는 클래스
📍BookShelf : 서가를 나타내는 클래스
📍BookShelfIterator : 서가를 검색하는 클래스

Aggregate, Iterator 인터페이스 사용하는 이유

-> 결합을 약하게 해서 부품으로 재이용하기 쉽게 하기 위해서

📕Aggeregate 인터페이스

iterator 메소드 : 집합체에 대응하는 Iterator를 1개 작성
집합체에 대응하는 Ierator를 1개 작성하기 위한 것

public interface Aggregate{
	public abstract Iterator iterator(); 
}

📕Iterator 인터페이스

요소를 하나씩 나열하면서 루프 변수와 같은 역할

public interface Iterator{
	public abstract boolean hasNext();  // 다음 요소가 존재하는가 
    public abstract Object next(); //현재의 요소를 반환하면서 다음위치로 진행 
}

📕Book 클래스

책을 나타내는 클래스
1.책 이름을 생성자에서 인스턴스로 초기화
2.책 이름을 getName 메소드에서 얻는다.

public class Book{
	private string name;
    public Book(String name){
    	this.name=name;
    }
    public String getName(){
    	return name;
    
    } 
 }

📕BookShelf 클래스

서가를 나타내는 클래스 -> 집합체 로 나타내기 위해서 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 클래스의 검색을 실행할 수 있도록 반환 
    }
      
    
  
}

📕BookShelfIterator 클래스

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;    //저장한 책을 반환함 
   }

}

📕Main 클래스

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의 이름 출력 
       }

}
profile
Why.Not.Now

0개의 댓글

Powered by GraphCDN, the GraphQL CDN