Open callmeaxxe opened 1 year ago
기존 코드를 클라이언트가 사용하는 인터페이스의 구현체로 바꿔주는 패턴
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
라는 클래스가 존재했는데, 클라이언트가 사용하는 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);
}
}
}
InputStreamReader
를 BufferedReader
에 담아 변환해서 쓰는것이 해당됨
아이템 24. 멤버 클래스는 되도록 static으로 만들라.
멤버란 클래스의 구성 요소 (필드, 메서드, 내부 클래스, ..) 중첩 클래스는 특정 클래스 내부에 또 다른 클래스가 정의된 것을 의미 클래스 내부에 정의되어 있다고 해서 모든 중첩 클래스가 멤버 클래스가 되는건 아니다
핵심 정리: 네 종류의 중첩 클래스와 각각의 쓰임
이 아이템에서는 멤버 클래스에 초점을 맞추고 있고, 비정적 멤버 클래스 대신에 정적 멤버 클래스를 쓰라는 것이 핵심
정적 멤버 클래스
비정적 멤버 클래스
익명 클래스
지역 클래스