J1Yun
ZU-TECHLOG
J1Yun
전체 방문자
였늘
μ–΄μ œ
  • πŸ“‘ Category (135)
    • Algorithm (61)
      • πŸ“š Concept (6)
      • πŸ“˜ Baekjoon Judge (53)
      • πŸ“— Programmers (2)
    • Computer Science (42)
      • πŸ”’ Operating System (14)
      • πŸ“‘ Network (15)
      • πŸ’Ύ Database (8)
      • 🧩 Design Pattern (4)
      • πŸ”‘ Security (1)
    • Activities (12)
      • 🦁 λ©‹μŸμ΄μ‚¬μžμ²˜λŸΌ 9κΈ° (6)
      • πŸ’» SWλ§ˆμ—μŠ€νŠΈλ‘œ 13κΈ° (6)
    • Infra (1)
      • ☁️ AWS (1)
    • Languages (1)
      • πŸ’™ Python (1)
    • Backend (7)
      • πŸ”΅ Django (4)
      • 🟒 Node.js (3)
    • Ect. (8)
      • πŸ’¬ Talk (0)
      • πŸ—‚οΈ 개발직ꡰ μ·¨μ—… μ€€λΉ„μžλ£Œ (8)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ
  • νƒœκ·Έ
  • λ°©λͺ…둝

곡지사항

인기 κΈ€

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

250x250
hELLO Β· Designed By μ •μƒμš°.
J1Yun

ZU-TECHLOG

[λ””μžμΈνŒ¨ν„΄] Iterator νŒ¨ν„΄ - μˆœμ„œλŒ€λ‘œ μ§€μ •ν•΄μ„œ μ²˜λ¦¬ν•˜κΈ°
Computer Science/🧩 Design Pattern

[λ””μžμΈνŒ¨ν„΄] Iterator νŒ¨ν„΄ - μˆœμ„œλŒ€λ‘œ μ§€μ •ν•΄μ„œ μ²˜λ¦¬ν•˜κΈ°

728x90
β€» Java μ–Έμ–΄λ‘œ λ°°μš°λŠ” λ””μžμΈ νŒ¨ν„΄ μž…λ¬Έ(μ˜μ§„λ‹·μ»΄) λ„μ„œλ₯Ό λ°”νƒ•μœΌλ‘œ μž‘μ„±λœ λ‚΄μš©μž…λ‹ˆλ‹€.

 

Iterator(μ΄ν„°λ ˆμ΄ν„°/반볡자) νŒ¨ν„΄ μ†Œκ°œ

  • μ§‘ν•© 객체의 λ‚΄λΆ€ ꡬ쑰λ₯Ό λ…ΈμΆœμ‹œν‚€μ§€ μ•Šκ³  λ°˜λ³΅ν•˜μ—¬ μˆœνšŒν•˜λŠ” 방법을 μ œκ³΅ν•œ νŒ¨ν„΄
  • μˆœμ„œλŒ€λ‘œ μ§€μ •ν•˜λ©΄μ„œ 전체λ₯Ό κ²€μƒ‰ν•˜λŠ” 처리

ꡐ재 발췌

 

예제 ν”„λ‘œκ·Έλž¨ - JAVA

- Aggregate μΈν„°νŽ˜μ΄μŠ€ (Aggregate.java)

  • 집합체λ₯Ό λ‚˜νƒ€λ‚΄λŠ” μΈν„°νŒ¨μ΄μŠ€
public interface Aggregate {
  public abstract Iterator iterator();
}

 

- Iterator μΈν„°νŽ˜μ΄μŠ€ (Iterator.java)

  • μš”μ†Œλ₯Ό μˆœμ„œλŒ€λ‘œ κ²€μƒ‰ν•΄κ°€λŠ” μΈν„°νŽ˜μ΄μŠ€
public interface Iterator {
  public abstract boolean hasNext();
  public abstract Object next();
}

 

- Book 클래슀 (Book.java)

  • 'μ±…'을 λ‚˜νƒ€λ‚΄λŠ” 클래슀
public class Book {
  private String name;
  public Book(String name) {
  this.name = name;
  }
  public String getName() {
    return name;
  }
}

 

- BookShelf 클래슀 (BookShelf.java)

  • ConcreteAggregate(ꡬ체적인 집합체)의 μ—­ν• 
  • Aggregate 역할이 κ²°μ •ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‹€μ œλ‘œ κ΅¬ν˜„
  • Iterator λ©”μ†Œλ“œ κ΅¬ν˜„μ„ 톡해 ConcreteIterator μ—­ν• μ˜ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜λŠ” 일
