본문 바로가기
개발 공부/Java

이펙티브 자바 아이템 24 - 멤버 클래스는 되도록 static 으로 만들라 - 완벽 공략

by 개발인생 2022. 12. 2.
반응형

아이템 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 을 다룰때 사용하는 코드이다.

InputStreamInputStreamReader 에 담아 InputStreamReader 으로 사용할 수 있고,

InputStreamReaderBufferedReader 에 담아 BufferedReader 로 사용할 수 있다.

클라이언트가 사용하는 인터페이스를 따르지 않는 기존 코드를 재사용할 수 있게 해준다.

기존 코드가 하던 일과 특정 인터페이스로 변환하는 작업을 따로 나눌수도 있다.

단점으로는 어댑터 역할을 하는 클래스가 하나 생긴다는 것이다.

반응형

댓글