코드 4-1은 더미 이중 연결 리스트에서 데이터를 저장할 노드를 구현한 것입니다. 노드 클래스의 생성자를 보면 데이터를 저장할 __data, 이전 노드를 참조할 __prev, 다음 노드를 참조할 __next가 멤버입니다. 프로퍼티를 이용하여 캡슐화했습니다. 이 책에서는 프로퍼티나 캡슐화는 자세하게 설명하지 않겠습니다. 아직 프로퍼티나 캡슐화 같은 OOP 개념을 익히지 않았다면 __data와 __prev, __next를 외부에서 접근할 때 실제 변수 이름 대신 data와 prev, next로 접근할 수 있도록 했다는 정도로만 정리하고 공부를 이어 나가면 됩니다.
이제 DoubleLinkedList 클래스를 만들어 보겠습니다. 먼저 인스턴스 멤버를 고민해 봅니다. 더미 리스트이므로 더미를 가지고 있어야 하겠지요. 리스트의 맨 앞에 더미 노드를 하나 만들고 이를 head라는 인스턴스 멤버로 가리키게 합니다. 리스트의 맨 마지막에도 더미 노드를 하나 만들고 이를 tail이라는 인스턴스 멤버로 가리키게 합니다. 그리고 이 둘을 연결해서 초기화합니다. 마지막으로 리스트에 데이터가 몇 개 있는지 저장하고자 d_size라는 인스턴스 멤버를 둡니다. 이를 코드로 살펴본 후 그림으로 확인하도록 하죠.
코드 4-2
class DoubleLinkedList:
def __init__(self):
# 리스트의 맨 처음과 마지막은 실제 데이터를
# 저장하지 않는 노드입니다. 이를 더미 노드라고 합니다.
self.head = Node()
self.tail = Node()
# 초기화
# head와 tail을 연결합니다.
self.head.next = self.tail
self.tail.prev = self.head
# 데이터 개수를 저장할 변수입니다.
self.d_size = 0