리스트와 딕셔너리로 추가·조회 구현하기
기록 순서와 ID 조회를 구분해 자료구조를 선택합니다.
진도 0%
레슨
- 순서 있는 독서 목록
리스트의 추가·순회와 중복을 설명합니다.
- ID로 기록 조회하기
딕셔너리 키와 중복 정책을 정합니다.
- 값과 공유 참조 확인하기
복사와 참조 공유를 수정 결과로 구분합니다.
- 반복 탐색과 키 조회 비교
동등한 키·해시 조회와 탐색 작업량을 설명합니다.
ID가 있는 독서 기록의 추가·조회 기능을 완성합니다.
m04 미션 solution 전체를 이어받습니다. 기존 records.py의 목록 추가 API·CLI·요약·26개 테스트를 보존하고 store.py에 ID 키 기반 메모리 저장소를 추가합니다. 파일 저장은 다음 모듈에서 다룹니다.
요구사항
- add_record·find_record·list_records를 구현하고 중복 ID 추가를 거부합니다.
- 목록 순서는 추가 순서를 유지하며 조회 실패는 명시적인 결과를 반환합니다.
- docs/structures.md에 반복 비교 횟수와 키 조회 선택 이유를 기록합니다.
- store.py의 add_record(store, raw_id, raw_title, raw_pages, raw_cost, raw_completed)는 ID를 strip한 뒤 빈 ID는 ERR_ID, 중복은 ERR_DUPLICATE_ID로 먼저 거부하고 기존 필드 오류 코드를 이어서 반환합니다. 성공은 OK이며 id 필드를 가진 기록을 저장합니다.
- find_record(store, record_id)는 strip한 ID가 없으면 None, 있으면 기록 복사본을 반환합니다. list_records(store, completed_only=False)는 추가 순서의 복사 목록을 반환하며 True일 때 completed=1만 포함합니다. 현재 필드는 문자열·정수입니다.
완료 기준
- 추가·중복 거부·없는 ID·한글 제목·완료 필터 테스트가 통과합니다.
- 조회 결과를 바꿔도 저장소의 원본 기록이 바뀌지 않습니다.
- 기존 26개와 신규 9개, 총 35개 unittest가 통과합니다. 실패 후 저장소 전체 보존과 조회·목록 반환 수정의 격리를 확인합니다.
python3 -m unittest discover -s tests -p "test_*.py"미션 시작 코드
모범 답안
모범 답안 내려받기검토 기준
- 순서가 필요한 목록과 키 조회의 책임을 구분합니다.
- 키 조회가 모든 상황에서 같은 비용이라는 단정을 피하고 관찰 범위를 적습니다.