개발 공부/Java
이펙티브 자바 아이템 24 - 멤버 클래스는 되도록 static 으로 만들라 - 완벽 공략
개발인생
2022. 12. 2. 13:36
반응형
아이템 24 - 멤버 클래스는 되도록 static 으로 만들라 - 완벽 공략
이 글은 백기선 님의 이펙티브 자바 강의와 이펙티브 자바 3 / E 편을 참고하여 작성하였습니다.
어댑터 패턴
어댑터 패턴은 기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꾸는 패턴이다.
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;
}
}
}
기존의 클래스가 있고, 그걸 클라이언트가 사용하는 Iterator 인터페이스를 구현함으로써
Iterator 타입으로 사용할 수 있게 해주는 걸 어댑터 패턴 이라고 한다.
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 을 다룰때 사용하는 코드이다.
InputStream
을 InputStreamReader
에 담아 InputStreamReader
으로 사용할 수 있고,
InputStreamReader
을 BufferedReader
에 담아 BufferedReader
로 사용할 수 있다.
클라이언트가 사용하는 인터페이스를 따르지 않는 기존 코드를 재사용할 수 있게 해준다.
기존 코드가 하던 일과 특정 인터페이스로 변환하는 작업을 따로 나눌수도 있다.
단점으로는 어댑터 역할을 하는 클래스가 하나 생긴다는 것이다.
반응형