출처 |https://www.youtube.com/playlist?list=PLe6NQuuFBu7FhPfxkjDd2cWnTy2y_w_jZ
소프트웨어 설계 방법
반복되는 패턴처럼 자주 나타나는 클래스 간의 관계를 맺는 방법이다.
클래스는 최소한의 단위 기능을 가짐
큰 기능은 이러한 단위 기능을 갖는 클래스들 간의 관계를 통해 개발됨
꼭 필요한 것들만으로 구성된 최적화된 소프트웨어 개발이 용이함
문제 발생 시 최소한의 코드 수정으로 유지보수가 용이함
기존 기능에 영향을 주지 않고 새로운 기능 추가가 용이함
Class Diagram은 클래스 간의 관계를 나타낸 다이어그램으로 UML에서 정의한 다이어그램 중 하나다.
선
들은 클래스 <-> 인터페이스 간의 관계다.
동그라미
인터페이스를 의미한다.
사각형
클래스를 의미한다.
Aggregator
객체가 Iterator
인터페이스 객체를 생성한다 라는 의미다.
1. Aggregator
인터페이스를 Array
에서 구현한다 라는 의미다.
1. 다이아 기호를 갖는 선
ArrayIterator가 Array를 필드로서 갖는다. 라는 의미다.
2. 다이아
표시는 소유의 의미다.
3. 다이아가 채워지지 않았으면, 생명주기를 같이하지 않는다는 의미다.
1. Array가 Item 객체를 필드로서 갖는다는 의미다.
2. 다이아 안이 채워진[검정색] 경우 생명주기를 함께한다 라는 의미다. -> Item객체가 메모리에서 소멸되면/Array도 같이 소멸된다.
1. 이 별표
는 Array 클래스가 Item 객체를 여러개 가질 수 있다는 의미다.
package DesignPattern.Iterator;
public interface Aggregator{
Iterator iterator();
// Aggregator 객체는 iterator를 생성한다. 라고 되어 있는데,
}
package DesignPattern.Iterator;
public interface Iterator {
boolean next(); // 다음 구성 데이터를 얻을 수 있다면 true or false
Object current(); // 구성 데이터를 하나 얻어 반환한다. 구성 데이터 반환은 정해지지 x
}
package DesignPattern.Iterator;
public class Array implements Aggregator {
private Item[] items;
public Array(Item[] items)
{
this.items = items;
}
public Item getItem(int index)
{
return items[index];
}
public int getCount()
{
return items.length;
}
@Override
public Iterator iterator()
{
return new ArrayIterator(this);
}
}
package DesignPattern.Iterator;
public class ArrayIterator implements Iterator {
private Array array;
private int index;
public ArrayIterator(Array array)
{
this.array = array;
this.index = -1;
}
@Override
public boolean next() {
index++;
return index < array.getCount();
}
@Override
public Object current() {
return array.getItem(index);
}
}
package DesignPattern.Iterator;
public class Item {
private String name;
private int cost;
public Item(String name, int cost) {
this.name = name;
this.cost = cost;
}
@Override
public String toString() {
return "Item{" +
"name='" + name + '\'' +
", cost='" + cost + '\'' +
'}';
}
}
package DesignPattern.Iterator;
import DesignPattern.Iterator.Iterator;
public class MainEntry {
public static void main(String[] args) {
Item[] items = {
new Item("CPU", 1000),
new Item("Keyboard", 3000),
new Item("Mouse", 5000),
new Item("HDD", 500)
};
Array array = new Array(items); //반복자 생성
Iterator it = array.iterator();
while(it.next())
{
Item item = (Item)it.current();
System.out.println(item);
}
}
}