public class BookShelf implements Aggregate {
  private Book[] books;
  private int last = 0;
  public BookShelf(int maxSize) {
    this.books = new Book[maxSize];
  }
  public Book getBookAt(int index) {
    return books[index];
  }
  public void appendBook(Book book) {
    this.books[last++] = book;
  }
  public int getLength() {
    return last;
  }
  // Iterator λ©”μ†Œλ“œ κ΅¬ν˜„
  public Iterator iterator() {
    return new BookShelfIterator(this);
  }
}

 

- BookShelfIterator 클래슀 (BookShelfIterator.java)

  • ConcreteIterator(ꡬ체적인 반볡자)의 μ—­ν• 
  • Iteratorκ°€ κ²°μ •ν•œ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‹€μ œλ‘œ κ΅¬ν˜„
  • 검색에 ν•„μš”ν•œ 정보 κΈ°μ–΅
public class BookShelfIterator implements Iterator {
  private BookShelf bookShelf;
  private int index;
  public BookShelfIterator(BookShelf bookShelf) {
    this.bookShelf = bookShelf;
    this.index = 0;
  }
  // Iterator - hasNest λ©”μ†Œλ“œ κ΅¬ν˜„
  public boolean hasNext() {
    if (index < bookShelf.getLength()) {
      return true;
    } else {
      return false;
    }
  }
  // Iterator - next λ©”μ†Œλ“œ κ΅¬ν˜„
  public Object next() {
    Book book = bookShelf.getBookAt(index);
    index++;
    return book;
  }
}

 

- Main 클래슀 (Main.java)

public class Main {
  public static void main(String[] args) {
    BookShelf bookShelf = new BookShelf(4);
    bookShelf.appendBook(new Book("80μΌκ°„μ˜ 세계일주"));
    bookShelf.appendBook(new Book("μ„±μ„œ"));
    bookShelf.appendBook(new Book("신데렐라"));
    bookShelf.appendBook(new Book("킀닀리 아저씨"));
    Iterator it = bookShelf.iterator();
    while (it.hasNext()) {
      Book book = it.next();
      System.out.println(book.getName());
    }
  }
}

 

μž₯점과 단점

μž₯점

  • μˆœνšŒν•˜λŠ” λ°©λ²•λ§Œ μ•Œλ©΄ 될 뿐 μ§‘ν•© 객체의 λ‚΄λΆ€ κ΅¬μ‘°λŠ” μ•Œμ§€ λͺ»ν•΄λ„ 순회 κ°€λŠ₯
  • μˆœνšŒν•˜λŠ” Iterator의 μ±…μž„κ³Ό κ΅¬ν˜„λΆ€μ„ μ™„λ²½νžˆ 뢄리 

단점

  • 번거둭고 λ³΅μž‘ν•  수 있기 λ•Œλ¬Έμ— iterator μ‚¬μš©μ΄ μœ μš©ν•  지에 λŒ€ν•œ νŒλ‹¨μ΄ ν•„μš”

 

적용 사둀

  • μ—­μˆœνšŒ λ“± λ‹€μ–‘ν•œ 순회 방법이 ν•„μš”ν•œ 경우
  • μ§‘ν•© 객체의 ꡬ쑰가 변경될 κ°€λŠ₯성이 μžˆλŠ” 경우
728x90

'Computer Science > 🧩 Design Pattern' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[λ””μžμΈνŒ¨ν„΄] Factory Method νŒ¨ν„΄ - ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μΈμŠ€ν„΄μŠ€ μž‘μ„±ν•˜κΈ°  (0) 2022.09.06
[λ””μžμΈνŒ¨ν„΄] Template Method νŒ¨ν„΄ - ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ ꡬ체적으둜 μ²˜λ¦¬ν•˜κΈ°  (0) 2022.08.18
[λ””μžμΈνŒ¨ν„΄] Adapter νŒ¨ν„΄ - λ°”κΏ”μ„œ μž¬μ΄μš©ν•˜κΈ°  (0) 2022.08.18
    'Computer Science/🧩 Design Pattern' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ 글이닀
    • [λ””μžμΈνŒ¨ν„΄] Factory Method νŒ¨ν„΄ - ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ μΈμŠ€ν„΄μŠ€ μž‘μ„±ν•˜κΈ°
    • [λ””μžμΈνŒ¨ν„΄] Template Method νŒ¨ν„΄ - ν•˜μœ„ ν΄λž˜μŠ€μ—μ„œ ꡬ체적으둜 μ²˜λ¦¬ν•˜κΈ°
    • [λ””μžμΈνŒ¨ν„΄] Adapter νŒ¨ν„΄ - λ°”κΏ”μ„œ μž¬μ΄μš©ν•˜κΈ°
    J1Yun
    J1Yun
    개발 κ΄€λ ¨ 기술 및 곡뢀 λ‚΄μš© 기둝μž₯

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”