μ΄ν°λ μ΄ν° ν¨ν΄μ΄λ?
μ΄ν°λ μ΄ν°λ₯Ό μ¬μ©νμ¬ μ»¬λ μ μ μμλ€μ μ κ·Όνλ λμμΈ ν¨ν΄μ΄λ€. ν΄λΉ ν¨ν΄μ ν΅ν΄ μ¬λ¬ κ°μ§ μλ£κ΅¬μ‘°μ μκ΄μμ΄ μ΄ν°λ μ΄ν°λΌλ νλμ μΈν°νμ΄μ€λ‘ μνκ° κ°λ₯νλ€.
μμ λ₯Ό ν΅ν΄ μ΄λ»κ² ꡬννλμ§ μμ보μ.
μμ μ¬μ§κ³Ό κ°μ κ΅¬μ‘°λ‘ λμ΄μκ³ , μλμ κ°μ΄ μ½λλ₯Ό ꡬννλ€.
public interface Aggregate {
Iterator createIterator();
}
public class Book {
private String name;
public Book(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class BookShelf implements Aggregate {
private Book[] books;
private int last = 0;
public BookShelf(int size) {
books = new Book[size];
}
public Book getBook(int index) {
return books[index];
}
public int getLength() {
return last;
}
public void appendBook(Book book) {
if (last >= books.length) {
System.out.println("full");
return;
}
this.books[last] = book;
last++;
}
@Override
public Iterator createIterator() {
return new BookShelfIterator(this);
}
}
public class BookShelfIterator implements Iterator {
private BookShelf bookShelf;
private int index = 0;
public BookShelfIterator(BookShelf bookShelf) {
this.bookShelf = bookShelf;
}
@Override
public boolean hasNext() {
return index < bookShelf.getLength();
}
@Override
public Object next() {
Book book = bookShelf.getBook(index);
index++;
return book;
}
}
public class Main {
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 iterator = bookShelf.createIterator();
while (iterator.hasNext()) {
Book book = (Book)iterator.next();
System.out.println(book.getName());
}
}
}
Aggregate μΈν°νμ΄μ€λ Iteratorλ₯Ό μμ±νλ μν μ νλ μΈν°νμ΄μ€μ΄λ€.
BookShelf ν΄λμ€λ μ± κ½μ΄ κ°μ²΄μ΄λ€. Aggregateλ₯Ό ꡬννλ ꡬν체μ΄κΈ°λ νλ€.
BookShelfIterator ν΄λμ€λ Iteratorλ₯Ό μννκΈ° μν΄ Iterator μΈν°νμ΄μ€λ₯Ό μμλ°λ ν΄λμ€μ΄λ€.
μμ μμ λ₯Ό 보면 Iterator κ°μ²΄λ₯Ό ꡬνν¨μΌλ‘μ¨ ν΄λΉ Iterator κ°μ²΄λ‘ μνκ° κ°λ₯ν κ²μ λ³Ό μ μλ€.
μ§κΈμ Book κ°μ²΄λ₯Ό BookShelf.books[] λΌλ μ μ λ°°μ΄μ λ΄κ³ μμ§λ§, λ§μ½ μ°½κ³ λΌλ κ°μ²΄μμλ Book κ°μ²΄λ₯Ό λ€λ₯Έ μλ£κ΅¬μ‘°λ‘ λ΄λλ€λ μν©μ κ°μ ν΄λ³΄μ.
ν΄λΉ ν¨ν΄μ μ¬μ©νμ§ μλλ€λ©΄ μ°½κ³ κ°μ²΄μ μλ Bookμ μννλ €λ©΄ λ€μ μνμ½λλ₯Ό μμ±ν΄μΌ ν κ²μ΄λ€. νμ§λ§ ν΄λΉ ν¨ν΄μ μ΄μ©νλ€λ©΄ κΈ°μ‘΄μ Iteratorλ‘ μννλ κ²μ λμΌνκ² μ¬μ©ν μ μλ€.
ν¨ν΄ μ¬μ© μκΈ°
- 컬λ μ μ μκ΄μμ΄ κ°μ²΄ μν λ°©μμ ν΅μΌν λ
- 컬λ μ μ 볡μ‘ν λ΄λΆ ꡬ쑰λ₯Ό ν΄λΌμ΄μΈνΈλ‘λΆν° μ¨κΈ°κ³ μΆμ λ
- 컬λ μ μ’ λ₯κ° λ³κ²½ κ°λ₯μ±μ΄ μμ λ
μ₯μ
- μ¬λ¬ ννμ μλ£ κ΅¬μ‘°μ λν΄ λμΌν μν λ°©λ²μ μ 곡
- 컬λ μ μ λ΄λΆ ꡬ쑰 λ° μν λ°©μμ λͺ°λΌλ λ¨
- λ¨μΌ μ± μ μμΉ(SRP) μ€μ - μν μκ³ λ¦¬μ¦μ Iterator ꡬν체μ 맑겨 κ° ν΄λμ€μ μ± μμ΄ λΆλ¦¬λ¨
- κ°λ°© νμ μμΉ(OCP) μ€μ - μλ£κ΅¬μ‘°μ μ’ λ₯κ° λ³κ²½λμ΄λ μν μ½λλ μμλμ§ μμ μμ μλ λ«νμμ
λ¨μ
- κ°λ¨ν 컬λ μ λ§ μ¬μ©νλ κ²½μ° ν¨ν΄μ μ μ©νλ©΄ μ€νλ € 볡μ‘λλ§ μ¦κ°ν μ μμ
'ποΈ λμμΈ ν¨ν΄' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
νλ‘μ ν¨ν΄(Proxy Pattern) (0) | 2023.05.30 |
---|