제24조. 가능할 때마다 멤버 클래스를 정적으로 만드십시오.
“p.147. 어댑터”
(유효한 자바) 항목24. 가능할 때마다 멤버 클래스를 정적으로 만드십시오. (history.com)
비정적 멤버 클래스는 어댑터를 정의할 때 주로 사용한다고 합니다.
이때 어댑터 패턴이란?
: 기존 코드를 클라이언트가 사용하는 인터페이스 구현으로 바꾸는 패턴입니다.
말한다
즉, 코드를 재사용하기 위해 구조를 바꾸는 패턴입니다.
클라이언트에서 사용하는 인터페이스와 일치하지 않는 기존 코드를 재사용할 수 있습니다.
public class AdapterInJava
{
public static void main(String() args)
{
// 어댑터 패턴의 대표적인 예제
try (InputStream is = new FileInputStream("number.txt");
InputStreamReader isr = new InputStreamReader(is);
BufferedReader reader = new BufferedReader(isr))
{
while (reader.ready())
{
System.out.println(reader.readLine());
}
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
}
InputStream, InputStreamReader 및 BufferedReader는 어댑터 패턴을 사용하는 일반적인 예입니다.
public class MySet<E> extends AbstractSet<E>
{
@Override
public Iterator<E> iterator()
{
return new MyIterator();
}
@Override
public int size()
{
return 0;
}
// 어댑터 패턴
private class MyIterator implements Iterator<E>
{
@Override
public boolean hasNext()
{
return false;
}
@Override
public E next()
{
return null;
}
}
}
그리고 MyIterator도 어댑터 패턴을 사용한 예입니다.
정리하다
어댑터 패턴은 기능상 올바르게 작동하는 코드를 단순히 인터페이스 차이 때문에 사용할 수 없을 때 흔히 사용되는 패턴입니다.
기존 코드에 버그가 있거나 수정 작업이 필요한 경우에도 유용합니다.
어댑터 패턴은 실제로 널리 사용되며 이전 레거시 코드 또는 라이브러리를 재사용할 때 유용합니다.
그리고 서로 호환되지 않는 인터페이스와 코드를 결합하여 응용 프로그램에서 작업하는 데 도움이 됩니다.