[Java] Design Pattern - Iterator ,For 반복문의 차이

2023. 8. 20. 21:48·JAVA-기초/Design Pattern
목차
  1. 🟰Iterator 패턴?
  2. 🟰Iterator의 장점? for을 놔두고 굳이 Iterator을 쓰는 이유?
  3. ⭐⭐⭐Iterator는 해당 객체의 구현에 의존하지 않는다.
  4. 🟰요약
728x90
반응형
SMALL

🟰Iterator 패턴?

📌어떠한 객체의 집합, 값의 집합을 하나씩 지정해서 순서대로 처리하는 패턴

📌반복하는 의미를 갖고 있다.

 

⏬이해를 돕기 위한 예시 코드

 

✅Book 객체(책장에 넣을 객체)

package bookshelf;

public class Book {
	private String name;

	public Book(String name) {
		this.name = name;
	}

	public String getName() {
		return name;
	}
}

✅ Iterator 역할을 구현할 인터페이스

package bookshelf;

import java.util.Iterator;

/***
 *  Iterator 역할을 만들어내는 인터페이스
 */
public interface Aggregate {
	public abstract Iterator<Book> createIterator();
}

✅BookShelf 책을 보관할 객체

package bookshelf;

import java.util.Iterator;

/***
 * Aggregate의 구현체
 * 실제로 책꽂이 안을 돌아다닐 Iterator를 생성하고 책꽂이를 관리하는 역할
 * @author Sunro
 *
 */
public class BookShelf implements Aggregate{
	
	
	private Book[] books;		//책의 집합
	private int last =0;		//마지막 책이 꽂힌 위치
	private int size;			//책장의 사이즈
	
	public BookShelf(int size) {
		books = new Book[size];
		this.size = size;
	}
	public Book getBook(int index) {
		if(index<size) return books[index];
		
		return null;
	}
	public int getLength() {
		return last;
	}
	
	//책꽂이에 책을 꽂는다.
	public void appendBook(Book book) {
		if(last< books.length) {
			this.books[last] = book;
			last++;
		}
		else {
			System.out.println("책장이 꽉 찼습니다!");
		}
	}
	
	
	
	@Override
	public Iterator<Book> createIterator() {
		return new BookShelfIterator(this);			//Iterator를 호출하기 위한 인터페이스 구현
	}
}

 

✅BookShelf 클래스에서 검색을 수행하는 클래스(Iterator를 상속받아 구현)

📌Iterator를 상속받은 경우 내부에 있는 미구현 클래스를 구현해주어야 한다.

package bookshelf;

import java.util.Iterator;

public class BookShelfIterator implements Iterator<Book> {
	
	private BookShelf bookShelf; //검색을 수행할 책꽂이
	private int index=0; //현재 처리할 책의 위치
	
	

	public BookShelfIterator(BookShelf bookShelf) {
		this.bookShelf = bookShelf;
	}

	@Override
	public boolean hasNext() {
		return index < bookShelf.getLength();
	}

	@Override
	public Book next() {
		Book book = bookShelf.getBook(index);
		index++;
		
		return book;
		
		
	}

}

 

✅완성된 책장 활용해보기(Main 클래스)

package bookshelf;

import java.util.Iterator;

public class library {
	public static void main(String[] args) {
		BookShelf bookShelf = new BookShelf(10);
		
		Book book1 = new Book("book1");
		Book book2 = new Book("book2");
		Book book3 = new Book("book3");
		
		bookShelf.appendBook(book1);
		bookShelf.appendBook(book2);
		bookShelf.appendBook(book3);
		
		System.out.println("현재 꽃혀있는 책 : " + bookShelf.getLength()+"권");
		
		Iterator<Book> it = bookShelf.createIterator();
		while(it.hasNext()) {
			Book book = (Book)it.next();
			System.out.println(book.getName());
		}
	}
	
	
}

 

 

🟰Iterator의 장점? for을 놔두고 굳이 Iterator을 쓰는 이유?

📌 Iterator는 하나씩 꺼내서 순차적으로 처리하는 과정을 구현과 분리할 수 있다.

 

⏬Iterator를 사용했을 때

📌Book의 메서드를 사용하지 않고 Iterator의 메서드를 사용하고 있다.

while (it.hasNext()) {
    Book book = (Book) it.next();
    System.out.println(book.getName());
}

⏬for문을 사용했을 때

📌book클래스의 메서드를 직접 호출하고 있다.

for (int i = 0; i < bookShelf.getLength(); i++) {
    System.out.println(bookShelf.getBook(i).getName());
}

 

⭐⭐⭐Iterator는 해당 객체의 구현에 의존하지 않는다.

BookShelf의 내용을 수정하더라도 BookShelf가 Iterator에 제대로 반환만 된다면 Main을 수정할 필요가 없다는 것이다.

 

 

