디자인 패턴 ~Iterator~

1. 소개



GoF의 디자인 패턴에서 Iterator 패턴을 요약합니다.

2. Iterator 패턴이란?


  • Iterate라는 영어 단어는 무언가를 반복한다는 의미입니다.
  • Iterator 패턴은, 집합체의 요소에 대해, 차례로 액세스 하는 처리를 실시하기 위한 방식입니다.
  • GoF 디자인 패턴은 동작에 대한 디자인 패턴으로 분류됩니다.

  • 3. 샘플 클래스 다이어그램





    4. 샘플 프로그램



    클래스(교실)에 학생을 넣어 학생의 이름을 차례로 표시하는 프로그램입니다.

    4-1. Iterator 인터페이스



    요소를 순차적으로 스캔하는 인터페이스입니다.

    Iterator.java
    public interface Iterator {
        public abstract boolean hasNext();
        public abstract Object next();
    }
    

    4-2. Aggregate 인터페이스



    Iterator를 만드는 인터페이스입니다. 샘플에서는 「집합체」라고 하고 있습니다.

    Aggregate.java
    public interface Aggregate {
        public abstract Iterator iterator();
    }
    

    4-3. Student 클래스



    집합체의 요소가 되는 클래스입니다. 샘플에서는 "학생"이라고 합니다.

    Student.java
    public class Student {
    
        private String name;
    
        public Student(String name) {
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    }
    

    4-4. ClassRoom 클래스



    Aggregate가 정한 인터페이스를 구현하는 클래스입니다. 샘플에서는 「교실」이라고 하고 있습니다.

    ClassRoom.java
    public class ClassRoom implements Aggregate {
    
        private Student[] students;
        private int last = 0;
    
        public ClassRoom(int maxsize) {
            this.students = new Student[maxsize];
        }
    
        public Student getStudentAt(int index) {
            return students[index];
        }
    
        public void appendStudent(Student student) {
            this.students[last] = student;
            last++;
        }
    
        public int getLength() {
            return last;
        }
    
        public Iterator iterator() {
            return new ClassRoomIterator(this);
        }
    }
    

    4-5. ClassRoomIterator 클래스



    Iterator가 정한 인터페이스를 구현하는 클래스입니다.

    ClassRoomIterator.java
    public class ClassRoomIterator implements Iterator {
    
        private ClassRoom classRoom;
        private int index;
    
        public ClassRoomIterator(ClassRoom classRoom) {
            this.classRoom = classRoom;
            this.index = 0;
        }
    
        public boolean hasNext() {
            if (index < classRoom.getLength()) {
                return true;
            } else {
                return false;
            }
        }
    
        public Object next() {
            Student student = classRoom.getStudentAt(index);
            index++;
            return student;
        }
    }
    

    4-6. Main 클래스



    메인 처리를 실시하는 클래스입니다.

    Main.java
    public class Main {
        public static void main(String[] args) {
    
            ClassRoom classRoom = new ClassRoom(4);
            classRoom.appendStudent(new Student("田中"));
            classRoom.appendStudent(new Student("山田"));
            classRoom.appendStudent(new Student("鈴木"));
            classRoom.appendStudent(new Student("佐藤"));
    
            Iterator iterator= classRoom.iterator();
    
            while (iterator.hasNext()) {
                Student student = (Student)iterator.next();
                System.out.println(student.getName());
            }
        }
    }
    

    4-7. 실행 결과


    田中
    山田
    鈴木
    佐藤
    

    5. 장점



    Iterator 패턴의 장점은 구현과 분리되어 계산을 할 수 있다는 것입니다.
    디자인 패턴은 클래스를 부품으로 사용할 수 있도록 하고, 재이용성을 촉진하는 것입니다.
    샘플 프로그램의 Main 클래스에서 사용되고 있는 Iterator 메소드는, hasNext(), next()만이 됩니다. 즉, ClassRoom 클래스에 의존하지 않는 구현이 되어 있어, 배열의 사이즈등을 신경쓰지 않아서 좋아집니다.

    6. GitHub


  • htps : // 기주 b. 코 m / 이타나카 730 /

  • 7. 디자인 패턴 목록


  • GoF 디자인 패턴 요약

  • 8. 참고



    이번 기사 및 샘플 프로그램은 이하의 서적을 바탕으로 작성하였습니다.
  • Java 언어로 배우는 디자인 패턴 입문

  • 매우 이해하기 쉽고 공부가되었습니다. 감사합니다.
    디자인 패턴이나 샘플 프로그램에 대한 설명이 상세하게 쓰여져 있으므로, 꼭 서적의 분도 봐 주세요.

    좋은 웹페이지 즐겨찾기