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();
|
'Java > Classes Relationships' 카테고리의 다른 글
동적 클래스 로딩 - 클래스 이름으로 클래스를 동적으로 로딩한다. (0) | 2013.10.23 |
---|---|
Interface vs Abstract (0) | 2013.10.18 |
Simple UML Tutorials (0) | 2013.02.12 |
Inheritance vs Composition (0) | 2013.02.09 |
Interface as Callback (0) | 2013.02.06 |