Inner Classes as Adapters

내부 클래스 기술을 이용하여 유용한 어뎁터 클래스를 작성할 있다.

 

다음 예를 보자.

public class EmployeeList {

 

       private Employee[] employees = …;

}

 

 

위의 직원 목록에대하여 Iterator 인터페이스를 지원하는  EmployeeListIterator 구현한다고 가정하자.

그럼 다음과 같은 코드 구조를 갖는 Iterator 클래스를 추가로 구현하는 방법을 생각할 있을 것이다.

 

public class EmployeeListIterator implements java.util.Iterator {

       // lots of knowledge about EmployeeList

}

 

 

하지만 위의 방법은 불필요하게 EmployeeList에대한 많은 콘트롤이 필요하다.(strong coupling)  따라서 위의 방법을 다음과 같이 Inner Class 생성하면 보다 깔끔한 코드가 완성된다.

 

public class EmployeeList {

 

       private Employee[] employees;

 

       class Iterator implements java.util.Iterator {

              int element = 0;

 

              @Override

              public boolean hasNext() {

                     return element < employees.length;

              }

 

              @Override

              public Object next() {

                     if(hasNext()){

                           return employees[element++];

                     } else {

                           throw new NoSuchElementException();

                     }

              }

 

              @Override

              public void remove() {

                     throw new UnsupportedOperationException();

              }

       }

 

       public Iterator getIterator() {

              return new Iterator();

       }

 

       public void setEmployees(Employee[] employees) {

              this.employees = employees;

       }

}

 

 

위의 코드에서

       public Iterator getIterator() {

              return new Iterator();

       }

메소드를 제공하므로서 실제로 사용하는 코드에서는 간단하게 다음과 같이 이용 있게된다.

 

java.util.Iterator iter = new EmployeeList().getIterator();

 

 



Posted by Steven J.S Min
,