일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 회전하는큐
- C언어
- 반복자
- 다이어그램
- ps
- 구조패턴
- 생성패턴
- bfs
- 알고리즘
- c++
- 이터레이터
- problemsolving
- 팩토리메소드
- 테트로미노
- 옵저버
- 빌더패턴
- FactoryMethod
- 데코레이터패턴
- 완전탐색
- C
- 행위패턴
- 백준
- AbstractFactory
- 14500
- 어댑터패턴
- 추상팩토리
- 클래스다이어그램
- UML
- 재귀
- 디자인패턴
- Today
- Total
salsa source
[디자인패턴]소개 및 Iterator 패턴 본문
<출처 : Java 언어로 배우는 디자인패턴 입문>
디자인패턴 the Gang of Four(GoF)
매일 쓰고있는 프로그램을 새로운 시점에서 다시 생각하고, 재사용을 쉽게 하고,
기능 확장이 쉬운 소프트웨어를 만들기 위한 유익한 기법. (GoF가 가장 유명)
UML(Unified Modeling Language)
시스템을 시각화하거나 시스템의 사양이나 설계를 문서화하기 위한 표현 방법
클래스 다이어그램
클래스나 인스턴스, 인터페이스 등의 정적인 관계를 표현한 것.
필드 == 멤버변수 메소드 == 멤버함수
인터페이스 : 클래스들이 구현해야 하는 동작을 지정하는 데 사용되는 추상형
시퀀스 다이어그램
시간에 따라 변하는 것. 동적인 관계
Iterator - 순서대로 지정해서 처리하기
복수의 요소가 모여있는 집합에서 요소를 순서대로 지정해서 처리하는 Iterator 패턴
Iterator 패턴 - 다수의 집합에서 순서대로 지정하며 전체를 검색하는 처리를 실행하기 위한 것
Iterator == 반복자 무엇인가를 반복한다라는 의미
Iterator (반복자)
요소를 순서대로 검색해가는 인터페이스를 결정.
다음 요소가 존재하는지 hasNext() 다음 요소 얻는 next()
ConcreateIterator (구체적인 반복자)
Iterator가 결정한 인터페이스 구현
검색하기 위한 정보 가지고 있어야 함
Aggregate (집합체)
Iterator 만들어내는 인터페이스를 결정
ConcreateAggregate (구체적인 집합체)
Aggregate역할이 결정한 인터페이스를 실제로 구현
ConcreateIterator 역할의 인스턴스 만듦
Aggregate 인터페이스
Public interface Aggregate{
public abstract Iterator interator();
}
Iterator 인터페이스
public interface Iterator{
public abstract boolean hasNext();
public abstract Object next();
}
BookShelf 클래스
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;
last++;
}
public int getLength(){
return last;
}
public Iterator
iterator(){
return new
BookShelfIterator(this);
}
}
BookShelfIterator 클래스
public class BookShelfIterator implements Iterator{
private BookShelf booShelf;
//검색할 서가
private int index; //현재 가리키는 책
public BookShelfIterator(BookShelf
bookShelf){ //서가검색 메소드
this.bookShelf=bookshelf;
this.index = 0;
}
public boolean hasNext(){
//다음 책이 있는지
if(index<bookShelf.getLength()){
return true;
}else{
return false;
}
}
public Object next(){
//다음 책 반환하고 그 다음으로 진행
book =
bookShelf.getBookAt(index);
index++;
return book;
}
}
public class Main {
public static void main(String[]
args){
BookShlf bookShelf = new
BookShelf(4); //책 4권있는 서가 만들기
bookShelf.appendBook(new Book("Around the World in
80"));
bookShelf.appendBook(new
Book("Bible"));
bookShelf.appendBook(new
Book("Cinderella"));
bookShelf.appendBook(new
Book("Daddy-Long-Legs"));
Iterator it = bookShelf.iterator(); //서가를 검색하기 위한 iterator 인스턴스
while(it.hasNext()){
Book book =
(Book)it.next();
System.out.println(book.getName());
}
}
}
Iterator 패턴을 사용해야하는 이유?
- 구현과 분리해서 하나씩 셀 수 있다!
while(it.hasNext()){
Book book = (Book)
it.next();
System.out.println(book.getName());
}
Bookshelf 구현에 의존하지 않음
Bookshelf를 어떻게 수정하더라도 while루프는 변경하지 않아도 동작하게 됨
- 클래스의 재이용화를 촉진
클래스를 부품처럼 사용 가능.
하나의 부품을 수정해도 다른 부품에도 영향 없이 적은 수정만으로 끝낼 수 있음
'STUDY > 디자인패턴' 카테고리의 다른 글
[디자인패턴]클래스다이어그램(3) 구조패턴 - 데코레이터, 어댑터 (0) | 2018.04.02 |
---|---|
[디자인패턴]클래스다이어그램(2) 행위패턴 - 반복자, 관찰자, 전략 (0) | 2018.04.02 |
[디자인패턴]클래스다이어그램(1) 생성패턴 - 빌더, 추상팩토리, 팩토리메소드, 싱글톤 (0) | 2018.04.02 |
[디자인패턴] Observer패턴 (0) | 2018.02.08 |