差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| study:java:design_pattern:adapter [2008/09/06 12:54] – banana | study:java:design_pattern:adapter [2008/09/06 13:05] (現在) – banana | ||
|---|---|---|---|
| 行 39: | 行 39: | ||
| Enumeration 인터페이스를 사용하는 구형 코드를 사용해야 하는 경우가 종종 있지만, 새로 | Enumeration 인터페이스를 사용하는 구형 코드를 사용해야 하는 경우가 종종 있지만, 새로 | ||
| 만든 코드에서는 Iterator만 사용할 계획입니다. 이런 경우에 어댑터 패턴을 적용하면 좋겠죠? | 만든 코드에서는 Iterator만 사용할 계획입니다. 이런 경우에 어댑터 패턴을 적용하면 좋겠죠? | ||
| + | |||
| ===== Adapter Design ===== | ===== Adapter Design ===== | ||
| 行 47: | 行 48: | ||
| 일단 클래스 다이어그램은 다음과 같은 식으로 그릴 수 있습니다. | 일단 클래스 다이어그램은 다음과 같은 식으로 그릴 수 있습니다. | ||
| {{: | {{: | ||
| + | |||
| + | |||
| + | |||
| + | ===== remove() method ===== | ||
| + | Enumeration에서는 remove()에 해당하는 기능을 제공하지 않습니다. 읽기 전용 인터페이스라고 할 수 있죠. | ||
| + | 어댑터의 차원에서 완벽하게 작동하는 remove()메소드를 구현할 수 있는 방법은 없습니다. 그나마 가장 | ||
| + | 좋은 방법으로 런타임 예외를 던지는 방법을 생각해 볼 수 있을 것 같습니다. 다행히도 Iterator 인터페이스를 | ||
| + | 디자인한 사람들은 이런 필요성을 미리 예견하고 remove()메소드를 구현할 때 **%%UnsupportedOperationException%%** | ||
| + | 을 지원하도록 만들었습니다. | ||
| + | |||
| + | 이런 경우는 어댑터가 완벽하게 적용될 수 없는 경우라고 할 수 있습니다. 클라이언트 쪽에서는 예외가 생길 수 있는 | ||
| + | 가능성을 염두에 두고 있어야 합니다. 하지만 클라이언트에서 충분히 주의를 기울이고, | ||
| + | 두면 상당히 쓸만한 해결책이 될 수 있을 것입니다. | ||
| + | |||
| + | ===== Snippet of EnumerationIterator Class ===== | ||
| + | 여전히 Enumeration을 만들어내는 구형 클래스에 대해서 사용할 수 있는 간단하지만 효과적인 코드입니다. | ||
| + | <code java> | ||
| + | public class EnumerationIterator implements Iterator{ | ||
| + | |||
| + | | ||
| + | |||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | | ||
| + | | ||
| + | } | ||
| + | |||
| + | | ||
| + | throw new UnsupportedOperationException(); | ||
| + | } | ||
| + | } | ||
| + | </ | ||