Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

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

QR Code
QR Code study:java:design_pattern:adapter (generated for current page)