read checkpoint

파일 읽기는 성공했지만 main의 책임이 이미 넘친다

`poem.txt`를 문자열로 읽는 흐름은 동작한다. 하지만 인수 파싱, 파일 I/O, 임시 출력, 패닉 기반 오류 처리가 한 함수 안에 모여 있다.

지금 코드가 확인한 것

1

커맨드 라인 인수를 `Vec<String>`으로 모은다.

2

`query`와 `file_path`를 인덱스로 꺼낸다.

3

`fs::read_to_string`으로 파일 전체를 `String`으로 읽는다.

4

내용을 출력해 경로와 파일 읽기가 이어지는지 확인한다.

다음 절에서 반드시 풀어야 할 것

main 파싱과 파일 읽기를 모두 떠안아 테스트하기 어렵다.
args[index] 인수가 부족하면 사용자 설명 없이 인덱스 패닉이 난다.
expect 파일 없음, 권한 없음 같은 실패 이유가 같은 메시지로 뭉개진다.
println! 검색 기능 전에는 임시 확인용이고, 나중에는 결과 출력으로 바뀐다.

Config

검색어와 파일 경로를 하나의 설정 값으로 묶어 이름을 분명히 한다.

build

인수 개수 부족을 Err로 돌려준다.

run

파일 읽기와 이후 검색 로직을 main 밖의 실행 함수로 분리한다.

Result

`?`로 I/O 실패를 전파하고 main에서 사용자 메시지와 종료 코드를 정한다.

읽는 기준

이 절의 코드는 완성본이 아니라 리팩터링을 시작할 기준점이다. 먼저 동작을 확인했으므로, 다음에는 책임을 나누고 오류를 값으로 다루는 구조로 옮긴다.