__str__ 메소드
링크드 리스트를 클래스로 만들었으니까 링크드 리스트를 문자열로 표현해주는 __str__ 메소드를 정의해봅시다. __str__ 메소드는 그냥 링크드 리스트를 출력할 때 자동으로 링크드 리스트의 내용을 사람들이 이해할 수 있는 문자열로 리턴해주는 메소드로 이해하시면 됩니다.
링크드 리스트 __str__ 메소드
class LinkedList:
"""링크드 리스트 클래스"""
def __init__(self):
self.head = None # 링크드 리스트의 가장 앞 노드
self.tail = None # 링크드 리스트의 가장 뒤 노드
def append(self, data):
"""링크드 리스트 추가 연산 메소드"""
new_node = Node(data)
# 링크드 리스트가 비어 있으면 새로운 노드가 링크드 리스트의 처음이자 마지막 노드다
if self.head is None:
self.head = new_node
self.tail = new_node
# 링크드 리스트가 비어 있지 않으면
else:
self.tail.next = new_node # 가장 마지막 노드 뒤에 새로운 노드를 추가하고
self.tail = new_node # 마지막 노드를 추가한 노드로 바꿔준다
def __str__(self):
"""링크드 리스트를 문자열로 표현해서 리턴하는 메소드"""
res_str = "|"
# 링크드 리스트 안에 모든 노드를 돌기 위한 변수. 일단 가장 앞 노드로 정의한다.
iterator = self.head
# 링크드 리스트 끝까지 돈다
while iterator is not None:
# 각 노드의 데이터를 리턴하는 문자열에 더해준다
res_str += f" {iterator.data} |"
iterator = iterator.next # 다음 노드로 넘어간다
return res_str
__str__ 메소드는 문자열을 리턴하니까 일단 리턴 시킬 res_str 변수를 빈 문자열로 정의합니다. iterator을 써서 링크드 리스트를 도는 방법은 이미 배웠죠?
- iterator 변수를 링크드 리스트의 head를 가리키게 합니다
- iterator 변수가 None이 아닐 때까지 (링크드 리스트의 처음부터 끝 노드까지) iterator 변수의 data를 res_str 변수에 추가해 줍니다. iterator 변수의 next 속성을 이용해서 while 문을 돌 때마다 다음 노드로 갑니다.
- 링크드 리스트를 다 돈 후에 res_str 변수를 리턴합니다.
한 번 제대로 코드를 작성했는지 확인해봅시다.
# 새로운 링크드 리스트 생성
linked_list = LinkedList()
# 링크드 리스트에 데이터 추가
linked_list.append(2)
linked_list.append(3)
linked_list.append(5)
linked_list.append(7)
linked_list.append(11)
영상에서와 동일하게 링크드 리스트에 노드를 추가해줬습니다.
print(linked_list) # 링크드 리스트 출력
그다음에 이렇게 링크드 리스트 인스턴스를 출력할 건데요. 이때 노트 위에서 정의한 __str__ 메소드가 호출되는 거죠.
| 2 | 3 | 5 | 7 | 11 |
링크드 리스트의 내용이 원하는 대로 잘 출력됩니다!
'Algorithm > 자료구조' 카테고리의 다른 글
[해시 테이블] 파이썬 hash 함수 (0) | 2023.08.03 |
---|---|
[해시 테이블] 해시 함수 (0) | 2023.08.03 |
[배열] 동적 배열 크기 줄이기 (0) | 2023.07.31 |
[배열] 동적 배열 삭제 연산 (0) | 2023.07.31 |
[배열] 분할 상환 분석 적용 (0) | 2023.07.28 |