🟰요약

📌Iterator 패턴은 어떠한 타입, 값의 집합을 순차적으로 갖고 와서 처리하는 방식

📌Iterator 인터페이스를 사용하는 경우는 요소를 순서대로 검색하는 경우

📌ConcreteIterator(구체적인 반복자) : Iterator가 결정한 인터페이스를 실제로 구현하고, 검색에 필요한 정보를 갖고 있어야 한다.

📌ConcreteAggregate(구체적인 집합체) : Aggregate역할을 결정한 인터페이스를 실제로 구현한다.

 

728x90
반응형
SMALL

'JAVA-기초 > Design Pattern' 카테고리의 다른 글

전략 패턴(Strategy Pattern): 동적으로 행위를 변경하는 유연한 설계 방법  (0) 2025.03.17
[Design Pattern / Java] Template Method패턴  (1) 2024.03.28
[Design Pattern / Java] Factory Method(공장처럼 찍어내는 인터페이스)  (0) 2024.03.22
[Design Pattern] - Adapter 패턴  (92) 2023.09.03
  1. 🟰Iterator 패턴?
  2. 🟰Iterator의 장점? for을 놔두고 굳이 Iterator을 쓰는 이유?
  3. ⭐⭐⭐Iterator는 해당 객체의 구현에 의존하지 않는다.
  4. 🟰요약
'JAVA-기초/Design Pattern' 카테고리의 다른 글
  • 전략 패턴(Strategy Pattern): 동적으로 행위를 변경하는 유연한 설계 방법
  • [Design Pattern / Java] Template Method패턴
  • [Design Pattern / Java] Factory Method(공장처럼 찍어내는 인터페이스)
  • [Design Pattern] - Adapter 패턴
공부하고 기억하는 공간
공부하고 기억하는 공간
IT 비전공자로 시작하여 훌륭한 개발자가 되기 위해 공부하고 있는 공간입니다. 틀린 내용이나 부족한 부분이 있으면 댓글로 알려주세요 바로 수정하겠습니다.
    250x250
  • 공부하고 기억하는 공간
    IT - railroad
    공부하고 기억하는 공간
  • 전체
    오늘
    어제
    • 분류 전체보기 (325) N
      • 면접 준비 (22) N
        • OS (6)
        • Spring Security (0)
        • Java (3)
        • DB (11) N
        • Network (3)
      • ElasticSearch (2)
      • Kafka (4)
      • Spring (22)
        • Spring Cloud (7)
        • Security6 (5)
        • JPA (12)
        • 프로젝트 리팩토링 회고록 (4)
        • Logging (8)
        • Batch (2)
      • Redis (17)
        • Redis 개념 (8)
        • Redis 채팅 (5)
        • Redis 읽기쓰기 전략 (1)
      • AWS (11)
      • 리눅스 (29)
        • 리눅스 마스터 2급 (5)
        • 네트워크(기초) (7)
        • 리눅스의 이해 (6)
        • 리눅스의 설치 (2)
        • 리눅스 운영 및 관리 (6)
      • JAVA-기초 (16)
        • JAVA기본 (11)
        • Design Pattern (5)
      • JSP (27)
        • JSP 기본 개념 (10)
        • JSP (1)
      • SQL (1)
      • TIL (36)
      • 문제 풀이 (2)
        • Programmers (9)
        • 백준 문제풀이 (28)
      • JavaScript (10)
      • HTML (17)
      • Ngrinder (1)
        • Ngrinder 문서 정리 (1)
  • 블로그 메뉴

    • 링크

    • 공지사항

    • 인기 글

    • 태그

      CSS
      JavaScript
      HTML
      자바
      리눅스
      JS
      redis
      백준
      JSP
      자바 알고리즘
      springsecurity
      Spring Data Redis
      Spring
      spring redis
      자바스크립트
      자바 반복문
      java
      리눅스마스터2급
      Springframework
      스프링프레임워크
      프로그래머스
      리눅스마스터2급정리
      레디스
      redis 채팅
      자바기초
      jsp기초
      자바 면접질문
      자바 면접
      Til
      jsp request
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    공부하고 기억하는 공간
    [Java] Design Pattern - Iterator ,For 반복문의 차이

    개인정보

    • 티스토리 홈
    • 포럼
    • 로그인
    상단으로

    티스토리툴바

    단축키

    내 블로그

    내 블로그 - 관리자 홈 전환
    Q
    Q
    새 글 쓰기
    W
    W

    블로그 게시글

    글 수정 (권한 있는 경우)
    E
    E
    댓글 영역으로 이동
    C
    C

    모든 영역

    이 페이지의 URL 복사
    S
    S
    맨 위로 이동
    T
    T
    티스토리 홈 이동
    H
    H
    단축키 안내
    Shift + /
    ⇧ + /

    * 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.