Home Behavior Patterns
Post
Cancel

Behavior Patterns

Iterator(반복자 패턴)

Iterator이란?

  • 컬렉션의 요소들의 기본 표현(리스트, 스택, 트리 등)을 노출하지 않고 하나씩 순회

장점

  • 단일 책임 원칙: 부피가 큰 순회 알고리즘들을 별도의 클래스들로 추출하여 클라이언트 코드와 컬렉션들을 정돈할 수 있다
  •  개방/폐쇄 원칙: 새로운 유형의 컬렉션들과 반복자들을 구현할 수 있으며 이들을 아무것도 훼손하지 않은 체 기존의 코드에 전달할 수 있다

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
class Node:
    """
    이진 트리의 노드를 나타내는 클래스
    """

    def __init__(self, value):
        self.value = value
        self.left = None
        self.right = None


class BinaryTree:
    """
    이진 트리 클래스로, 노드를 추가하고 순회하는 기능을 제공
    """

    def __init__(self, root):
        self.root = root

    def __iter__(self):
        return InOrderIterator(self.root)


class InOrderIterator:
    """
    중위 순회를 위한 이터레이터
    """

    def __init__(self, root):
        self.stack = []
        self._push_left(root)

    def _push_left(self, node):
        while node:
            self.stack.append(node)
            node = node.left

    def __next__(self):
        if not self.stack:
            raise StopIteration
        node = self.stack.pop()
        result = node.value
        if node.right:
            self._push_left(node.right)
        return result


# 사용 예시
root = Node(10)
root.left = Node(5)
root.right = Node(15)
root.left.left = Node(2)
root.left.right = Node(7)
root.right.right = Node(20)

tree = BinaryTree(root)

print("이진 트리 중위 순회:")
for value in tree:
    print(value)

This post is licensed under CC BY 4.0 by the author.

Structural Patterns

중국어10회