Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed
差分
このページの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(); | ||
+ | } | ||
+ | } | ||
+ | </ | ||