반응형
아이템 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
로 사용할 수 있다.
클라이언트가 사용하는 인터페이스를 따르지 않는 기존 코드를 재사용할 수 있게 해준다.
기존 코드가 하던 일과 특정 인터페이스로 변환하는 작업을 따로 나눌수도 있다.
단점으로는 어댑터 역할을 하는 클래스가 하나 생긴다는 것이다.
반응형
'개발 공부 > Java' 카테고리의 다른 글
이펙티브 자바 아이템 26 - 로 타입은 사용하지 말라 - 핵심 정리 (1) | 2022.12.07 |
---|---|
이펙티브 자바 아이템 25 - 톱 레벨 클래스는 한 파일에 하나만 담으라 - 핵심 정리 (0) | 2022.12.02 |
이펙티브 자바 아이템 24 - 멤버 클래스는 되도록 static 으로 만들라 - 핵심 정리 (1) | 2022.12.02 |
이펙티브 자바 아이템 23 - 태그 달린 클래스보다는 클래스 계층 구조를 활용하라 - 핵심 정리 (0) | 2022.11.30 |
이펙티브 자바 아이템 22 - 인터페이스는 타입을 정의하는 용도로만 사용하라 - 핵심 정리 (0) | 2022.11.30 |
댓글