Devin.KR

리스트와 딕셔너리로 추가·조회 구현하기

기록 순서와 ID 조회를 구분해 자료구조를 선택합니다.

진도 0%

레슨

  1. 순서 있는 독서 목록

    리스트의 추가·순회와 중복을 설명합니다.

  2. ID로 기록 조회하기

    딕셔너리 키와 중복 정책을 정합니다.

  3. 값과 공유 참조 확인하기

    복사와 참조 공유를 수정 결과로 구분합니다.

  4. 반복 탐색과 키 조회 비교

    동등한 키·해시 조회와 탐색 작업량을 설명합니다.

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"
미션 시작 코드
모범 답안모범 답안 내려받기

검토 기준

  • 순서가 필요한 목록과 키 조회의 책임을 구분합니다.
  • 키 조회가 모든 상황에서 같은 비용이라는 단정을 피하고 관찰 범위를 적습니다.